Почему Clojure над другими JVM Lisps: Kawa, Armed Bear или SISC? - PullRequest
66 голосов
/ 12 сентября 2009

У JVM уже было три Лиспа до того, как Клоюре появился на сцене: Кава , Вооруженный Медведь и SISC .

Какой пробел заполняет Clojure , оставленный этими Лиспами?

Ответы [ 11 ]

109 голосов
/ 12 сентября 2009

Kawa, ABCL и SISC - это повторные реализации существующих языков, которые достаточно длинны в зубе. Они отлично подходят, если по какой-то причине вы хотите использовать стандартную Scheme или стандартный Common Lisp на JVM.

Clojure - это новый язык. Это не заполняет пробел . Это добавляет совершенно новые возможности. Это благоприятствует чисто функциональному подходу - Scheme и CL являются мультипарадигмами. Clojure сильно заимствует из дизайна различных языков FP (ML, Haskell).

И да, вы можете добавить поддержку параллелизма к другим Лиспам, но это совершенно не соответствует действительности. Clojure изначально разрабатывался как параллельный язык. Настолько, что написание параллельных программ тривиально в Clojure - это не ракетостроение, как на нефункциональных языках (Scheme, CL не исключены). Посмотрите на это так:

Люди говорят, что по умолчанию C позволяет писать быстрые программы.

Ну, Clojure позволяет вам писать параллельные программы по умолчанию.

33 голосов
/ 12 сентября 2009
  1. «Clojure - это Лисп, не ограниченный обратной совместимостью» (это с веб-сайта Clojure). Это новое начало. Это прогресс. Используйте идеи, которые делают Lisp / Scheme мощным, но переосмыслите их на платформе Java .

  2. Clojure всегда будет самым последним Clojure. С любым другим языком, портированным на JVM, версия JVM всегда может играть в догонялки. Если вам не нужна платформа Java, зачем использовать SISC поверх другой схемы? Если да, то почему бы не использовать тот Лисп (Clojure), который был разработан специально для него?

  3. Разработан с учетом параллелизма.

14 голосов
/ 14 сентября 2009

Самый простой ответ, который я могу придумать: Clojure - это не Common-Lisp. Clojure не ограничен историей других Lisps. Это новый язык встроенный для JVM.

11 голосов
/ 14 сентября 2014

Обоснование на сайте clojure.org гласит:

Почему я написал еще один язык программирования? В основном потому, что я хотел:

  • Лисп
  • для функционального программирования
  • симбиот с установленной платформой
  • предназначен для параллелизма

и не смог найти.

Соответствуют ли указанные вами 3 языка (Kawa, ABCL и SISC) этим требованиям? Это:

  • Лиспс (диалекты CL или Scheme) ✓
  • для функционального программирования ✓
  • симбиот с установленной платформой (JVM) ✓

но они не предназначены для (STM) параллелизма; однако, чтобы быть справедливым и полным, я нашел по крайней мере 2 библиотеки STM для CL, которые еще не были упомянуты:

  1. STMX
    • Проверена работа на ABCL. В стадии активной разработки.
  2. CL-STM
    • Dead? Последнее изменение было в 2007 году.

Хм ... Так зачем создавать новый Лисп? Главным образом потому, что это библиотеки . Страница с обоснованием на clojure.org продолжается (выделение добавлено):

А как насчет стандартных Лиспов (Common Lisp и Scheme)?

  • Медленная / без инноваций после стандартизации
  • Основные структуры данных изменяемые, не расширяемые
  • Нет параллелизма в спецификации
  • Хорошие реализации уже существуют для JVM (ABCL, Kawa, SISC и др.)
  • Стандартные Лиспы - это их собственные платформы

Это языковая проблема параллелизма , как уже упоминали другие.

Кроме того, зачем останавливаться на JVM? Поддержка Clojure CLR находится в активной разработке .

Это два пробела, которые он заполняет, с моей точки зрения. Вы должны использовать Clojure, если он соответствует вашим потребностям. Не беспокойтесь о потере своих навыков, если Clojure выпадет из карты. Ваши навыки Лиспа, но, что более важно, ваш образ мышления, будут перенесены на другие диалекты Лисп.

11 голосов
/ 12 сентября 2009

Я просто не знал об этом, что является серьезным преимуществом для Clojure (то, что люди наделали достаточно шума, я узнал). Самое большое, что у Clojure есть то, чего я не видел в перечисленных вами списках: Транзакционная память программного обеспечения .

Clojure также был разработан для JVM, в отличие от того, чтобы быть слоем для другого языка, так что это немного больше "Java-y", который я представляю себе, когда другие должны взаимодействовать.

10 голосов
/ 12 сентября 2009

Если бы я был циничным, я бы сказал, что у Clojure есть более хороший веб-сайт и более сексуальное имя.

7 голосов
/ 12 сентября 2009

Я также должен добавить, что Clojure - это относительно новый язык, реализованный одним человеком, с хорошими маркетинговыми навыками и большой энергией. Он вкладывает много времени и шумихи в уловку ... иногда, шумиха - самоисполняющееся пророчество в том, что если вы сможете убедить достаточное количество людей в том, что это последняя величайшая вещь, тогда вы сможете получить достаточно поддержки и импульса, чтобы сделать это на самом деле работа.

Я подозреваю, что разработчики Kawa и т. Д. Не так уж сильно поставлены на карту, поэтому не рекламируют свой продукт. Кроме того, что тут шумиха? «У нас есть отличный язык ... он называется Lisp». Это сложнее для маркетинга.

Я думаю, что Java является ярким примером этого. У него были некоторые очень серьезные недостатки, но поскольку он продавался и активно рекламировался, он набрал значительную динамику, что означало поддержку со стороны поставщиков аппаратного и программного обеспечения, производителей инструментов, инвестиции по отраслям и т. Д. В любом случае, он достиг определенной степени успех, хотя я ненавидел программирование в нем. Clojure может достичь такого же успеха, что и другие Лиспы.

5 голосов
/ 12 сентября 2009

Преимущество Clojure заключается в том, что он предоставляет вам доступ ко всем библиотекам / коду Java и многопоточности, поскольку он основан на JVM. Кроме того, он был разработан с учетом параллелизма, что обычно не предназначено для lisp, хотя из-за отображающих примитивов, вероятно, не составит труда разработать lisp, который бы хорошо поддерживал параллелизм.

При этом я попробовал Clojure и возненавидел синтаксис и боль в прикладном факторе, который, кажется, сочетается с чем-нибудь связанным с Java.

1 голос
/ 13 сентября 2009

Clojure - это «шепот», это не какой-то шуток, который вы уже знаете. Я провел последний пару дней читаю материал и просматриваю ролики, и я впечатлен. это предпосылка заключается в том, что функциональные программы (основанные на неизменных данных) являются лучшим способом управлять параллелизмом. Clojure реализует систему, похожую на lisp, на основе JVM, чтобы обеспечить ее.

0 голосов
/ 14 сентября 2016

Это новое! Это означает, что не многие старые лисперы будут использовать его, поскольку традиционное сообщество лиспов хорошо, традиционно, но это также означает, что люди без предыдущего опыта лиспа подберут его как новое.

Имхо, Clojure для старых Лиспов такой же, как Руби для Smalltalk. Не обязательно лучше, но достаточно хорошо. И что наиболее важно, это более приемлемо для вашего работодателя, потому что у него есть импульс и рассматривается как язык, который растет, так же, как когда-то был Руби.

...