Подтвердить что ты не робот

Почему Clojure над другими JVM Lisps: кава, вооруженный медведь или SISC?

У JVM уже было три Lisp до того, как Clojure прибыл на сцену: Kawa, Armed Bear и SISC.

В чем разница Clojure, которая осталась этими Lisps?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

  • Разработан с учетом concurrency.

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

В разделе обоснования clojure.org указано:

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

  • A Lisp
  • для функционального программирования
  • симбиотик с установленной платформой
  • для Concurrency

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

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

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

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

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

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

Как насчет стандартных Lisps (Common Lisp и Scheme)?

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

Это язык concurrency дизайн, как отмечали другие.

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

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

Ответ 7

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

Я подозреваю, что исполнители Kawa и т.д. не так много поставлены на карту, следовательно, не раздувают свой продукт. Кроме того, что там шутить? "У нас отличный язык.. он называется Lisp" Это труднее продавать.

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

Нам не нужно иметь еще один ответ (и я не ожидаю голоса за это), но вот некоторые небольшие улучшения для нескольких других ответов.

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

Мне нравится Common Lisp. Частью его красоты является ее причудливость, которая исходит из того, что она была разработана комитетами с целью обратной совместимости с несколькими несовместимыми диалектами.

Мне нравится Scheme. Это красивый, элегантный язык. Тем не менее, его развитие зависит от комитетов, и, возможно, это время от времени замедляло его. В любом случае его цели отличаются от целей Clojure.

Общие Lisp и схема имеют такие акценты, как хвостовая рекурсия, которые не подходят для эффективности JVM. Clojure был разработан с самого начала, чтобы хорошо отобразить JVM и хорошо взаимодействовать с Java. (Я не уверен, что это значит о диалектах Clojurescript и CLR.)

Тот факт, что Clojure был разработан, первоначально одним человеком, Ричем Хики и контролируется им вместе с небольшой командой, не обязательно делает его лучше, чем язык, контролируемый комитетами. Если бы один человек принял плохие решения, Clojure не был бы хорошим языком.

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

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

Было бы немного преувеличением (или занижением?) сказать, что Clojure имеет силу Common Lisp с элегантностью Схемы. Общий Lisp имеет много и много того, что вам нужно встроить в язык, но это беспорядок (я говорю это с любовью), а когда вам нужно что-то большее, чем на языке, иногда есть несколько несовместимых библиотек с различными компромиссами, Схема по дизайну небольшая, хотя имеются библиотеки. Clojure имеет растущее количество стандартных библиотек (в отличие от CL), которые являются более или менее частями языка. Хорошей иллюстрацией этого является проект core.matrix, который обеспечивает общий интерфейс для нескольких различных реализаций матриц. Это важно, поскольку существуют различные реализации матриц, которые лучше всего подходят для случайного использования небольших матриц или, например, для широкого использования огромных матриц.

Ничто из этого не означает, что Clojure лучше, чем Common Lisp или Scheme; не это. Эти три языка имеют разные достоинства.

Ответ 11

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

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