55 votes

ECMAScript est-il vraiment un dialecte de Lisp?

Un ami a attiré mon attention le message de bienvenue de 4ème Européenne Lisp Colloque:

... mise en œuvre et l'application de un des dialectes de Lisp, y compris Common Lisp, Scheme, Emacs Lisp, AutoLisp, ISLISP, Dylan, Clojure, ACL2, ECMAScript, ...

et puis m'a demandé si ECMAScript est vraiment un dialecte de Lisp. Peut-il vraiment être considéré comme tel? Pourquoi?

Est-il bien défini et clair ensemble de critères afin de nous aider à détecter si une langue est un dialecte de Lisp? Ou est un dialecte prises dans un très lâche sens (et dans ce cas, pouvons-nous ajouter Python, Perl, Haskell, etc. à la liste des dialectes Lisp?)

55voto

Pointy Points 172438

Brendan Eich voulais faire un Régime-comme le langage pour Netscape, mais la réalité est intervenu et il a fini par avoir à faire avec quelque chose qui ressemblait vaguement comme le C et le Java pour les gens "normaux", mais qui a travaillé comme un langage fonctionnel.

Personnellement, je pense qu'il est inutile de les étirer pour appeler ECMAScript "Lisp", mais à chacun ses goûts. La chose à propos d'un réel Lisp semble être la caractéristique de la structure de données de la notation et le code de notation sont les mêmes, et ce n'est pas vrai sur ECMAScript (ou Ruby ou Python ou tout autre dynamique fonctionnelle de la langue c'est pas Lisp).

Mise en garde: je n'ai pas de Lisp références :-)

40voto

mblinn Points 1716

Il n'est pas. Il a beaucoup de la fonctionnelle de racines, mais beaucoup d'autres non-lisp langues de nos jours, comme vous l'avez souligné.

Lisps ont une caractéristique qui les rendent lisps, qui est celle du code lisp est écrit en termes de lisp structures de données (homoiconicity). C'est ce que permet lisps puissant système de macro, et pourquoi il est tellement bizzare non-lispers. Un appel de fonction est juste une liste, où le premier élément de la liste est le nom de la fonction.

Depuis code lisp est juste lisp de données, il est possible de faire quelques très puissant avec la métaprogrammation, que tout ne peut pas être fait dans d'autres langues. De nombreux lisps, même les plus modernes comme clojure, sont largement mis en œuvre eux-mêmes comme un ensemble de macros.

23voto

Matthias Benkard Points 11264

Même si je ne dirais pas JavaScript, un langage Lisp, il est, à mon humble avis, beaucoup plus proche du Lisp façon de faire les choses que la plupart des grands de langues (même fonctionnels).

Pour l'un, tout comme Lisp, c'est, en substance, un simple impératif langage basé sur le type lambda calcul qui est apte à être entraînée par un REPL.

Deuxièmement, il est facile d'intégrer des données littérales (y compris le code dans le formulaire d'expressions lambda) en JavaScript, depuis un sous-ensemble de, il est équivalent à JSON. C'est un common Lisp modèle.

Troisièmement, son modèle de valeurs et de types très lispy. Il est orienté objet dans un sens large du mot, en ce sens que toutes les valeurs ont une notion de l'identité, mais il n'est pas particulièrement orientée objet dans la plupart des sens plus étroit du mot. Tout comme en Lisp, les objets sont typés et très dynamique. Le Code est généralement divisé en unités de fonctions, et non des classes.

En fait, il ya un couple de (plus ou moins) récents développements dans le JavaScript du monde qui font de la langue se sent assez lispy à la fois. Prendre jQuery, par exemple. L'incorporation de sélecteurs CSS comme une sous-langue est un joli Lisp comme approche, à mon avis. Ou envisager d'ECMAScript Harmonie du metaobject protocole: Il ressemble vraiment à un port direct de Common Lisp est (beaucoup plus que Python ou Ruby metaobject systèmes!). La liste est longue.

JavaScript ne manque macros et une judicieuse mise en œuvre d'un REPL avec l'éditeur de l'intégration, ce qui est regrettable. Certes, les influences d'autres langues sont très visibles aussi bien (et pas forcément dans le mauvais sens). Pourtant, il existe une quantité significative de la compatibilité culturelle entre le Lisp et JavaScript camps. Certaines d'entre elles peut être une coïncidence (comme la récente hausse des cours JavaScript compilation JIT), certains systématique, mais c'est bel et bien là.

6voto

Marko Points 13736

Non ce n'est pas.

Pour être considéré comme un Lisp, il faut être homoiconique, ce que n'est pas ECMAscript.

4voto

WReach Points 13161

Je pense que ECMAScript est un dialecte de LISP dans le même sens que l'anglais est un dialecte du français. Il y a des points communs, mais vous allez avoir du mal avec les affectations dans l'un armé seulement avec la connaissance de l'autre :)

Je trouve intéressant que seule l'une des trois présentations keynote mis en évidence pour la 4ème Européenne Lisp Colloque concerne directement Lisp (les deux autres étant sur x86/JVM/Python et la Scala).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X