¿Todavía se practica / usa LISP en el mundo de hoy, o es un lenguaje heredado?
Sí, lo es, pero tienes que saber dónde buscar. Las personas que usan LISP no tienden a gritar demasiado alto al respecto, pero hay algunos ejemplos de algunas nuevas empresas de alto perfil que lo han usado con gran efecto en los últimos 20 años. También es muy popular entre las pequeñas empresas en Europa.
¿Cuál es el dialecto más utilizado?
Esta es una pregunta válida, pero no es fácil de responder. También puede no ser particularmente útil para responder: muchas implementaciones tienen un enfoque específico, por lo que es mejor elegirlas si se ajustan a su problema particular en lugar de basarse en qué tan ampliamente se usa. En cambio, te contaré un poco sobre tus opciones y puedes decidir por ti mismo.
LISP es una familia de idiomas y cada uno de esos idiomas tiene una familia de dialectos e implementaciones. En general, los dialectos se dividen en dos campos: "LISP" y "Esquemas".
LISP: hasta hace relativamente poco, Common LISP era el rey. Fue un intento de unificar todos los LISP dispares y, sin ser cruel, fue el "C ++" de LISP. Es decir, era un lenguaje ENORME . Lo tenia todo. En los últimos años, Clojure ha aparecido. Clojure es un LISP que se ejecuta en la máquina virtual Java e intenta arraigarse en una filosofía de programación funcional. Tradicionalmente, otros LISP han sido estrictamente multi-paradigmáticos. Clojure es interesante porque obtiene lo mejor y lo peor de LISP y JVM. Todavía hay mucha verbosidad de los lenguajes basados en Java y han sido bastante gratuitos y fáciles con la sintaxis, por lo que tienen muchos botones y botones para diferentes cosas, pero realmente tienen algunosideas interesantes sobre los tipos de datos, especialmente algunas de las formas prácticas que se les ocurrieron para aplicar ideas desde la programación funcional.
Esquemas: los esquemas son un subconjunto estricto de LISP. El esquema fue inventado por Steele y Sussman y en la vida temprana fue notable por ser utilizado en el curso de conferencias 101 de informática del MIT. El esquema se define en el "Informe revisado ^ n sobre el esquema de lenguaje algorítmico (RnRS)". Sí: tienen una broma de matemáticas allí. Scheme es un lenguaje estandarizado de una manera que otros LISP no lo son. Esto ayuda mucho con la portabilidad entre implementaciones, pero no es una bala de plata. Los esfuerzos de estandarización han tendido a ser conservadores y las innovaciones en las implementaciones, especialmente en torno a cosas como los módulos, han tendido a ser dispares. También hay una serie de SRFI (Solicitudes de esquema para implementación) que es similar al proceso RFC del IETF. La gente lo usa para estandarizar cosas pequeñas según sea necesario.
Los esquemas son diferentes de los LISP porque tienen un conjunto de requisitos estrictos que deben cumplir, uno de los cuales es la "optimización de la llamada de cola", que ayuda a que la recursividad sea eficiente. Por lo tanto, los estilos recursivos de programación son mucho más populares en Scheme que en LISP. Scheme es, también sin ser cruel, como la "C" de LISP. Es decir, es un lenguaje pequeño y se supone que puedes tenerlo todo en tu cabeza a la vez.
Actualmente hay dos familias de esquemas: las basadas en la quinta versión (R5RS) y las basadas en la sexta versión (R6RS). La complejidad de R6RS fue mucho mayor que la de cualquiera de sus predecesores y muchas implementaciones de R5RS han optado por omitirlo, con la esperanza de que R7RS sea más similar a R5RS que R6RS. El proceso de estandarización de R7RS está actualmente en curso y ha tratado de incluir tanto los deseos de los implementadores de R5RS como los de la gente de R6RS estandarizando un pequeño lenguaje base en su primer grupo de trabajo y luego comisionando a un segundo grupo de trabajo para estandarizar las características más grandes. Esto permitirá que el lenguaje tenga implementaciones eficientes y útiles tanto en hardware embebido pequeño como en máquinas más capaces.
Ahora seré más específico:
PicoLisp es un LISP realmente genial. Es pequeño! Su autor lo escribió para sí mismo y, según tengo entendido, se ha ganado la vida desde la década de 1980. Si alguna vez tienes la oportunidad de asistir a una charla de él, entonces debes hacerlo: es realmente interesante y realmente sabe lo que hace y no obtendrás ni el más mínimo olfato de nada convencional o aburrido.
No estoy familiarizado con las implementaciones de Common Lisp, así que no comentaré más sobre ellas.
Guile es el esquema oficial de GNU.
Racket es un esquema R6RS pero últimamente parece haber ampliado la red y está tratando de "servir como plataforma para la creación, diseño e implementación del lenguaje".
Chicken pretende ser un esquema práctico. Se basa en R5RS y se compila en C. Esto resulta ser una ventaja muy, muy importante, ya que hace que sea absolutamente trivial usar bibliotecas C existentes. Por lo tanto, Chicken es probablemente el esquema más útil para reemplazar Perl, Python, Ruby, etc., como su lenguaje de programación diario. Hay varias personas que lo han usado exclusivamente para todas sus necesidades durante varios años. Tiene un REPL interactivo así como un compilador. La comunidad (tanto en la lista de correo como en IRC) está bien informada, es amigable y servicial.
Busque una implementación con muchos módulos: esto muestra que es ampliamente utilizable y significa que es probable que tenga algo que ayude con la tarea en cuestión.
Busque una implementación con un compilador o, al menos, algo que no esté estrictamente basado en IDE o REPL. Muchas de las implementaciones diseñadas para la enseñanza son muy difíciles de usar para secuencias de comandos de propósito general.
Recomiendo Chicken, ya que es lo que uso. Lo he usado en mis proyectos personales y lo he usado (y actualmente lo estoy usando) profesionalmente.
No quiero invertir un esfuerzo indebido en algo si es totalmente obsoleto; aún así lo aprendería si estuviera profesionalmente "muerto", pero solo con una perspectiva académica ...
Scheme no está profesionalmente muerto, pero es posible que tenga que hacer todo lo posible para usarlo en ese contexto. Algo como Chicken es mucho más que una búsqueda académica y puede cubrir fácilmente casi todas las bases de los idiomas de alto nivel que utiliza actualmente.