28 votos

¿ECMAScript realmente es un dialecto de Lisp?

Un amigo mío me llamó la atención el mensaje de bienvenida de la 4ª Europea Lisp Simposio:

... implementación y aplicación de cualquiera de los dialectos de Lisp, incluyendo Common Lisp, Scheme, Emacs Lisp, AutoLisp, ISLISP, Dylan, Clojure, ACL2, ECMAScript, ...

y luego le preguntó si ECMAScript es realmente un dialecto de Lisp. Puede ser considerado así? Por qué?

Hay una bien definida y clara de los criterios que nos ayudan a detectar si un idioma es un dialecto de Lisp? O es un dialecto tomado en un muy flojo sentido (y en ese caso se puede añadir Python, Perl, Haskell, etc. a la lista de dialectos de Lisp?)

28voto

Pointy Puntos 172438

Brendan Eich quería hacer un Esquema de lenguaje de Netscape, pero la realidad intervino y se acabó tener que ver con algo que se parecía vagamente como C y Java para la gente "normal", pero que trabajó como un lenguaje funcional.

Personalmente creo que es innecesario tramo llamar ECMAScript "Lisp", pero a cada uno lo suyo. La clave de un verdadero Lisp parece la característica de que la estructura de datos de la notación y el código de notación son el mismo, y eso no es cierto acerca de ECMAScript (o Ruby o Python o cualquier otra dinámica funcional del lenguaje que no Lisp).

Advertencia: yo no tengo Lisp credenciales :-)

14voto

Matthias Benkard Puntos 11264

A pesar de que yo no llamaría JavaScript un Lisp, que es, en mi humilde opinión, más similar a la de Lisp manera de hacer las cosas que la mayoría de los lenguajes convencionales (incluso los funcionales).

Para uno, como Lisp, que es, en esencia, un simple imperativo lenguaje basado en el tipo cálculo lambda que es apto para ser manejado por un REPL.

En segundo lugar, es fácil de incrustar literal de los datos (incluido el código en la forma de las expresiones lambda) en JavaScript, ya que un subconjunto de es equivalente a JSON. Este es un common Lisp patrón.

Tercero, su modelo de valores y tipos es muy lispy. Es orientado a objetos en un sentido amplio de la palabra en la que todos los valores tienen un concepto de identidad, pero no es particularmente orientada a objetos en la mayoría de los más estrecho de los sentidos de la palabra. Como en Lisp, los objetos se escriben y muy dinámico. El código se divide en unidades de funciones, no de las clases.

De hecho, hay un par de (más o menos) los recientes acontecimientos en el JavaScript mundo que hacen que el lenguaje se siente muy lispy a veces. Tomar jQuery, por ejemplo. La incrustación de los selectores de CSS como un sublenguaje es un bonito Lisp-como en el enfoque, en mi opinión. O considere la posibilidad de ECMAScript la Armonía del metaobject protocolo: realmente Se parece a un puerto directo de Common Lisp (mucho más de lo que cualquiera de Python o Ruby metaobject sistemas!). La lista continúa.

JavaScript no hace falta macros y sensata de la implementación de un REPL con el editor de integración, lo cual es lamentable. Sin duda, las influencias de otros idiomas son muy visibles (y no necesariamente de mala manera). Aún así, hay una cantidad significativa de compatibilidad cultural entre el Lisp y JavaScript campamentos. Algunas de ellas pueden ser una coincidencia (como el reciente aumento de JavaScript compilación JIT), algunos de forma sistemática, pero es definitivamente allí.

13voto

mblinn Puntos 1716

No. Tiene una gran cantidad de raíces funcionales, pero también lo hacen muchos otros no-lisp idiomas hoy en día, como usted ha señalado.

Balbucea les resta una característica que los hacen balbucea, que es el código lisp está escrito en términos de estructuras de datos de lisp (homoiconicity). Esto es lo que permite que balbucea potente macro sistema, y por eso se ve tan bizzare no lispers. Una llamada de función es sólo una lista, donde el primer elemento en la lista es el nombre de la función.

Desde el código lisp es sólo de datos de lisp, es posible hacer algunas extremadamente potente cosas con metaprogramación, que simplemente no se puede hacer en otros idiomas. Muchos balbucea, incluso modernos como clojure, son ampliamente implementado en sí mismos como un conjunto de macros.

6voto

Marko Puntos 13736

No no es así.

Para ser considerado un Lisp, uno tiene que ser homoiconic, que ECMAscript no es.

3voto

WReach Puntos 13161

Creo que el ECMAScript es un dialecto de LISP en el mismo sentido que el inglés es un dialecto del francés. Hay similitudes, pero tendrás problemas con las tareas en uno armado solamente con el conocimiento de la otra :)

Me parece interesante que sólo una de las tres presentaciones destacó para el 4 º Simposio Europeo de Lisp afecta directamente a Lisp (siendo los otros dos sobre x 86/JVM/Python y Scala).

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X