Scala против Groovy против Clojure

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

Ответ 1

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 и только знакомлюсь с двумя другими.

Ответ 2

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:)

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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