Or en lisp, les macros permettent d'enrober du code avec d'autre code
Oui c'est l'homoiconicité. Perso je trouve ça génial.
Donc je me dis: ce système de macros, général, est un sur-ensemble des décorateurs et autres.
Beh non c'est assez différent, en fait. Il ne me semble pas pertinent de vouloir les imbriquer :
Un décorateur python, c'est une fonction qui prend une fonction en argument. Ce n'est pas de l'enrobage « syntaxique » de code. Et tu peux facilement imiter la même chose en lisp (enfin je suppose, perso je connais bien scheme mais pas lisp) ou dans la plupart des langages qui se revendiquent un tout petit peu fonctionnels.
Une macro, en scheme (mais je suppose que c'est la même chose pour lisp), c'est juste un genre de eval un peu spécial. Et tu pourrais (péniblement) le faire en python à coup de tableaux de strings concaténés.
Là où scheme (lisp) est très très fort (et de ce point de vue supérieur à python, si on part du principe que la métaprogrammation est quelque chose de désirable dans un programme), c'est qu'il est homoiconique. Donc au lieux de te faire chier comme en python avec de strings, ou comme en C avec un préprocesseur idiot et pénible, tu peux prendre n'importe quelle donnée et la réïfier comme un morceau de code. Et tu peux prendre n'importe quel code et le réifier comme de la donnée définie dans les types de base du langage. A volonté. Je n'ai jamais essayé de faire ça en python, mais j'imagine que ça doit être assez ardu car sa grammaire me semble très complexe en comparaison de scheme (lisp).
Bref, pour moi, en présentant les macros comme un « sur ensemble » des décorateurs, tu confonds un enrobage que je qualifierais de « syntaxique » avec un enrobage que je qualifierais de « fonctionnel ».
[^] # Re: Coquilles
Posté par Pol' uX (site web personnel) . En réponse au journal Découvrons Common Lisp. Comparaison avec l'environnement Python.. Évalué à 5.
Oui c'est l'homoiconicité. Perso je trouve ça génial.
Beh non c'est assez différent, en fait. Il ne me semble pas pertinent de vouloir les imbriquer :
Un décorateur python, c'est une fonction qui prend une fonction en argument. Ce n'est pas de l'enrobage « syntaxique » de code. Et tu peux facilement imiter la même chose en lisp (enfin je suppose, perso je connais bien scheme mais pas lisp) ou dans la plupart des langages qui se revendiquent un tout petit peu fonctionnels.
Une macro, en scheme (mais je suppose que c'est la même chose pour lisp), c'est juste un genre de eval un peu spécial. Et tu pourrais (péniblement) le faire en python à coup de tableaux de strings concaténés.
Là où scheme (lisp) est très très fort (et de ce point de vue supérieur à python, si on part du principe que la métaprogrammation est quelque chose de désirable dans un programme), c'est qu'il est homoiconique. Donc au lieux de te faire chier comme en python avec de strings, ou comme en C avec un préprocesseur idiot et pénible, tu peux prendre n'importe quelle donnée et la réïfier comme un morceau de code. Et tu peux prendre n'importe quel code et le réifier comme de la donnée définie dans les types de base du langage. A volonté. Je n'ai jamais essayé de faire ça en python, mais j'imagine que ça doit être assez ardu car sa grammaire me semble très complexe en comparaison de scheme (lisp).
Bref, pour moi, en présentant les macros comme un « sur ensemble » des décorateurs, tu confonds un enrobage que je qualifierais de « syntaxique » avec un enrobage que je qualifierais de « fonctionnel ».
Adhérer à l'April, ça vous tente ?