Tu opposes Scheme/Lisp et OCaml/Haskell au niveau des capacités d'auto-transformation syntaxique, et tu dis "il y a un lien avec le typage". Je prétends que le lien est en fait syntaxique : la syntaxe des Scheme/Lisp est complètement homogène, les Abstract Syntax Tree sont tout simplement des arbres n-aires donc chaque noeud a la même tête (c'est une liste). C'est ce que j'appelle "pauvreté syntaxique".
À l'inverse, OCaml/Haskell et en général la plupart des langages ont un AST très hétérogène, avec de nombreuses constructions différentes, et donc plus rigide. Cette deuxième approche a ses avantages (on peut choisir une structure syntaxique visuellement plus adaptée à certaines situations, comme le | -> ... pour le pattern matching) mais apporte un fort coût d'entrée aux manipulations syntaxiques : il faut avoir les moyens de manipuler un AST plutôt complexe.
Les facilités de sous-évaluation à l'intérieur d'un programme sont une autre force de Scheme/Lisp (et dans l'ensemble c'est plutôt caractéristique des langages à typage simple), mais je ne pense pas qu'elles jouent beaucoup dans la création des macros. Par ailleurs il paraît (j'ai demandé à un lispeux qui passait) que les recommandations en la matière sont "pas d'eval inutile dans les macros" (ou plutôt "si tu veux eval, fait une fonction, on n'est pas des porcinets ici").
Enfin, l'argument que je pense déterminant est l'existence de versions syntaxiquement appauvries de langage statiquement typées, et qu'elles se retrouvent naturellement à permettre des macros à la lisp.
Par exemple
Liskell, un frontend Haskell avec une syntaxe Lisp (bon, c'est plutôt expérimental et personne ne l'utilise je crois) : après avoir créé une syntaxe homogène, il s'est retrouvé tout naturellement à implémenter des facilités de macrottage, parce que c'était devenu facile. Il existe aussi des syntaxes lispeuses pour OCaml, grâce à camlp4 (un projet qui s'attaque frontalement à la difficulté, en essayant de faciliter les transformations sur un AST fortement structuré tel que celui de OCaml), mais je n'ai pas entendu parler de projets de ce genre (visiblement ça n'intéresse pas tant de gens que ça).
Pour résumer, je pense que les facilités de macrotage syntaxique sont lié quasi-uniquement à la syntaxe, et pas au typage.
Partager