¿Por qué es útil Lisp? [cerrado]

64

Lisp obviamente es una ventaja para las cosas de IA , pero no me parece que Lisp sea más rápido que Java, C # o incluso C. No soy un maestro de Lisp, pero me resulta increíblemente difícil entender la ventaja. uno podría escribir software de negocios en Lisp.

Sin embargo, se considera como el lenguaje de un hacker.

¿Por qué Paul Graham aboga por Lisp? ¿Por qué ITA Software eligió Lisp sobre otros lenguajes de alto nivel? ¿Qué valor tiene sobre estos idiomas?

Peter Mortensen
fuente
20
La línea "No creo que Lisp sea más rápido que Java, C # o, de hecho, más rápido que C" es algo confusa. C generalmente se mantiene como el estándar para "código rápido porque estás programando cerca del metal": es el punto de referencia para superar casi todo. Ahora, Java y otros lenguajes GC'd pueden superarlo en algunos contextos, por ejemplo, la velocidad de asignación / limpieza de memoria. Pero, sin embargo, esta oración parece un poco al revés.
Michael H.
2
Lisp es un lenguaje de nivel más alto que los que mencionó, por lo tanto, generalmente es más lento.
segfault
55
@Bo Tian: "lenguaje de nivel superior" necesita una definición inequívoca. Incluso si tuviera uno, esto suena como un no-sequitur. (gracias @ Mark)
Mike Dunlavey
55
@BoTian "nivel superior" no es igual a "más lento" de forma predeterminada.
24
Lisp existe para mostrar cuán equivocado ha estado cualquier otro diseñador de idiomas.

Respuestas:

78

Hay algunas razones por las que estoy trabajando para volverme competente con Common Lisp.

  1. Código homoicónico Esto permite un código estructurado de auto-modificación.
  2. Macros compatibles con la sintaxis. Permiten reescribir el código repetitivo.
  3. Pragmatismo. Common Lisp está diseñado para hacer cosas hechas por profesionales que trabajan. La mayoría de los lenguajes funcionales no son, por regla general.
  4. Flexibilidad. Puede hacer muchas cosas diferentes, todas a velocidades razonables.
  5. Verrugas El mundo real es desordenado . La codificación pragmática termina teniendo que usar o inventar construcciones desordenadas. Common Lisp tiene suficiente verrugas que puede hacer cosas.

Podría decirse que las únicas razones reales para elegir contra Common Lisp es que las bibliotecas estándar están fechadas.

Me arriesgaré y diré que, en el caso general, la sintaxis no debería ser un problema para un trabajador de software profesional.

Paul Nathan
fuente
8
La sintaxis puede ser un problema si afecta significativamente la legibilidad o la capacidad de escritura. No creo que ese sea el caso de Lisp. Un buen editor o IDE puede hacer un resaltado de sintaxis y una coincidencia de pares lo suficientemente buenos como para no ser un gran problema.
Matt Olenik el
44
Además, solo he usado Lisp un poco (Common Lisp), y la sensación general que tuve fue que # 2 fue el mayor beneficio para Lisp. Tal vez estoy pensando en el paradigma incorrecto, pero no creo que haya tenido una situación en la que fuera necesario modificar el código. Si tiene una razón específica para usarlo, entonces sí, pero de lo contrario, las macros parecen ser la verdadera característica asesina. Editar: Acabo de darme cuenta de que estos son, de hecho, la misma característica.
Matt Olenik el
3
@ Matt: Sí. FWIW, recientemente me encontré con Nemerle, un lenguaje experimental CL # -ish CLR con macros. nemerle.org . Vale la pena hurgar en algún momento, creo, solo por la experiencia.
Paul Nathan
2
"Pragmatismo. CL está diseñado para que los profesionales que trabajan hagan cosas. La mayoría de los lenguajes funcionales no lo son, por regla general": no estoy de acuerdo con esta afirmación. Estoy muy interesado en Lisp y trato de dedicar algo de tiempo para aprenderlo. Pero encuentro que otros lenguajes FP también son muy efectivos para "hacer las cosas", al menos esta ha sido mi experiencia con Scala y Haskell hasta ahora.
Giorgio
1
"CL está diseñado para hacer cosas hechas por profesionales que trabajan. La mayoría de los lenguajes funcionales no lo son, por regla general": ¿Puedes explicar esto? Especialmente en la segunda parte de la oración. ¿Puedes nombrar algunos ejemplos?
Giorgio el
23

Me gusta Lisp por su

  • forma unificada, simple y elegante de representar tanto el código como los datos.
  • punto de vista único, que me da los 80 puntos de coeficiente intelectual adicionales cruciales para resolver problemas difíciles (con la punta del sombrero para Alan Kay)
  • Entorno de desarrollo extremadamente ágil, interactivo y conversacional
  • poder sin precedentes para crear y manipular abstracciones

La programación es combatir la complejidad. Las abstracciones son la única herramienta efectiva para combatir la complejidad cada vez mayor (con nuestro tamaño de cráneo muy limitado y constante). Manejar abstracciones con Lisp es como tener un genio con n + 1 deseos.

Maglob
fuente
55
+1 para "La programación es combatir la complejidad. Las abstracciones son la única herramienta eficaz para combatir la complejidad cada vez mayor (con nuestro tamaño de cráneo muy limitado y constante)". (Ojalá pudiera dar un +10.)
Giorgio
¿Qué es el "entorno de desarrollo extremadamente ágil, interactivo y conversacional"?
qed
66
¿No deberían ser eso (+ 1 n)deseos, o incluso más práctico (incf n)?
Reb.Cabin
21

Creo que la respuesta correcta de Lisp es más gnómica. Algo así como: "Si tiene que preguntar, no está listo".

Entonces, si alguien pregunta más, la respuesta correcta es "sí" si es una pregunta o / o "No estás listo".

glenatron
fuente
55
Paul Graham cita a Louis Armstrong: "Si tienes que preguntar qué es el jazz, nunca lo sabrás"
Jason Baker,
25
+1. Aunque a veces frases como "Si tienes que preguntar, no estás listo", me hacen pensar que quien lo dice simplemente no puede explicarlo
superM
55
@superM Lisp y los lenguajes funcionales similares a Lisp tienen la propiedad de que una vez que uno los aprende, ¡ya no puede explicarlos!
esoterik
18

Creo que la ventaja de Lisp en el campo de la inteligencia artificial (IA) que todos mencionan es un accidente histórico ... Lisp comenzó para / en IA, pero es un lenguaje de propósito general.

Creo que la velocidad de ejecución no es el único aspecto importante de un lenguaje (aunque lo hice una vez). Sin embargo, uno de los aspectos que me gusta de Lisp es que, para mí, combina Python y C en uno. Puedo comenzar a codificar sin declaraciones y prototipos de forma inmediata y muy rápida (el tiempo de ejecución y el REPL son muy importantes para esto). Después de ejecutar algo, agrego declaraciones de tipo y "optimizo" mi código, poco a poco. Es una maravilla presionar una tecla en SLIME y ver el lenguaje de máquina generado para la función que me interesa. En Python, no hay declaraciones de tipo, por lo que no puedo obtener más velocidad, pero en C, hacer algo rápidamente es Mucho más doloroso. Lisp es muy útil en este caso.

Dicho esto, me gusta Lisp principalmente por las macros . Cuando finalmente entiendes lo que las macros pueden lograr, creo que soportas los paréntesis fácilmente. Además, los editores como Emacs administran los paréntesis para que no tenga que hacerlo. Admito, sin embargo, que no encontré paréntesis tan malos al principio, y sé que algunas personas simplemente no pueden soportarlos. Pero como todo el propósito de las macros es generar código en tiempo de compilación, el código en Lisp usa una estructura de datos estándar, y los paréntesis simplemente son una representación del código como listas, lo cual es necesario para que las macros sean fáciles de escribir.

No conozco ningún otro idioma en el que pueda escribir pequeños sublenguajes para describir mejor su problema con la facilidad de Lisp. Esa es la ventaja de la que habla Paul Graham en Beating the Averages . Es extrema modularidad y concisión. En Java tengo que escribir mucho texto sin formato para expresar una sola idea. En Lisp podría escribir algunas macros que generan ese código automáticamente, y luego simplemente usarlas. De todos modos, debes entender algunos ejemplos de esto y luego juzgar por ti mismo. Cuando lo "vi", quedé impresionado, y sigo pensando que Lisp es el mejor idioma solo por esta razón. Siempre busco macros en los idiomas principales para ver si coinciden con el poder de las macros Lisp, pero hasta la fecha no encontré ninguna. Forth es un segundo cercano.

Terminaré con un par de críticas, en relación con el software empresarial:

  1. El software empresarial necesita bibliotecas, y buenas, y Lisp no es bueno en esto. Por lo general, no los necesito, pero cuando lo hago, tengo que elegir entre una pequeña selección de software incompleto que usan algunas personas. Debo contribuir a arreglar esto, supongo ...

  2. El software empresarial generalmente está construido por grandes grupos de personas, y creo que la comunicación puede verse obstaculizada con macros, ya que básicamente cambian el idioma. Muchos programadores se sienten más cómodos detectando ciertos patrones en el código, incluso si el texto del programa es más largo y más repetitivo. Supongo que en ITA tienen algunas reglas con respecto a las macros o tienen una gran biblioteca de macros que facilita la colaboración (o, más simplemente, todos los programadores son expertos de Lisp).

Pau Fernández
fuente
77
Prueba clojure, es un lisp en la JVM. Entonces, al usar la JVM, puede usar todas las cosas de Java.
Zachary K
@zachary: Hay al menos 2 implementaciones de Common Lisp en la JVM. ABCL es relativamente maduro.
Larry Coleman
Clojure es 100% compatible con Java (al menos nunca he encontrado nada en Java que Clojure no pueda mejorar, y de tal manera que los javaistas no puedan quejarse). Clojure está fuertemente influenciado por lo mejor de Common Lisp y lo mejor de FP. Con eso y SBCL y CLisp y Emacs, cualquier Lisper debería sentirse como un rey hoy en día.
Reb.Cabin
13

No me gusta Lisp.

(Me gustan muchos de los conceptos que usa, cómo hace que las poderosas técnicas estén disponibles de forma nativa, etc.

Pero nunca me he convencido de ir a usarlo ((aunque varias personas lo han intentado ) porque los beneficios del lenguaje se pueden lograr con otros lenguajes de programación (algunos directamente, otros indirectamente), por lo que no hay suficientes beneficios para hacerme pasar el tiempo aprendiéndolo y aguantando la sintaxis horrible.)))

Pero sí, por razones que a algunas personas les gusta, revise estas preguntas de desbordamiento de pila:

Probablemente hay algunas más en las preguntas relacionadas para aquellos también.

Peter Boughton
fuente
26
"Soportando la sintaxis horrible". Tal vez es demasiado tiempo desde que era un novato de Lisp, pero la simplicidad y regularidad de la sintaxis de Lisp es una gran característica, ya que eso es lo que me permite extender Lisp en sí mismo. Puedo agregar iteradores personalizados, puedo agregar nuevas construcciones de alcance "con-xxx" que se limpian automáticamente después de sí mismas para que el desarrollador no tenga que hacerlo, etc. La sintaxis es una característica, no un error.
Michael H.
55
La capacidad de extender un lenguaje consigo mismo no requiere una sintaxis limitada a media docena de caracteres. Además: "¿La sintaxis es una característica, no un error" ? - Lo sé. No lo llamé un error.
Peter Boughton
8
Bien, ¿cómo obtienes los beneficios del sistema macro? Cuántos lenguajes le permiten construir una extensión orientada a objetos para ellos en un capítulo razonablemente corto (Paul Graham, "On Lisp").
David Thornley
66
La sintaxis no es más horrible que otros idiomas. Descubrí que los paréntesis simplemente "desaparecen" visualmente después de un tiempo. Con una buena sangría, el código es fácilmente legible.
Barry Brown
8
Pero tener la capacidad de moverse fácilmente entre S-exps parece enorme ... Luego, en cuanto al paréntesis, me gusta la siguiente cita: ¿Paréntesis? ¿Qué paréntesis? No he notado ningún paréntesis desde mi primer mes de programación Lisp. Me gusta preguntar a las personas que se quejan de paréntesis en Lisp si les molestan todos los espacios entre las palabras en un periódico "- Ken Tilton
Cedric Martin
9

Interpretaré "Lisp" como " Lisp común "; No tengo dudas de que otras respuestas dirán " Esquema ". (Sugerencia: Lisp es una familia de idiomas).

¿Qué significa "más rápido"? En términos de tiempo necesario para ejecutar un punto de referencia, no, no es más rápido que C ( pero puede serlo ).

"Rápido" en términos de cuánto tiempo le toma a Joe Random Hacker escribir un programa de trabajo o corregir un error en un sistema de software grande. Casi seguro

En cuanto a este hacker, lo uso porque quiero escribir código, no repetitivo. Quiero escribir algo una vez , y no repetirme continuamente. Y quiero interactuar con el programa mientras lo escribo.

Frank Shearar
fuente
¿No sería maravilloso si pudieras escribir una pequeña función dentro de tu editor que inmediatamente haría algo al resto de tu código? ¿O puedes hacer eso ya?
Mark C
44
@ Mark: Creo que estás describiendo Emacs.
Ferruccio
@Ferruccio Pensé que primero debes ejecutar tu código.
Mark C
2
@ Mark C: Bueno, tienes que resaltar la región y luego M-x eval-region(o eval-buffer), pero eso es todo.
Frank Shearar
1
@MarkC: Además, si usted está en el cero búfer, sólo puede escribir su función y de prensa C-j(que es moralmente equivalente a entrar) y que entrará en vigor de inmediato.
Tikhon Jelvis
7

Me gusta Lisp porque es un medio excelente para expresar mis pensamientos. El predicado de mi idioma favorito es "Si pudiera elegir cualquier cosa para expresar ideas, ¿cuál sería?". Actualmente es Lisp * ( Esquema para ser específico), hasta el punto de que me encuentro escribiendo notas de programación en él. Como IRL , papel y bolígrafo. Incluso cuando estoy pensando en programas que necesito implementar en PHP o Ruby o Python.

Este no es un truco que me enseñé yo mismo, o algo que hago para la credibilidad de los nerds (de todos modos, nadie puede ver el interior de mi cuaderno); Es solo que Lisp es mucho más natural para mí pensar que cualquiera de las alternativas, y cualquier lenguaje que resuene con usted y que sea profundamente atesorado.

* Sin embargo, solo como una nota al pie, Haskell está cerrando la brecha bastante rápido a medida que aprendo más.

Inaimathi
fuente
6

El problema es el poder. Potencia = Trabajo (funcionalidad del programa) / Tiempo

"No queríamos ganarnos a los programadores de Lisp; buscamos a los programadores de C ++. Logramos arrastrar a muchos de ellos a mitad de camino a Lisp".

- Guy Steele, coautor de especificaciones de Java

Trace algún tipo de curva entre C ++ y Java. Continúa, y en algún momento a lo largo de la línea encontrarás a Lisp.

compman
fuente
2
El problema aquí es que pierde mucha funcionalidad de C ++ yendo a Java, pero retírela (a menudo en forma mejorada) cuando vaya a Lisp.
David Thornley
@DavidT La pregunta SO sobre esa cita exacta tiene un enlace a la fuente (busque "cite"). La cita no debe tomarse tan en serio.
Mark C
@David: como las macros. No es solo que los dejaron fuera al ir a Java (y, por lo tanto, C #) sino que hicieron de la falta de ellos una "virtud". Las macros son realmente útiles si estoy construyendo un DSL sobre el lenguaje base.
Mike Dunlavey
@ Mike Dunlavey: Realmente no me gustan las macros en C ++ (diablos, no me gustan en C, pero no tengo muchas opciones allí). Realmente me gustan las macros en Common Lisp. Sabes, creo que mi problema con ese comentario es que me gustan tanto C ++ como Common Lisp mucho más de lo que me gusta Java.
David Thornley
@David: estoy contigo al 100% en macros en Lisp. En C / C ++ que son feos y propenso al abuso, pero por el tipo de ( franja ciertamente cosas) que hago, son por lo tanto es mejor que nada. Por supuesto, cuando lo hago en C ++ puede muy bien ser considerado como abuso, pero en Lisp es calurosamente inteligente. Imagínate.
Mike Dunlavey
6

Paul Graham responde a esta pregunta él mismo en What Made Lisp Different .

Tenga en cuenta que lo usó para su inicio a mediados de la década de 1990, por lo que Python y Ruby no eran realmente maduros en ese momento (o tal vez ni siquiera nacieron).

Lisp básicamente tiene todas las ventajas de los lenguajes dinámicos, y creo que para la mayoría de las aplicaciones web actuales, Python y Ruby son bastante impresionantes, y tienen la ventaja de marcos y documentación y comunidades vibrantes.

La característica asesina es probablemente que todo el programa está hecho de expresiones. Esto significa que puede pasar bloques de código a funciones (o macros ...), porque un bloque de código no es más que una expresión.

Python no tiene exactamente esta característica; tendrías que definir funciones y pasarlas. Ruby parece tener bloques, quizás sea algo limitado en comparación con lo que Lisp puede hacer (no estoy seguro).

hasen
fuente
El artículo de Paul Graham es interesante porque, salvo por un par de elementos, la mayoría de los idiomas en estos días parecen tener las características que enumera. Entonces tal vez Lisp fue más convincente en aquellos días; hoy en día es más valioso como el lenguaje que introdujo esas características?
Andres F.
AST como sintaxis del lenguaje todavía es dominio de Lisp. No conozco un lenguaje que no sea lisp donde las macros tienen lenguaje completo disponible, durante el tiempo de compilación (Sí, el compilador básicamente llama manualmente a la definición de macro, que es el programa Lisp por sí mismo. Desea hacer http y db en macro en el momento de la compilación ?)
przemo_li
6

He tenido una reacción instintiva a Scheme en el pasado, pero ahora estoy listo para darle una oportunidad a Lisp ( Clojure , en realidad).

Verá, a lo largo de los años aprendí fragmentos de lenguajes como Java, C #, C ++, Python, y las cosas ya no son un desafío.

Clojure tiene muchas promesas, parece ser muy limpio y puede resolver muchos problemas del mundo real. Un caso sólido para un lenguaje limpio como Clojure es el advenimiento de las computadoras multinúcleo.

Yay LISP!

EDITAR: ITA Software fue fundado por graduados del MIT, y Scheme / Lisp fue el único idioma que muchos de los graduados del MIT aprendieron. Sin embargo, para ser justos, uno puede intercambiar en caliente los algoritmos de Lisp en un sistema de producción en ejecución, lo cual es una gran ventaja.

Trabajo
fuente
8
Re: Las cosas ya no son desafiantes --- dale una oportunidad a Haskell y dinos lo que piensas. Además, ¡siempre puedes intentar aprender INTERCAL para variar!
Mark C
3
@ Mark C, lo siento pero no me estoy tocando INTERCAL. El desafío no es el único criterio; tiene que ser capaz de resolver problemas reales rápidamente también. Al menos Haskell es usado y amado por muchos.
Trabajo
Eso fue en broma, por supuesto.
Mark C
1
Actualizar código en ejecución (¡con cuidado!) En un servidor de producción es una de las alegrías de Lisp, sí. Python, al menos cuando estaba jugando con él, no lo hizo bien; tendría que recompilar manualmente todas las funciones / métodos que se referían a sus cambios, mientras que todas las implementaciones de Common Lisp se encargan de eso. Utilizo ese mismo poder para el desarrollo: escribir, probar algo, editar, probar, sin bucle de compilación, y puede tomar sus pruebas interactivas y convertirlas en pruebas unitarias si lo desea.
Michael H.
@ Job Olvidé ... PLEASE?
Mark C
6

Lo que me gusta de Lisp es que trasciende los paradigmas. Algunas personas dirán que Lisp es funcional, otras dirán que es declarativo y otras dirán que es multiparadigma. Creo que todos estos pierden el punto. Cuando usa Lisp, el paradigma ya no es una restricción.

¿Quieres objetos? Puedes tenerlos. ¿Quieres programación funcional? Tu puedes tenerlo. ¿Quieres programación lógica al estilo Prolog ? Escribe algunas macros. ¿Quieres programación declarativa estilo SQL? Ve a por ello. ¿Quieres usar algún paradigma que aún no se ha inventado? Estoy seguro de que se puede hacer en Lisp.

Aparte de los idiomas similares a Forth , aún no he visto que otro idioma ofrezca este nivel de flexibilidad.

Jason Baker
fuente
+1 Programación de paradigmas múltiples, décadas antes de F #, muy buen punto.
Orbling
Desearía poder votar esto diez veces. No hay cuchara ... no hay paradigma ... Describe mi sentimiento sobre Common Lisp con gran precisión :)
MadPhysicist
5

"Más rápido" no es algo simple de medir, realmente depende de qué aspecto esté evaluando. Dependiendo de la tarea y la implementación de Lisp, las velocidades pueden acercarse a C. Observe el Gran Shoot-Out de evaluación comparativa para sumergirse en los detalles. La implementación SBCL de Lisp está a la par con Java 6 Server y es significativamente más rápida que Ruby o Python.

Pero, la velocidad pura no es la razón principal para elegir un lenguaje de programación; si lo fuera, todos estaríamos programando en lenguaje ensamblador , ¿verdad? Para mí, la alegría diaria de Lisp es que el código está compilado, pero no tengo que quitar la aplicación, volver a compilar todo y luego comenzar a ejecutarlo desde cero. En cambio, puedo cambiar una sola función y ese cambio tendrá efecto en todas partes, y puedo ver inmediatamente el efecto en mi aplicación. Además, ese enfoque muy rápido de "escribir, probar, escribir más, probar más" hace que sea mucho más fácil probar inmediatamente por adelantado mientras escribe el código (y luego puede convertir esas sondas interactivas en pruebas unitarias más adelante).

Imagine escribir un correo electrónico donde, después de cada línea, debe presionar un botón para compilar la salida de su correo electrónico en la pantalla antes de continuar con su pensamiento. Eso es para mí escribir en Java u otro lenguaje como ese. A veces hay una razón para hacerlo, y me gusta Java, pero Lisp es más receptivo y es más fácil hacer el trabajo.

khedron
fuente
Si empezara hoy, probablemente elegiría a Ruby: heredó gran parte de la naturaleza de Lisp, pero tiene bibliotecas más modernas y un solo dictador benevolente que lo impulsa. Pero, esa no fue la pregunta que hizo el OP.
Michael H.
De hecho, elegí Ruby para comenzar, y ahora estoy tratando de aprender newLisp.
philosodad
5

Estoy aprendiendo Lisp ( newLisp ) por un par de razones.

Razón número uno: Lisp me hace pensar de manera diferente, lo que me convierte en un mejor programador de Ruby.

Parece muy incómodo hacer ciertas cosas en Lisp, por ejemplo, la iteración anidada para recorrer múltiples listas. Entonces me obliga a usar otras cosas, como map. Mi idioma favorito, Ruby, tiene el mismo método de mapa, pero no siempre lo uso, porque no me es familiar: aprendí a hacer cosas con una técnica pobre, y cuando el idioma apoya esa técnica, sigo usándolo.

Razón número dos: Lisp es práctico y tiene buenas bibliotecas modernas.

Hay un marco web muy agradable y ligero para newLisp llamado libélula . Esto me permite usar el código newLisp en lugar de PHP para algunas tareas. Realmente no me gusta PHP, y newLisp parece más divertido para esta tarea específica que Ruby.

Razón número tres: Lisp es sintáctica y conceptualmente consistente.

Para mí, esta es la gran diferencia entre Ruby y Python, la consistencia.

philosodad
fuente
+1: "Lisp es sintáctica y conceptualmente consistente". Esta es una característica muy importante de un idioma. Algunos idiomas mal diseñados carecen de consistencia, son como una gran colección de expresiones idiomáticas agrupadas en algún orden (tengo un idioma en mente, pero no lo nombraré :-)). Lisp es a este respecto muy consistente. Tan pronto como tenga algo de tiempo, definitivamente intentaré aprenderlo.
Giorgio
4

¿Puedes decir "Lealtad a la marca"?

Empecé en Fortran. Me encantó.

Me cambié a Lisp. Al principio lo odiaba. Entonces aprendí a amarlo y a odiar a Fortran.

Más tarde Pascal, C, C ++, varios ensambladores, C #. (En realidad no amo C #.)

¿Supongo que soy voluble?

Mike Dunlavey
fuente
4

Cuando se creó Lisp, comenzaron con las matemáticas, no con la informática (que todavía no existía). Y el equipo de Lisp hizo algunas cosas REALMENTE bien. ¡Lisp tuvo recolección de basura en 1960 más o menos! Realmente hicieron un gran trabajo.

Creo que la canción de The Eternal Flame lo cubre.

Zachary K
fuente
Sí, aparentemente Lisp fue el primer lenguaje GCed.
Mark C
2

Un gran atractivo es la comunidad. Lisp ha atraído a los desarrolladores más ambiciosos y brillantes desde que se inventó el lenguaje. Dondequiera que los investigadores estén tratando de resolver problemas que nunca se han resuelto, es probable que encuentre Lisp, como en la investigación de inteligencia artificial (IA), visión por computadora, planificación, representación de conocimientos y optimización heurística compleja. El lenguaje se presta para resolver problemas de abajo hacia arriba y de arriba hacia abajo al mismo tiempo, lo que parece ayudar a enfrentar los desafíos más difíciles.

La sintaxis exensible a través de macros significa que rara vez es necesario ampliar la definición del lenguaje. Gran parte de lo que requeriría una extensión de idioma en un idioma más restringido es solo una macro con Lisp. Por lo tanto, los programadores de Lisp son libres de hacer uso de conceptos de lenguaje recién inventados sin un nuevo estándar de idioma y sin necesariamente una penalización de velocidad real. En un nivel básico, las extensiones de código repetitivo son innecesarias por pequeñas extensiones. Ideas completamente nuevas en el flujo de control, como la unificación de estilo Prolog, se implementan de manera eficiente y compacta como extensiones.

El sistema OOP, CLOS , es único en términos de flexibilidad. Es muy difícil volver a la rudimentaria C ++ / Java / C # OOP después de probarlo. Los  patrones de diseño de GoF 5 se vuelven innecesarios ya que pueden expresarse de manera simple y directa.

El lenguaje no ha tenido un propietario corporativo único ni una implementación definitiva única, aunque tiene un estándar ANSI con muchas implementaciones conformes. Las principales implementaciones nuevas se presentan cada década y las antiguas todavía están bastante activas. Los expertos pueden planear utilizar sus conocimientos especializados durante mucho tiempo. Esto causa cierta fricción anarquista y fragmentación de la comunidad, pero también significa que no se puede sacar la alfombra y que el lenguaje no puede morirse por razones políticas corporativas o de proyectos. Siempre se están trabajando en múltiples implementaciones comerciales y de código abierto. Los más centrados en el rendimiento comparan regularmente dentro de un factor 2 veces mayor que las implementaciones de lenguaje imperativo más rápidas y fuertemente financiadas.

El talón de Aquiles de la comercialización temprana de Lisp fue la huella de la memoria para acomodar tanto las características de seguridad tipo del lenguaje como los entornos avanzados de desarrollo de software que incluían, con características increíbles como documentación completa en línea que incluye gráficos. Una máquina Symbolics Lisp de 64 MB no era viable en términos de costos en comparación con una estación de trabajo Sun de 8 MB. Hoy en día, los precios de la memoria RAM se han derrumbado y existe un gran interés en los lenguajes Lisp, especialmente teniendo en cuenta que los principales lenguajes Java, C # y PHP de hoy han avanzado solo mínimamente en los últimos 30 años.

Ahora hay idiomas modernos en competencia con Lisp para compartir la mente con desarrolladores inteligentes: Python, Lua , Erlang , Haskell y OCaml . Pero ninguno ofrece la misma combinación de madurez, adaptabilidad, múltiples implementaciones que cumplen con los estándares y velocidad.

bcaulf
fuente
1

En realidad no hago Lisp. Pero el lugar donde trabajo contiene elementos finitos con millones de líneas principalmente de Fortran. El tipo aquí al que más respeto por las cosas informáticas (códigos de mecánica de fluidos computacional ) cree que la combinación ideal es Lisp en el exterior (principalmente porque evita problemas desordenados con la administración de memoria) y Fortran por los algoritmos de bajo nivel (Fortran es mejor para explotar las capacidades vectoriales de SSE / AVX , y creemos que es poco probable que este cable se cierre).

Peter Mortensen
fuente