D'accord.
Donc, pour vous (/toi), un langage de haut niveau, ce serait un langage faiblement typé ou réflexif, par exemple?
Dans ce cas, on n'a pas du tout la même conception du haut niveau. Pour moi, un langage de haut niveau, c'est un langage qui a (au moins) les aspects suivants:
- syntaxe et sémantique opérationnelle claires et simples
- système de types fort et expressif
- abstraction importante par rapport à la machine.
La réflexivité entre-t-elle dans ce cadre? La question me semble mal posée (cf. (*) plus bas).
Ceci dit, la réflexivité ne fait pas forcément mauvais ménage avec un typage fort, contrairement à ce qu'on peut lire ici ou là. C'est vrai qu'on a intuitivement du mal à croire qu'on puisse les marier mais en fait, si (cf MetaOCaml, ou les langages à n niveaux).
Par ailleurs, l'implémentation du typage et de l'exécution sont fortement découplées en général, ou alors il y a un problème dans le langage.
J'admets par contre que c'est plus facile d'implémenter la réflexivité dans un interprète, vu qu'on programme ce dernier dans un langage gérant la mémoire à plus haut niveau que le microprocesseur.
(*) La réflexivité est un thème qui réapparaît souvent quand on parle des langages de programmation, et on dit souvent que c'est une fonctionnalité nécessaire. Ce qui m'étonne dans ce discours, c'est que la réflexivité n'est qu'une technique, qu'un moyen. Mais il est vrai que c'est assez fascinant, ce qui à mon avis occulte la réflexion (!) qu'il faut entreprendre.
La discussion ne devrait pas porter sur la réflexivité elle-même mais sur l'objectif auquel elle est censée répondre. Ce but, laissé souvent implicite, c'est en général la reconfiguration dynamique d'un programme, qui implique la génération et le chargement dynamiques de code. Or pour ça on n'a pas nécessairement besoin en pratique de toute la réflexivité.
Utiliser la réflexivité ex abrupto façon Lisp ou même Java, ça revient à contourner le typage (en passant par des quotes ou des chaînes de caractères).
Par contre, si on se concentre sur l'idée de reconfiguration dynamique, on peut trouver des primitives cloisonnées (contrairement à la réflexivité) qui suffisent à produire 99% des programmes (facilement 99% du temps) et qui bénéficient, elles, d'une sémantique abstraite (typage) claire et expressive.
Dans ces conditions, on a le beurre (la reconfiguration dynamique) et l'argent du beurre (la sûreté assurée par le typage fort).
[^] # Re: Mozilla souhaite s'allier à d'autres projet Libres pour faire face à MS-Longhorn
Posté par Anaximandre . En réponse à la dépêche Mozilla souhaite s'allier à d'autres projet Libres pour faire face à MS-Longhorn. Évalué à 4.
Donc, pour vous (/toi), un langage de haut niveau, ce serait un langage faiblement typé ou réflexif, par exemple?
Dans ce cas, on n'a pas du tout la même conception du haut niveau. Pour moi, un langage de haut niveau, c'est un langage qui a (au moins) les aspects suivants:
- syntaxe et sémantique opérationnelle claires et simples
- système de types fort et expressif
- abstraction importante par rapport à la machine.
La réflexivité entre-t-elle dans ce cadre? La question me semble mal posée (cf. (*) plus bas).
Ceci dit, la réflexivité ne fait pas forcément mauvais ménage avec un typage fort, contrairement à ce qu'on peut lire ici ou là. C'est vrai qu'on a intuitivement du mal à croire qu'on puisse les marier mais en fait, si (cf MetaOCaml, ou les langages à n niveaux).
Par ailleurs, l'implémentation du typage et de l'exécution sont fortement découplées en général, ou alors il y a un problème dans le langage.
J'admets par contre que c'est plus facile d'implémenter la réflexivité dans un interprète, vu qu'on programme ce dernier dans un langage gérant la mémoire à plus haut niveau que le microprocesseur.
(*) La réflexivité est un thème qui réapparaît souvent quand on parle des langages de programmation, et on dit souvent que c'est une fonctionnalité nécessaire. Ce qui m'étonne dans ce discours, c'est que la réflexivité n'est qu'une technique, qu'un moyen. Mais il est vrai que c'est assez fascinant, ce qui à mon avis occulte la réflexion (!) qu'il faut entreprendre.
La discussion ne devrait pas porter sur la réflexivité elle-même mais sur l'objectif auquel elle est censée répondre. Ce but, laissé souvent implicite, c'est en général la reconfiguration dynamique d'un programme, qui implique la génération et le chargement dynamiques de code. Or pour ça on n'a pas nécessairement besoin en pratique de toute la réflexivité.
Utiliser la réflexivité ex abrupto façon Lisp ou même Java, ça revient à contourner le typage (en passant par des quotes ou des chaînes de caractères).
Par contre, si on se concentre sur l'idée de reconfiguration dynamique, on peut trouver des primitives cloisonnées (contrairement à la réflexivité) qui suffisent à produire 99% des programmes (facilement 99% du temps) et qui bénéficient, elles, d'une sémantique abstraite (typage) claire et expressive.
Dans ces conditions, on a le beurre (la reconfiguration dynamique) et l'argent du beurre (la sûreté assurée par le typage fort).