Мета мого запитання - не розпочати полум'яну війну, а скоріше визначити, за яких обставин кожна мова є "найкращим інструментом для роботи".
Я прочитав кілька книг про Clojure ( Programming Clojure , Practical Clojure , The Joy of Clojure та Manning Early Access edition of Clojure in Action ), і я думаю, що це фантастична мова. Зараз я читаю Let Over Lambda, який здебільшого стосується макросів Common Lisp, і це теж дуже цікава мова.
Я не фахівець Lisp (більше новачок), але ця родина мов мене зачаровує, як і функціональне програмування загалом.
Переваги Clojure (і недоліки "інших"):
Працює на JVM.
JVM - це дуже стабільне, високопродуктивне мовне середовище, яке досить добре відповідає мріям Sun про "Пиши один раз, біжи [майже] де завгодно". Я можу написати код на своєму Macbook Pro, скомпілювати його у виконуваний файл JAR, а потім запустити на Linux та Microsoft Windows, не вимагаючи додаткового тестування.
(Hotspot та інші) JVM підтримує якісний збір сміття та дуже ефективну своєчасну компіляцію та оптимізацію. Де кілька років тому я писав усе, що мало швидко працювати на мові C, тепер я не соромлюсь зробити це на Java.
Стандартна, проста, багатопоточна модель. Чи має Common Lisp стандартний багатопотоковий пакет?
Перерви одноманітності всіх цих дужок з
[]
,{}
і#{}
, хоча експерти Common Lisp, ймовірно , сказати мені , що з читанням макросами, ви можете додати їх до CL.
Недоліки Clojure :
- Працює на JVM.
- Відсутність рекурсії хвоста або продовжень. Чи підтримує Common Lisp продовження? Я вважаю, що схема вимагає підтримки обох.
Переваги інших (зокрема, Common Lisp) (та недоліки Clojure):
Встановлювані користувачем макроси.
Інші переваги?
Думки? Інші відмінності?