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

62

Lisp obviamente es una ventaja para el AI , pero no me parece que Lisp sea más rápido que Java, C # o incluso C. No soy un maestro de Lisp, pero lo encuentro increíblemente difícil de entender 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 en lugar de otros idiomas de alto nivel? ¿Qué valor tiene sobre estos idiomas?

    
pregunta Peter Mortensen 24.11.2013 - 12:52

17 respuestas

75

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

  1. código homoicónico. Esto permite un código de auto-modificación estructurado.
  2. Macros compatibles con la sintaxis. Permiten la reescritura del código repetitivo.
  3. Pragmatismo. Common Lisp está diseñado para hacer cosas por profesionales que trabajan. La mayoría de los lenguajes funcionales no lo son, como regla.
  4. Flexibilidad. Puede hacer muchas cosas diferentes, todo a velocidades razonables.
  5. verrugas. El mundo real es desordenado . La codificación pragmática termina por tener que usar o inventar construcciones desordenadas. Common Lisp tiene suficiente verruga como para poder 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.

    
respondido por el Paul Nathan 06.05.2015 - 20:21
21

Me gusta Lisp por su

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

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

    
respondido por el Maglob 31.01.2011 - 07:13
21

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

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

    
respondido por el glenatron 07.05.2015 - 19:57
17

Creo que la ventaja de Lisp en el campo inteligencia artificial (AI) que todos mencionan es, en cierto modo, un accidente histórico. .. Lisp comenzó para / en AI, 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 gustan 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 importante 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, así 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.

Habiendo dicho eso, me gusta Lisp principalmente por las macros . Cuando finalmente comprendas lo que pueden lograr las macros, creo que te aguantas con paréntesis fácilmente. Además, editores como Emacs administran los paréntesis para que no tenga que hacerlo. Admito, sin embargo, que no encontré los paréntesis tan malos al principio, y sé que algunas personas simplemente no pueden soportarlos. Pero dado que 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 puedas escribir pequeños sublenguajes para describir mejor tu problema con la facilidad de Lisp. Esa es la ventaja de la que habla Paul Graham en Vencer a los promedios . Es extrema modularidad y concisión. En Java tengo que escribir una gran cantidad de texto en bruto para expresar una sola idea. En Lisp, pude escribir algunas macros que generan ese código automáticamente, y luego simplemente usarlas. De todos modos, tienes que entender algunos ejemplos de esto y luego juzgar por ti mismo. Cuando lo "vi", me quedé impresionado, y sigo pensando que Lisp es el mejor lenguaje solo por esta razón. Siempre busco macros en los principales idiomas para ver si coinciden con el poder de las macros de 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 de negocios necesita bibliotecas y buenos, y Lisp no es bueno en esto. Normalmente no los necesito, pero cuando lo hago, tengo que elegir entre una pequeña selección de software incompleto que algunas personas usan. Debería contribuir a solucionar esto, supongo ...

  2. El software de negocios generalmente lo construyen grandes grupos de personas, y creo que la comunicación se puede impedir 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 enorme biblioteca de macros que facilita la colaboración (o, más simplemente, todos los programadores son expertos en Lisp).

respondido por el Pau Fernández 07.05.2015 - 20:11
12

No me gusta Lisp.

(Me gustan muchos de los conceptos que usa, cómo hace que las potentes técnicas estén disponibles de forma nativa, y así sucesivamente.

Pero nunca me convencieron de que realmente vaya a usarlo ((aunque varias personas he intentado ) porque los beneficios del lenguaje se pueden lograr con otros lenguajes de programación (algunos directamente, algunos indirectamente), por lo que no hay suficientes beneficios para que dedique tiempo a aprender y aguantando la sintaxis horrible.)))

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

Probablemente, hay un poco más en las preguntas relacionadas para esas también.

    
respondido por el Peter Boughton 23.05.2017 - 14:40
9

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

¿Qué significa "más rápido"? En términos del 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 lleva a Joe Random Hacker escribir un programa que funcione, 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.

    
respondido por el Frank Shearar 07.05.2015 - 19:56
7

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

Este no es un truco que aprendí yo mismo, o algo que hago por credibilidad nerd (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 profundamente es uno que atesoras.

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

    
respondido por el Inaimathi 07.05.2015 - 20:06
6

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

  

"No salimos a ganar a Lisp   programadores Estábamos después del C ++   programadores Nos las arreglamos para arrastrar mucho   de ellos a medio camino de Lisp ".

     

- Guy Steele, coautor de la especificación de Java

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

    
respondido por el compman 13.01.2011 - 23:52
6

Paul Graham responde el mismo tipo de pregunta en What Made Lisp Different .

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

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

La característica principal es 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 puede hacer Lisp (no estoy seguro).

    
respondido por el hasen 06.05.2015 - 21:57
6

He tenido una reacción instintiva ante el Esquema en el pasado, pero ahora estoy listo para darle un tiro a Lisp ( Clojure ).

Verá, a lo largo de los años he aprendido algunos lenguajes como Java, C #, C ++, Python, y las cosas ya no son difíciles.

Clojure tiene muchas promesas, parece estar 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 de múltiples núcleos.

Yay LISP!

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

    
respondido por el Job 07.05.2015 - 19:57
6

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

¿Quieres objetos? Puedes tenerlos. ¿Quieres programación funcional? Tu puedes tenerlo. ¿Quiere la programación de lógica de estilo Prolog ? Escribe algunas macros. ¿Quieres programación declarativa al 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 Forth , tengo que ver otro idioma que ofrezca este nivel de flexibilidad .

    
respondido por el Jason Baker 07.05.2015 - 20:15
5

"Más rápido" no es una cosa simple de medir, realmente depende de qué aspecto estás comparando. Dependiendo de la tarea y la implementación de Lisp, las velocidades pueden acercarse a C. Mire la Gran Shoot-Out de Benchmarking para obtener detalles. . La implementación SBCL de Lisp está a la par con el servidor Java 6 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 todavía, ¿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 ejecutar desde cero. En cambio, puedo cambiar una sola función y ese cambio tendrá efecto en todas partes, e inmediatamente puedo ver 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 de inmediato al escribir el código (y luego puede convertir esas sondas interactivas en pruebas unitarias más adelante).

Imagina escribir un correo electrónico donde, después de cada línea, tuvieras que presionar un botón para compilar la salida de tu correo electrónico en la pantalla antes de continuar con tu pensamiento. Eso es lo que escribo 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 más sensible y es más fácil hacer el trabajo.

    
respondido por el khedron 07.05.2015 - 19:52
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 hace un mejor programador de Ruby.

Parece muy incómodo hacer las cosas de ciertas maneras en Lisp, por ejemplo, la iteración anidada para recorrer varias 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 es familiar: aprendí a hacer cosas con una técnica deficiente y cuando el idioma es compatible con esa técnica, continúo usándola.

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ácticamente y conceptualmente consistente.

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

    
respondido por el philosodad 07.05.2015 - 20:12
4

¿Puedes decir "lealtad a la marca"?

Empecé en Fortran. Me encantó.

Cambié a Lisp. Al principio lo odiaba. Entonces aprendí a amarlo, y odio a Fortran.

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

¿Supongo que soy inconstante?

    
respondido por el Mike Dunlavey 04.10.2010 - 17:57
4

Cuando se creó Lisp, comenzaron con matemáticas, no con ciencias de la computación (que aún no existían). Y el equipo de Lisp consiguió algunas cosas REALMENTE correctas. ¡Lisp tenía recolección de basura en 1960 o así! Realmente hicieron un gran trabajo.

Creo que la canción The Eternal Flame cubre eso.

    
respondido por el Zachary K 07.05.2015 - 20:17
2

Un gran atractivo es la comunidad. Lisp ha tenido un empate para los desarrolladores más ambiciosos y brillantes desde que se inventó el lenguaje. Donde sea que los investigadores estén tratando de resolver problemas que nunca se han resuelto, es probable que encuentre a Lisp, como en inteligencia artificial (AI) Investigación, visión por computador, 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 complejos.

La sintaxis extensible a través de macros significa que rara vez es necesario extender la definición del idioma. Mucho de lo que requeriría una extensión de lenguaje en un lenguaje más restringido es solo una macro de distancia con Lisp. Por lo tanto, los programadores de Lisp son libres de utilizar los conceptos de lenguaje recién inventados sin un nuevo estándar de lenguaje y sin necesariamente una penalización de velocidad real. En un nivel básico, las extensiones de código de placa de caldera se hacen 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 al rudimentario C ++ / Java / C # OOP después de probar. GoF 5 patrones de diseño se vuelven innecesarios ya que se pueden expresar de manera simple y directamente.

El lenguaje no ha tenido un único propietario corporativo y ninguna implementación definitiva, aunque sí tiene un estándar ANSI con muchos Implementaciones conformes. Las nuevas implementaciones importantes aparecen a lo largo de cada década y las antiguas aún están bastante activas. Los expertos pueden planear utilizar su conocimiento especializado 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 retirar y el lenguaje no puede volverse moribundo por razones políticas corporativas o de proyectos. Siempre hay múltiples implementaciones comerciales y de código abierto en las que se está trabajando. Los que se centran más en el rendimiento se comparan regularmente dentro de un factor 2x de las implementaciones de lenguaje imperativo más rápidas y altamente financiadas.

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

Ahora hay lenguajes modernos que compiten 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 cumplan con los estándares y velocidad.

    
respondido por el bcaulf 07.05.2015 - 20:32
1

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

    
respondido por el Peter Mortensen 07.05.2015 - 20:21

Lea otras preguntas en las etiquetas

Comentarios Recientes

Lisp es divertido de codificar. Quizás incluso demasiado divertido para escribir. Pero la increíble comunidad (y su forma de escribir código generalmente, si no siempre) tiene una gran cantidad de buenos productos que hacen que su código sea más legible, fácil de mantener y rápido (¡si es una excusa para codificar solo 20 líneas de texto!). Tu código es una actualización; su código puede pasar la inspección y las pruebas para ser más seguro, pero no puede, en conjunto, ingresar al almacén de registros... Lee mas