La intención de mi pregunta no es iniciar una guerra de fuego, sino más bien determinar en qué circunstancias cada idioma es "la mejor herramienta para el trabajo".
He leído varios libros sobre Clojure ( Programming Clojure , Practical Clojure , The Joy of Clojure y la edición Manning Early Access de Clojure in Action ), y creo que es un lenguaje fantástico. Actualmente estoy leyendo Let Over Lambda, que se ocupa principalmente de macros Common Lisp, y también es un lenguaje muy interesante.
Estoy no un experto en Lisp (más de un novato), pero esta familia de lenguas me fascina, al igual que la programación funcional, en general.
Ventajas de Clojure (y desventajas de "otros"):
Se ejecuta en la JVM.
La JVM es un entorno de lenguaje muy estable y de alto rendimiento que cumple bastante bien con el sueño de Sun de "Escribir una vez, ejecutar [casi] en cualquier lugar". Puedo escribir código en mi Macbook Pro, compilarlo en un archivo JAR ejecutable y luego ejecutarlo en Linux y Microsoft Windows con pocas pruebas adicionales.
La JVM (Hotspot y otras) admite la recolección de basura de alta calidad y una compilación y optimización just-in-time de gran rendimiento. Donde hace apenas unos años escribí todo lo que tenía que correr rápido en C, ahora no dudo en hacerlo en Java.
Modelo estándar, simple y de múltiples subprocesos. ¿Common Lisp tiene un paquete estándar de subprocesos múltiples?
Rompe la monotonía de todos esos paréntesis con
[]
,{}
y#{}
, aunque los expertos en Common Lisp probablemente me dirán que con las macros de lector, puedes agregarlas a CL.
Desventajas de Clojure :
- Se ejecuta en la JVM.
- Sin recursividad o continuaciones de cola. ¿Common Lisp admite continuaciones? El esquema requiere apoyo para ambos, creo.
Ventajas de otros (Common Lisp, en particular) (y desventajas de Clojure):
Macros de lector definibles por el usuario.
Otras ventajas?
Pensamientos Otras diferencias?