Скала против Groovy против Clojure

676

Может кто-то объяснить основные различия между Scala, Groovy и Clojure. Я знаю, что каждый из этих компиляций запускается на JVM, но я бы хотел просто провести сравнение между ними.

Теги:
groovy
clojure
language-comparisons

6 ответов

918
Лучший ответ

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

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

Scala - полностью объектно-ориентированный язык, а не Java, с одним из самых продвинутых доступные на не-исследовательских языках, и, конечно же, самая передовая система типов на JVM. Он также сочетает в себе множество концепций и функций функциональных языков, не ставя под угрозу объектную ориентацию, но его компромисс в отношении функциональных характеристик языка отвлекает некоторых энтузиастов последних.

Groovy имеет хорошее признание и популярную веб-инфраструктуру в Grails. Он также поддерживает систему сборки Gradle, которая становится популярной альтернативой Maven. Я лично считаю, что это язык с ограниченной полезностью, особенно когда Jython и JRuby начинают проникать на JVM-землю, по сравнению с другими.

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

Scala может конкурировать непосредственно с Java, и дать ему возможность запускать свои деньги практически во всех аспектах. Конечно, он не может конкурировать с популярностью на данный момент, и отсутствие сильной корпоративной поддержки может помешать его принятию в корпоративной среде. Это также гораздо более динамичный язык, чем Java, в смысле того, как язык развивается. С точки зрения языка, это хорошо. С точки зрения пользователей, которые планируют иметь тысячи строк кода, написанных на нем, не так.

Как окончательное раскрытие, я очень хорошо знаком с Scala и только знакомлюсь с двумя другими.

  • 1
    Хороший. Хотя я должен сказать, что Scala имеет корпоративную поддержку Lightbend и используется такими громкими именами, как LinkedIn, Twitter, Spark и многими банками. Там, где я работаю, у нас есть кодовая база из 11 миллионов строк Scala, что не очень хорошая идея, но она работает.
209

Scala

Scala эволюционировал из чистого функционального языка, известного как Funnel и представляет собой реализацию чистой комнаты почти всего синтаксиса Java, отличающихся только там, где может быть достигнуто четкое улучшение или где это может поставить под угрозу функциональный характер языка. Такие отличия включают объекты singleton вместо статических методов и вывод типа.

Большая часть этого была основана на работе Мартина Одерского с языком Pizza. Интеграция OO/FP выходит далеко за рамки простого закрытия и приводит к тому, что язык описывается как постфункциональный.

Несмотря на это, он наиболее близок к Java во многих отношениях. В основном из-за сочетания поддержки OO и статической типизации, но также из-за явной цели в дизайне языка, что он должен очень тесно интегрироваться с Java.

Groovy

Groovy явно решает две из самых больших критических замечаний Java:

  • динамически типизируется, что удаляет много шаблонов и
  • добавление закрытий на язык.

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

Groovy имеет самую сильную коммерческую поддержку трех языков, главным образом через springsource.

Clojure

Clojure является функциональным языком в семействе LISP, он также динамически типизирован.

Такие функции, как поддержка STM, дают ему одну из лучших готовых concurrency, тогда как Scala требует стороннюю библиотеку, такую ​​как Akka, чтобы дублировать это.

Синтаксически это также самый дальний из трех языков от типичного кода Java.

Мне также нужно сообщить, что я больше всего знаком с Scala:)

  • 11
    Я никогда не слышал об этом языке воронки раньше. Спасибо за заполнение небольшого пробела в историческом отчете.
  • 8
    Вы не можете назвать Clojure чисто функциональным языком. Конечно, можно написать императивный код.
Показать ещё 20 комментариев
71

У меня никогда не было времени играть с clojure. Но для scala vs groovy это слова от Джеймса Страчана - создателя Groovy

"Хотя мой совет, хотя для долгосрочной замены javac есть Scala. Я очень впечатлен этим! Я могу честно сказать, если бы кто-нибудь показал мне Программирование в scala книге Мартина Одерского, Лекса Ложка и Билла Venner еще в 2003 году я бы никогда не создал Groovy."

Вы можете прочитать всю историю здесь

  • 72
    Следует отметить, что это утверждение не говорит о том, что Scala лучше, чем Groovy. Джеймс также известен тем, что он сказал, что если бы он знал, сколько проблем создать язык, он бы никогда не создал его. В этом контексте понятно, почему он не разработал Groovy, конечно. И я смею сказать, что он дал много хороших идей, но он не является создателем нынешнего Groovy. он покинул проект задолго до 1.0 в 2007 году и с тех пор не участвовал. В нем, по крайней мере, столько же, сколько было с ним.
  • 31
    А учитывая, что Джеймс Страчан активно работает над языком котлина, Скала явно не впечатляет его.
Показать ещё 1 комментарий
31

Они могут быть дифференцированы с тем, откуда они идут или от каких разработчиков они ориентируются главным образом.

Groovy немного напоминает скриптовую версию Java. Долгое время программисты Java чувствовали себя как дома при создании гибких приложений, поддерживаемых большими архитектурами. Groovy на Grails, как видно из названия, похоже на структуру Rails. Для людей, которые не хотят постоянно разбираться в Java многословие.

Scala - это объектно-ориентированный и функциональный язык программирования, и программисты Ruby или Python могут чувствовать себя ближе к этому. Он использует довольно много общих хороших идей, найденных на этих языках программирования.

Clojure является диалектом языка программирования Lisp, поэтому разработчики Lisp, Scheme или Haskell могут чувствовать себя как дома при разработке с этим языком.

  • 24
    Scala на самом деле не функциональный язык программирования. Это прежде всего объектно-ориентированный язык программирования с функциональными возможностями.
  • 16
    Я должен сказать, что этот ответ очень похож на выстрел в темноте. Я думаю, можно привести хороший пример того, что Python ближе к Groovy, чем к Scala, а Ruby (на мой взгляд) не слишком близок к чему-либо из вышеперечисленного, возможно, ближе всего к Groovy. Haskell не очень похож на (Common) Lisp или Scheme (и, следовательно, не очень похож на Clojure). Для меня этот ответ выглядит (в лучшем случае!) Как «Я тоже не знаю, дай мне Википедию, что для тебя».
Показать ещё 13 комментариев
8

Я читаю книгу Прагматичных программистов "Groovy Рецепты: смазывание колес Java" Скотта Дэвиса, авторское право 2008 года и напечатанное в апреле того же года.

Это немного устарело, но в книге ясно, что Groovy является буквально расширением Java. Я могу написать Java-код, который функционирует точно так же, как Java, и переименовать файл *.groovy, и он отлично работает. Согласно книге, обратное верно, если я включаю необходимые библиотеки. До сих пор эксперименты, похоже, подтверждают это.

  • 0
    Это лучшая книга для изучения Groovy.
  • 0
    Вероятно, важно отметить, что не весь код будет вести себя одинаково. Некоторые из этих различий включают способ, которым Groovy понимает одинарные и двойные кавычки, и его предпочтение по сравнению с расширением. Большая часть кода будет работать одинаково.
4

Очевидно, что синтаксис совершенно другой (Groovy ближе всего к Java), но я полагаю, что это не то, о чем вы просите.

Если вы заинтересованы в использовании их в script приложении Java, Scala, вероятно, не очень хороший выбор, поскольку нет простого способа оценить это из Java, тогда как Groovy особенно подходит для этой цели.

  • 0
    Я не понимаю вашу точку зрения об использовании Scala для написания сценариев Java. Вы, конечно, можете написать скрипт Scala, который управляет кодом Java; не требуется eval .
  • 2
    @Daniel, пожалуйста, посмотрите вопрос об использовании Scala для сценариев, который я связал. Принято ответить, что отсутствие средства «eval» и поддержки javax.scripting делает использование Scala для создания сценариев Java-приложения более хитрым, чем, скажем, в Groovy.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню