L'intento della mia domanda non è quello di iniziare una guerra con le fiamme, ma piuttosto di determinare in quali circostanze ogni lingua è "lo strumento migliore per il lavoro".
Ho letto diversi libri su Clojure ( Programming Clojure , Practical Clojure , The Joy of Clojure e l'edizione Manning Early Access di Clojure in Action ) e penso che sia un linguaggio fantastico. Attualmente sto leggendo Let Over Lambda che si occupa principalmente di macro Common Lisp e, anch'esso, è un linguaggio molto interessante.
Sono non un esperto di Lisp (più di un novizio), ma questa famiglia di linguaggi mi affascina, così come la programmazione funzionale, in generale.
Vantaggi di Clojure (e svantaggi di "altri"):
Funziona su JVM.
La JVM è un ambiente linguistico molto stabile e ad alte prestazioni che soddisfa abbastanza bene il sogno di Sun di "Scrivi una volta, esegui [quasi] ovunque". Posso scrivere codice sul mio Macbook Pro, compilarlo in un file JAR eseguibile e quindi eseguirlo su Linux e Microsoft Windows con pochi test aggiuntivi.
La JVM (Hotspot e altre) supporta la garbage collection di alta qualità e la compilazione e l'ottimizzazione just-in-time molto performanti. Dove solo pochi anni fa ho scritto tutto ciò che doveva funzionare velocemente in C, ora non esito a farlo in Java.
Modello standard, semplice, multithreading. Common Lisp ha un pacchetto multithreading standard?
Spezza la monotonia di tutte quelle parentesi con
[]
,{}
e#{}
, sebbene gli esperti di Common Lisp probabilmente mi diranno che con le macro del lettore, puoi aggiungerle a CL.
Svantaggi di Clojure :
- Funziona su JVM.
- Nessuna ricorsione o continuazione della coda. Common Lisp supporta le continuazioni? Scheme richiede supporto per entrambi, credo.
Vantaggi degli altri (Common Lisp, in particolare) (e svantaggi di Clojure):
Macro del lettore definibili dall'utente.
Altri vantaggi?
Pensieri? Altre differenze?