¿Usarías un dialecto LISP para un programa de producción?
Absolutamente
¿Qué tipo de programa y por qué?
Lisp es un lenguaje dinámico de propósito general. Hoy en día, tiene las mismas dificultades básicas que otros lenguajes dinámicos de propósito general que no son publicados por Microsoft: hilos nativos, integración GUI, operación determinista del GC y huellas de memoria pequeñas.
Los hilos nativos son logrados por LispWorks y SBCL, creo. Posiblemente otros? No he investigado completamente.
LispWorks y Franz Common Lisp - productos comerciales - se integran en la GUI para grados de éxito. Al no tener el $$ para comprarlos, no sé qué tan bien funciona. Sospecho que funcionan bastante bien ...
Una operación GC determinista se puede hacer (se hace en Java a un cierto nivel de éxito), pero yo no sé si los sistemas existentes Lisp (unos) mantenidos tienen ningún código para hacer eso.
La pequeña huella de memoria, creo, es lograda por algunos Lisps.
Mi punto básico es que Common Lisp está técnicamente listo para hacer sistemas de producción. Y lo hace .
La gran mayoría de los desarrolladores se asustan por (elegir uno) lenguajes dinámicos, macros, paréntesis, falta de IDE favorito, mala experiencia en la universidad, no hay muchos trabajos, y luego no lo usan.
Personalmente, saltaría a la construcción de un sistema de producción completo en Common Lisp desde cero en un entorno de equipo.
editar: Realmente no respondí por qué Lisp en comparación con otros idiomas.
En mi experiencia con Lisp, no significativa, pero considerablemente más que 'hola mundo', he encontrado que el lenguaje es extremadamente útil después de los primeros dolores de "Argh new language". La mayoría del lenguaje se combina de una manera muy regular y bastante obvia que realmente no encuentro otros idiomas para operar. Parte de esto es la fusión de expresiones y declaraciones. Parte de esto es el tipo de datos de la lista principal. Parte de esto es el sistema de tipos. Parte de esto es el sistema macro. No me malinterpreten, sin embargo, no son puntos de dolor. Pero no me patean en la cara tanto como los puntos débiles de otros idiomas.
Un ejemplo simplista es la rutina de longitud de lista de Python. El enfoque de Python es llamar len(mysequence)
. Pero, si lo pensamos bien, una longitud es una propiedad de una secuencia. Entonces, mysequence.len()
es una idea más apropiada. Lisp esencialmente elimina esa distinción sintáctica. (length thing)
es tanto la sintaxis de llamada de función como la sintaxis de método. Por supuesto, algunas personas lo encuentran frustrante y quieren la diferencia sintáctica. Prefiero tener la regularidad.
edit2: Convertí la parte de mi tesis de MS que se ejecuta en el escritorio a Common Lisp y hasta ahora ha sido un placer trabajar con ella.