Le but de ma question n'est pas de déclencher une guerre des flammes, mais plutôt de déterminer dans quelles circonstances chaque langue est «le meilleur outil pour le travail».
J'ai lu plusieurs livres sur Clojure ( Programming Clojure , Practical Clojure , The Joy of Clojure et l'édition Manning Early Access de Clojure in Action ), et je pense que c'est un langage fantastique. Je lis actuellement Let Over Lambda qui traite principalement des macros Common Lisp, et c'est aussi un langage très intéressant.
Je ne suis pas un expert Lisp (plutôt un débutant), mais cette famille de langages me fascine, tout comme la programmation fonctionnelle, en général.
Avantages de Clojure (et inconvénients des «autres»):
Fonctionne sur la JVM.
La JVM est un environnement de langage très stable et très performant qui répond assez bien au rêve de Sun: «Écrire une fois, exécuter [presque] n'importe où». Je peux écrire du code sur mon Macbook Pro, le compiler dans un fichier JAR exécutable, puis l'exécuter sous Linux et Microsoft Windows avec peu de tests supplémentaires.
La JVM (Hotspot et autres) prend en charge le garbage collection de haute qualité et la compilation et l'optimisation juste-à-temps très performantes. Là où il y a quelques années à peine, j'écrivais tout ce qui devait tourner vite en C, maintenant je n'hésite plus à le faire en Java.
Modèle standard, simple et multithreading. Common Lisp a-t-il un package multithreading standard?
Brise la monotonie de toutes ces parenthèses avec
[]
,{}
et#{}
, bien que les experts en Common Lisp me diront probablement qu'avec les macros de lecteur, vous pouvez les ajouter à CL.
Inconvénients de Clojure :
- Fonctionne sur la JVM.
- Pas de récursion de queue ni de continuations. Common Lisp prend-il en charge les continuations? Le régime nécessite un soutien pour les deux, je crois.
Avantages des autres (Common Lisp, en particulier) (et inconvénients de Clojure):
Macros de lecteur définissables par l'utilisateur.
D'autres avantages?
Pensées? D'autres différences?