Je lisais l'article de la langue de cent ans de Paul Graham. P>
http://www.paulgraham.com/hundred.html p>
là-bas, il affirme que la typage statique "excluait [s] vraies macros". P>
Par exemple, les types semblent être un Source inépuisable de recherche papiers, malgré le fait que statique La dactylographie semble empêcher les véritables macros-- Sans lequel, à mon avis, non la langue vaut la peine d'utiliser. P> blockQuote>
Comment est-ce vrai? Où sont les papiers? J'ai essayé de chercher sur Google sans succès. P>
5 Réponses :
La dactylographie statique n'empêche pas les macros. Par exemple, le dactylographié statique BOO Language a macros . Donc, Nemerle . P>
Cependant, cela dépend de ce que Graham signifie par "vraies" macros. Peut-être que BOO et Nemerle Macros sont «faux» par ses normes. P>
Tapage statique, dans lequel le système ne déduit pas de types, empêche les macros véritablement générales, car la sortie des macros doit rester en sécurité dans un sens très restrictif. P>
Il n'est pas vraiment vrai que le typage statique exclut les macros, mais cela signifie généralement que le système macro a besoin d'être plus compliqué que les macros de substitution de texte non hygiénique familiers à plusieurs. Je ne sais pas exactement ce que Graham essaie de se rendre ici, ou de ce qu'il veut dire par "vraie" macros. P>
voir Ce papier pour une prise sur les macros hygiéniques dans un contexte typique statiquement. p>
(Incidemment, je ne conviens pas non plus qu'aucune langue ne vaut la peine d'être utilisée s'il ne dispose pas de macros. Je pense que les fonctions de première classe couplées à certains des systèmes de type moderne plus sophistiqués peuvent résoudre élégamment la plupart des problèmes. à laquelle les macros ont traditionnellement visé.) p>
Le lien est mort. J'ai reçu le nom du papier?
"Le typing statique semble empêcher les véritables macros" Comment est-ce vrai? P> blockQuote>
Sans définition des "vraies macros", il s'agit d'une réclamation sans signification, mais OCAML avait à la fois des macros de frappe statique et (ast-réécriture) avant que Paul Graham ait écrit cela. Il aurait facilement pu découvrir que pour lui-même mais apparemment pas. Je ne vois même pas une raison logique de croire que le typage statique exclut les macros. P>
Où sont les papiers? P> blockQuote>
Je n'en savais aucun. Les macros de style LISP sont démodés ces jours-ci. P>
Gardez à l'esprit que Paul Graham est une philosophie majeure qui a écrit un panier dans Lisp acheté par Yahoo et par la suite réécrit. Il a frappé d'or, a pris sa retraite jeune puis passé des années à écrire des choses comme celle-ci. P>
2019 Ici, chaque nouvelle langue Julia, Nim, Haskell, Scala, Clojure, Elixir, Rust, D, C ++ prend en charge les macros ou une forme de macros ...
@ AOEU256: C ++ (1985), Haskell (1990), D (2001), Scala (2004), Clojure (2007) et NIM (2008) ont une plus de 10 ans. Rust (2010), Elixir (2012) et Julia (2012) sont nouvelles mais ELM (2012), TypeScript (2012), PureScript (2013), Swift (2014), Unison (2015), Raison (2016) et Darklang (2019). ) Les plus récents sont toujours et aucun soutiennent les macros de style LISP. C ++ et D ne fournissent que des macros de style C. Haskell et Scala ne soutiennent pas vraiment les macros: ils ont juste des projets latéraux expérimentaux.
Paul Graham est un promoteur d'avoir "Toute la langue tout le temps" : < / p>
Il n'y a pas de distinction réelle entre lecture temps, la compilation, et Durée. Vous pouvez compiler ou exécuter du code lors de la lecture, de la lecture ou du code d'exécution Tout en compilant, et lire ou compiler le code au moment de l'exécution. P>
Le code d'exécution en lecture permet aux utilisateurs de reprogrammer la syntaxe de LISP; fonctionnement Le code à la compilée est la base des macros; Compiler à l'exécution est la base de l'utilisation de LISP comme langue d'extension dans des programmes comme Emacs; et la lecture à l'exécution permet aux programmes de communiquer avec S-expressions, une idée récemment réinventée comme xml. p> blockQuote>
Il peut donc faire référence à l'impossibilité pratique de définir de nouveaux types au moment de l'exécution dans une langue qui s'attend à avoir toutes les informations de type au moment de la compilation, comme Daniel Ribeiro points sur son blog : p>
Notez que vous ne pouvez pas créer de métaprogrammation d'exécution de type sécuritaire dans général. Par exemple: même si certaines langues vous permettent de créer interfaces qui n'existent pas sur le temps de compilation, la seule façon d'invoquer Les méthodes de ceux-ci se font par des manières non sécuritaires (telles que la réflexion). P> blockQuote>
Je suis sûr que vous n'auriez aucune difficulté à trouver des programmeurs qui contestent que cette capacité vaut la peine d'abandonner les avantages qu'ils découlent de la typographie statique. P>
Eh bien, il y a toujours unsafeperformio ....
L'une des preuves en faveur de l'affirmation de Graham est que personne ne semble que la création ou l'utilisation d'une langue typée de statistiques qui va dans la mesure où Lisp se trouve au service des macros: plus ou moins d'abandon de la syntaxe pour forcer tout le monde à penser en termes de termes d'analyses, ce qui peut être représenté comme des listes (la structure de données fondamentale de la langue). Il semble y avoir deux tentatives de défunts pour permettre de rédiger un code HASKELL dans un format de type LISP: Liskell et Lisk .