Цель моего вопроса - не, чтобы начать пламенную войну, а скорее определить, в каких обстоятельствах каждый язык является "лучшим инструментом для работы".
Я прочитал несколько книг по Clojure (Программирование Clojure, Практический Clojure, Радость Clojure и версия Manning Early Access Clojure в действии), и я думаю, что это фантастический язык. В настоящее время я читаю Let Over Lambda, который в основном имеет дело с Common Lisp макросами, и это тоже очень интересный язык.
Я не эксперт Lisp (новичок), но это семейство языков очаровывает меня, как и функциональное программирование вообще.
Преимущества Clojure (и недостатки "других" ):
-
Работает на JVM.
-
JVM - это очень стабильная, высокопроизводительная языковая среда, которая хорошо сочетается с мечтой Sun: "Напишите один раз, запустите [почти] в любом месте". Я могу написать код на моем Macbook Pro, скомпилировать его в исполняемый файл JAR, а затем запустить его в Linux и Microsoft Windows с небольшим дополнительным тестированием.
-
JVM (Hotspot и др.) поддерживает высококачественную сборку мусора и очень эффективную компиляцию и оптимизацию точно в срок. Где всего несколько лет назад я написал все, что нужно было быстро запускать на C, теперь я не стесняюсь делать это на Java.
-
Стандартная, простая, многопотоковая модель. Имеет ли Common Lisp стандартный многопоточный пакет?
-
Прерывает монотонность всех этих круглых скобок с
[]
,{}
и#{}
, хотя эксперты Common Lisp, вероятно, скажут мне, что с помощью макросов-читателей вы можете добавить их в CL.
-
Недостатки Clojure:
- Работает на JVM.
- Нет рекурсии хвоста или продолжения. Поддерживает ли Common Lisp продолжение продолжения? Я считаю, что схема требует поддержки для обоих.
Преимущества других (общий Lisp, в частности) (и недостатки Clojure):
-
Определяемые пользователем макросы читателей.
-
Другие преимущества?
Мысли? Другие отличия?