2010-01-10 19 views
82

No sé suficiente Lisp para decir si es bueno o malo. Parece que a todos los que han usado Lisp les encanta, pero los idiomas más populares actualmente descienden de C.¿Qué tiene de bueno Lisp?

¿Qué tiene Lisp que es tan bueno y por qué no se usa más? ¿Hay algo simplemente malo sobre Lisp (aparte de la cantidad incesante de paréntesis)?

+5

"La mayoría de los lenguajes populares hoy en día son descendientes de C" sólo superficialmente. Si nos fijamos en las características en lugar de solo usar llaves, descubrirá que los lenguajes modernos no están tan lejos de Lisp, y cada vez más cerca. Un programa en C# o Python o Ruby, por ejemplo, se verá mucho más como Lisp de lo que le va a gustar C. – Ken

+11

Un buen ejemplo de un lenguaje que se parece a C, pero actúa más como Lisp es JavaScript. Mucho de su diseño es similar a Scheme. – JAL

+0

Buen punto, Ken: cada vez más funciones que solían ser exclusivas de Lisp (funciones de primera clase, funciones como datos, incluso macros) están llegando a otros idiomas. Y la retroalimentación no es unidireccional: Lisp está desarrollando nuevas técnicas y modismos en reconocimiento de otros lenguajes (por ejemplo, CLOS en respuesta al éxito del paradigma orientado a objetos). – itowlson

Respuesta

47

Lisp es el Chuck Norris de lenguajes de programación.

Lisp es la barra con la que se miden otros idiomas.

Conocer Lisp demuestra la iluminación del desarrollador.

He oído hablar de 3 puntos débiles (y sus argumentos en contra):

  1. tipado dinámico.

    Existe un argumento a favor de los lenguajes estáticos que giran en torno al proporcionar al compilador información suficiente para detectar una cierta clase de errores para que no ocurran en el tiempo de ejecución. Pero aún debes probar.

    Este artículo aboga por el tipado dinámico junto con más pruebas: Strong Typing vs. Strong Testing.

  2. Difícil de recoger.

    En realidad, hay dos partes: aprendizaje y herramientas.

    Lisp hace un esfuerzo para realmente "conseguir", pero vale la pena, porque aprender Lisp realmente te hará un mejor programador en otros idiomas. Por ejemplo, una vez que realmente "obtienes" cierres, entenderás las clases internas de Java. Y una vez que "obtienes" funciones de primera clase, estarás deprimido cada vez que uses un idioma sin ellas.

    He leído El pequeño Schemer y estoy leyendo práctica Common Lisp, que son excelentes.

    A continuación se presentan las herramientas. Estoy en una Mac, así que me concentré en Aquamacs Emacs (hace que Emacs sea habitable para un principiante) y Steel Bank Common Lisp (SBCL).

  3. La falta de bibliotecas.

    No puedo asegurarlo todavía, pero lo dudo.Para construir sitios web, parece que Hunchentoot y Elephant proporcionan un buen conjunto de herramientas. Pero realmente no veo a Lispers quejándose de la falta de bibliotecas (tal vez porque Lisp es tan poderoso que simplemente no se necesitan).

+4

Para dirigir (3) - ¿Has mirado a Clojure? – viksit

+5

"Pero realmente no veo a Lispers quejarse de la falta de bibliotecas (¿quizás porque Lisp es tan poderoso que simplemente no se necesitan?)". Corregiría la última declaración a "(tal vez porque Lisp es tan poderoso que simplemente no se necesitan PARA ELLOS?)" Esto hace una gran diferencia. –

+36

No dice una palabra por qué lisp es genial, por mi parte. – Kilon

12

He aquí algunos enlaces útiles:

+0

On Lisp es genial (estoy a la mitad, aunque admito que las macros se están poniendo un poco densas); pero necesitas saber Lisp para leerlo. Aparte de este pequeño problema, es un gran libro no solo sobre Lisp, sino sobre la ingeniería de software en general. –

66

“Lisp es un lenguaje de programación programable.”
- John Foderaro, CACM, Septiembre de 1991

Aquí es mi opinión:

En la superficie, Lisp es un buen , lenguaje de programación funcional simple. Casi no hay sintaxis, y todas las piezas encajan juntas de forma lógica.

Si se mira un poco más profundo, leer SICP, y escribe un evaluador metacircular, a descubrir dos cosas: una, todo el intérprete (dado sólo unos primitivos) es apenas una página de código, y dos, la relación entre código y datos permite elegantes técnicas de programación.

Una vez que haya absorbido completamente este, se siente como otros idiomas están escritas en piedra cuando sólo le permiten decir algunas cosas. Lisp puede construir cualquier abstracción en absoluto si se puede definir la sintaxis y la semántica para ello.

54

Lisp es bueno porque tiene una sintaxis muy mínima, simple y regular.

Lisp es malo porque tiene una sintaxis muy mínima, simple y regular.

+3

¿Qué tiene de malo una sintaxis mínima, simple y regular? – oskarkv

+15

@oskarkv: una sintaxis mínima totalmente regular significa que no hay ningún sesgo hacia un uso particular. Esto suena bien, hasta que encuentre el principio de Pareto: es más eficiente ser parcial hacia los casos más comunes y dejar de pretender que todos los casos son igualmente probables. Si el 20% de sus clientes están en Nueva York y el 80% en Los Ángeles, ¿tiene sentido sentarse en la cerca, en algún lugar en la frontera de Kansas/Oklahoma, para seguir siendo "imparcial" en términos geográficos? ¿O más sentido ir donde están la mayoría de los clientes? Preferimos idiomas que sesgan sus características hacia problemas probables. –

+4

La sintaxis de Lisp es realmente buena. Conocí a Haskell después de Clojure, pero para entonces incluso la sintaxis de Haskell era un obstáculo. La uniformidad de la suntax de Lisp es genial. Entonces, no sé exactamente de qué sesgo estás hablando. ¿Prejuicio hacia la inflexibilidad? Suena mal. – oskarkv

18

"Cualquier programa de Fortran C suficientemente complicado o contiene ad hoc, de manera informal especificados por, plagada de errores, la lenta aplicación de la mitad de Common Lisp."

Greenspun's Tenth Rule

Cuestiones relacionadas