it-swarm-es.com

¿Por qué es útil LISP?

LISP obviamente es una ventaja para el AI cosas, pero no aparece para mí, LISP es mucho más rápido que Java, C # o incluso C. No soy un maestro de LISP, pero me resulta increíblemente difícil comprender la ventaja que se obtendría al escribir software empresarial 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 idiomas de alto nivel? ¿Qué valor tiene sobre estos idiomas?

64
Geek

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 realizadas 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. El LISP común 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 tienen fecha.

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

78
Paul Nathan

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.

24
Maglob

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á listo"

21
glenatron

Creo que la ventaja de LISP en el campo inteligencia artificial (AI) 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 los REPL son muy importantes para esto). Después de que tengo algo ejecutándose, agrego declaraciones de tipo y "optimizo" mi código, poco a poco. Es un pregunto 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, así que no puede 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 debido a 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 paréntesis ellos mismos 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 dado que 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 Batiendo los promedios. Es extrema modularidad y concisión. En Java tengo que escribir una gran cantidad de 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, tienes que entiendo algunos ejemplos de esto y luego juzgue por usted 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 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 en LISP).

18
Pau Fernández

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 han convencido de ir a usarlo ((aunque varias personas lo han intentado ) porque los beneficios del lenguaje pueden se puede 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 soportando la horrible sintaxis.)))

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.

13
Peter Boughton

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 ser ).

"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 repetirlo continuamente. Y quiero interactuar con el programa mientras lo escribo.

9
Frank Shearar

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 * ( Scheme para ser específico), hasta el punto de que me encuentro escribiendo notas de programación en él. Como IRL , notas de papel y lápiz. Incluso cuando estoy pensando en programas que necesito implementar en PHP o Ruby o Python.

Este no es un truco que me enseñé, o algo que hago para la credibilidad del empollón (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 contigo que sea profundamente tesoro.

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

7
Inaimathi

Paul Graham responde a esta pregunta él mismo en Lo que hizo diferente a LISP.

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 es algo limitado en comparación con lo que LISP puede hacer (no estoy seguro).

6
hasen

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

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 MIT graduados, y Scheme/LISP fue el único idioma que muchos de los MIT graduados aprendieron. Sin embargo, para ser justos, uno puede intercambiar en caliente algoritmos LISP en un sistema de producción en ejecución, lo cual es una gran ventaja.

6
Job

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? Puedes tenerlo. ¿Quieres Prolog - programación lógica de estilo? 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 Adelante - como idiomas, todavía tengo que ver otro idioma que ofrezca este nivel de flexibilidad.

6
Jason Baker

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 hacia LISP".

- Guy Steele, Java coautor de especificaciones

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 LISP.

6
compman

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

Razón número uno: LISP me hace pensar de manera diferente, lo que me hace un mejor Ruby codificador.

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 liviano para newLisp llamado dragonfly . 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, consistencia.

5
philosodad

"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. Mire el Great Benchmarking Shoot-Out para sumergirse para obtener más detalles. La implementación SBCL de LISP está a la par con Java 6 Server y es significativamente más rápido 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 aún, ¿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 lo que escribir en Java u otro lenguaje como ese es para mí. A veces hay una razón para hacerlo, y me gusta Java bien, pero LISP es solo más receptivo y es más fácil hacer el trabajo.

5
Michael H.

¿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?

4
Mike Dunlavey

Cuando se creó LISP, comenzaron con las matemáticas, no con la informática (que aún 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 The Eternal Flame lo cubre.

4
Zachary K

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 inteligencia artificial (AI) investigación, visión por computadora, planificación , representación del conocimiento 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 [~ # ~] , está en una clase propia en términos de flexibilidad. Es muy difícil volver a C++/Java/C # OOP rudimentario después de probarlo. GoF 5 patrones de diseño 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 la alfombra no se puede sacar 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 enfocados en el rendimiento regularmente comparan dentro de un factor 2x de las implementaciones de lenguaje imperativo más rápidas y fuertemente financiadas.

El talón de Aquiles de la comercialización inicial de LISP fue la huella de la memoria para acomodar tanto las características de seguridad tipo del lenguaje como los entornos de desarrollo de software avanzado 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 RAM se han derrumbado y existe un gran interés en los lenguajes LISP, especialmente teniendo en cuenta que los principales idiomas Java, C #, 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.

2
bcaulf

En realidad no hago LISP. Pero el lugar donde trabajo sí 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 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 el bajo nivel algoritmos (Fortran es mejor para explotar las capacidades vectoriales de SSE / AVX , y creemos que es poco probable que este cable se cierre.

1
Omega Centauri