4 ответов:
все они имеют много общего:
- динамические языки
- типизированы
- Compiled
- синтаксис Lisp-стиля, т. е. код записывается как структуры данных Lisp (формы) с наиболее распространенным шаблоном, являющимся вызовами функций, такими как:
(function-name arg1 arg2)- мощные макросистемы, которые позволяют обрабатывать код как данные и генерировать произвольный код во время выполнения (часто используется для "расширения языка" с новым синтаксисом или создание предметно-ориентированных языков)
- часто используется в функциональном стиле программирования, хотя имеют возможность размещения других парадигм
- акцент в интерактивной разработке с REPL (т. е. вы интерактивно развиваетесь в запущенном экземпляре кода)
отличительные особенности Common Lisp:
- мощная подсистема ООП (Common Lisp Object System)
- вероятно, лучший компилятор (Common Lisp-самый быстрый Lisp согласно http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html хотя там не так уж много.....)
отличительные особенности Clojure:
- крупнейшая библиотечная экосистема, так как вы можете напрямую использовать любые библиотеки Java
- векторы
[]и карты{}используется в качестве стандарта в дополнение к стандартным спискам()- В дополнение к общей полезности векторов и карт некоторые считают, что это инновации, которые делают в целом более читаемым- больший акцент на неизменность и ленивое функциональное программирование, несколько вдохновленное Haskell
- сильные возможности параллелизма, поддерживаемые программной транзакционной памятью на уровне языка (стоит посмотреть:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey)
схема отличительные особенности:
- возможно, самый простой и легкий в освоении Лисп
- гигиенические макросы (см. http://en.wikipedia.org/wiki/Hygienic_macro) - элегантно избегает проблем со случайным захватом символов в макрорасширениях
люди выше пропустили несколько вещей
Common Lisp также имеет векторы и хэш-таблицы. Разница в том, что Common Lisp использует #() для векторов и не имеет синтаксиса для хэш-таблиц. Схема имеет векторы, я считаю
Common Lisp имеет макросы чтения, которые позволяют использовать новые скобки (как и Racket, потомок Scheme).
Scheme и Clojure имеют гигиенические макросы, в отличие от Common Lisp негигиеничные
все языки либо современные, либо имеют обширные проекты реконструкции. Common Lisp получил обширные библиотеки за последние пять лет (в основном благодаря Quicklisp), Scheme имеет некоторые современные реализации (Racket, Chicken, Chez Scheme и т. д.), а Clojure был создан относительно недавно
Common Lisp имеет встроенную систему OO, хотя она сильно отличается от других систем OO, которые вы могли бы использовать. Примечательно, что это не принудительно-вы не есть для написания кода OO.
языки имеют несколько другую философию дизайна. Схема была разработана как минимальный диалект для понимания актерской модели; позже она стала использоваться в педагогике. Common Lisp был разработан, чтобы объединить мириады диалектов Lisp, которые возникли. Clojure был разработан для параллелизма. В результате Scheme имеет репутацию минимальной и элегантной, Common Lisp-мощной и парадигма-агностик (функциональными, ОО и т. д.) и Clojure в пользу функционального программирования.
Не забывайте о различиях Lisp-1 и Lisp-2.
схема и Clojure являются Lisp-1:
Это означает, что имена переменных и функций находятся в одном пространстве имен.Common Lisp is Lisp-2:
Функция и переменные имеют разные пространства имен (на самом деле, CL имеет много пространств имен).
Gimp записывается в схеме:)
на самом деле выделение программного обеспечения некоторые люди думают, что может быть написано на C++, вероятно, было сделано под зонтиком Lisp, его трудно выбрать золотые яблоки из связки. Дело в том, что C++ не всегда был популярен, он только кажется популярным сегодня из-за истории обновлений. В течение меньшей половины века C++ даже не использовал многопоточность, именно там Python сегодня является выгребной ямой бесполезного непроверенного кода глючного клея. Fasterforward a немного и теперь мы видим рост функционального программирования, его больше похоже на адаптацию или смерть. Я думаю, что Java имеет право на адаптацию части.
схема была разработана для упрощения языка Lisp, это было его единственным намерением, за исключением того, что он никогда не поймал. Я думаю, что Clojure делает что-то подобное, чтобы упростить схему для JVM больше ничего. Его так же, как и любой другой язык JVM просто там, чтобы раздуть пользовательский опыт, только чтобы упростить написание шаблона на яванской земле.
Comments