¿Qué tiene de bueno Lisp? [cerrado]

103

No sé lo suficiente sobre Lisp para decir si es bueno o malo. Parece que a todos los que han usado Lisp les encanta, sin embargo, los idiomas más populares en estos días descienden de C.

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

Darrell Brogdon
fuente
5
"Los idiomas más populares en estos días descienden de C" sólo superficialmente. Si observa las características en lugar de solo el uso de llaves, encontrará que los lenguajes modernos no están tan lejos de Lisp y cada vez se acercan más. Un programa en C # o Python o Ruby, digamos, se parecerá mucho más a Lisp que a C.
Ken
11
Un buen ejemplo de un lenguaje que se parece a C pero que actúa más como Lisp es JavaScript. Gran parte de su diseño es similar a Scheme.
JAL
Buen punto, Ken: un número creciente de características que solían ser exclusivas de Lisp (funciones de primera clase, funciones como datos, incluso macros) están llegando a otros lenguajes. 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
6
Lisp ha tomado ideas de todas partes, pero ¿CLOS en respuesta a qué? CLOS (1986-1987) fue en gran parte una estandarización de sistemas de objetos anteriores para Lisp, por ejemplo, Lisp Machine Lisp (1980) incluyó Flavours. No creo que "el éxito del paradigma OO" fuera evidente todavía en 1980: "C con clases" tenía solo un año (y todavía faltan 3 años para que se renombre como "C ++"), y no sé que Simula-67 fue siempre muy popular. Lisp tiene un montón de características avanzadas que los lenguajes populares hoy en día no tienen; OO ha tenido éxito, pero Lisp no lo consiguió porque (o cuando) fue popular.
Ken
No creo que a todos los que usaron Lisp les guste. Mi experiencia es diferente. Intente preguntar a los estudiantes de informática que comenzaron con Scheme. Probablemente alrededor del 10% lo amará, el 30% lo respetará y el 60% lo odiará. Tampoco creo que los idiomas más populares desciendan de C.
Rainer Joswig

Respuestas:

59

Lisp es el Chuck Norris de los 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 debilidades (y sus contraargumentos):

  1. Escritura dinámica.

    Existe un argumento para los lenguajes tipados estáticamente que gira en torno a proporcionar al compilador suficiente información para detectar una cierta clase de errores para que no ocurran en tiempo de ejecución. Pero aún necesitas probar.

    Este artículo aboga por la escritura dinámica junto con más pruebas: escritura fuerte frente a prueba sólida .

  2. Difícil de entender.

    En realidad, hay dos partes en esto: aprendizaje y herramientas.

    Lisp requiere un poco de esfuerzo para realmente "entenderlo", pero vale la pena, porque aprender Lisp realmente te hará un mejor programador en otros lenguajes. Por ejemplo, una vez que realmente "obtenga" los cierres, comprenderá las clases internas de Java. Y una vez que "obtenga" funciones de primera clase, se deprimirá cada vez que use un lenguaje sin ellas.

    He leído The Little Schemer y estoy leyendo Practical Common Lisp , que son excelentes.

    Luego están las herramientas. Estoy en una Mac, así que me he concentrado en Aquamacs Emacs (hace que Emacs sea habitable para un novato) y Steel Bank Common Lisp (SBCL).

  3. Falta de bibliotecas.

    No puedo decirlo con seguridad todavía, pero lo dudo. Para crear sitios web, parece que Hunchentoot y Elephant ofrecen un buen conjunto de herramientas. Pero realmente no veo a Lispers quejándose de la falta de bibliotecas (¿quizás porque Lisp es tan poderoso que simplemente no son necesarios?).

rickmode
fuente
4
Para abordar (3) - ¿Ha mirado Clojure?
viksit
5
"Pero realmente no veo a Lispers quejándose de la falta de bibliotecas (¿quizás porque Lisp es tan poderoso que simplemente no son necesarios?)". Corregiría la última declaración a "(¿quizás porque Lisp es tan poderoso que simplemente no son necesarios PARA ELLOS?)" Esto hace una gran diferencia.
Agnius Vasiliauskas
49
No dice nada de por qué cecear es genial, voto en contra de mí.
Kilon
30
Votado en contra porque "X es genial! X es genial! X es como Y, lo cual también es genial porque yo digo que es genial!" no es una respuesta a "¿Por qué X se considera genial?". La referencia política también es inapropiada e inútil (la mayoría de la gente ni siquiera cree que el libertarismo sea una buena idea). Los tres puntos son útiles, pero desearía que no fueran "Tiene una debilidad A ... ¡Pero en realidad ni siquiera es una debilidad!".
Superbest
1
Lisp es el Chuck Norris de los lenguajes de programación. así que eso es lo que lo hace tan bueno. Entendido. Voto en contra.
NiCk Newman
71

"Lisp es un lenguaje de programación programable".
- John Foderaro, CACM, septiembre de 1991

Esta es mi opinión:

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

Si profundiza un poco más, lea SICP y escribe un evaluador metacircular, descubre dos cosas: una, el intérprete completo (dados solo unos pocos primitivos) es apenas una página de código, y dos, la relación entre código y datos permite técnicas de programación elegantes.

Una vez que haya asimilado esto por completo, se sentirá como si otros idiomas estuvieran grabados en piedra cuando solo le permiten decir algunas cosas. Lisp puede construir cualquier abstracción si puede definir su sintaxis y semántica.

Josh Lee
fuente
1
En teoría, podría incrustar cualquier lenguaje en Lisp como Rust, Ruby, C, Java, Python, Erlang. Entonces, la versión de expresión s de Python (Hy) y la de Rust se llama (Risp) [aunque no sé qué tan estables son]. Si escribe código en Hy en lugar de Python, tiene la capacidad de macros y edición estructural como parinfer / paredit ( shaunlebron.github.io/parinfer ). Las macros le permiten incrustar sus propios DSL en Lisp, y también se pueden usar para convertir código lento en código rápido a través de macros de compilación. También puede convertir el código Python (Hy) en Rust (Risp), transformando el árbol sexp.
aoeu256
También he escuchado este dicho varias veces. ¿Podrías eliberar un poco más @ aoeu256?
Estudiante
66

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

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

Daniel Earwicker
fuente
4
¿Qué tiene de malo una sintaxis mínima, simple y regular?
oskarkv
27
@oskarkv: una sintaxis mínima totalmente regular significa que no hay sesgo hacia ningún uso en particular. Esto suena bien, hasta que se encuentra con el principio de Pareto: es más eficiente estar sesgado hacia los casos que ocurren con mayor frecuencia y dejar de fingir que todos los casos son igualmente probables. Si el 20% de sus clientes están en la ciudad de Nueva York y el 80% en Los Ángeles, ¿tiene sentido sentarse en la cerca, en algún lugar de la frontera entre Kansas y Oklahoma, para permanecer "imparcial" en términos geográficos? ¿O más sentido para ir donde están la mayoría de los clientes? Preferimos lenguajes que sesgan sus características hacia problemas probables.
Daniel Earwicker
4
La sintaxis de Lisp es realmente buena. Aprendí Haskell después de Clojure, pero para entonces incluso la sintaxis de Haskell se sentía como un obstáculo. La uniformidad del bronceado de Lisp es excelente. Entonces, no sé exactamente de qué sesgo estás hablando. ¿Sesgo hacia la inflexibilidad? Suena mal.
oskarkv
3
Suena mal cuando lo pones así. ¡No lo dije así! ¿Qué tal el sesgo hacia los sucesos más comunes, las situaciones más probables? Estos son (por supuesto) términos relativos, por lo que depende de lo que esté haciendo. Si realmente carece de información sobre lo que hará, no tiene sentido intentar prepararse. Pero probablemente no sea cierto - usted tiene información, por lo que puede prepararse ("sesgar") usted mismo hacia las situaciones más probables para las que debe estar preparado.
Daniel Earwicker
22

"Cualquier programa C o Fortran suficientemente complicado contiene una implementación ad hoc, especificada informalmente, llena de errores y lenta de la mitad de Common Lisp".

Décima regla de Greenspun

Paolo
fuente
16

Aquí hay algunos enlaces útiles:

Greg Hewgill
fuente
1
On Lisp es genial (estoy a la mitad, aunque admito que las macros se están volviendo un poco densas); pero necesitas conocer Lisp para leerlo. Aparte de este pequeño problema, es un gran libro no solo sobre Lisp, sino también sobre ingeniería de software en general.
JS