Может кто-нибудь объяснить, пожалуйста, основные различия между Scala, Groovy и Clojure. Я знаю, что каждый из этих компиляторов запускается на JVM, но я хотел бы провести простое сравнение между ними.
источник
Может кто-нибудь объяснить, пожалуйста, основные различия между Scala, Groovy и Clojure. Я знаю, что каждый из этих компиляторов запускается на JVM, но я хотел бы провести простое сравнение между ними.
Groovy - это динамически типизированный язык, синтаксис которого очень близок к Java, с рядом улучшений синтаксиса, которые позволяют более легкий код и меньший шаблон. Он может работать как через интерпретатор, так и при компиляции, что делает его пригодным для быстрого создания прототипов, сценариев и изучения динамических языков без необходимости изучать новый синтаксис (при условии, что вы знаете Java). Начиная с Groovy 2.0, он также имеет растущую поддержку статической компиляции . Groovy поддерживает замыкания и поддерживает программирование в несколько функциональном стиле, хотя оно все еще довольно далеко от традиционного определения функционального программирования.
Clojure - это диалект Lisp с несколькими расширенными функциями, такими как программная транзакционная память . Если вам нравится Lisp и вы хотите использовать что-то подобное в JVM, Clojure для вас. Это, пожалуй, самый функциональный язык в JVM и, безусловно, самый известный. Кроме того, он делает больший акцент на неизменности, чем другие диалекты Лисп, что делает его ближе к сердцу энтузиастов функционального языка.
Scala - это полностью объектно-ориентированный язык, в большей степени, чем Java, с одной из самых продвинутых систем типов, доступных на неисследованных языках, и, безусловно, самой продвинутой системой типов в JVM. Он также сочетает в себе многие понятия и особенности функциональных языков, не ставя под угрозу объектную ориентацию, но его компромисс по характеристикам функционального языка отталкивает некоторых энтузиастов последнего.
Groovy имеет хорошее признание и популярный веб-фреймворк в Grails. Он также поддерживает систему сборки Gradle, которая становится популярной альтернативой Maven. Я лично думаю, что это язык с ограниченной полезностью, особенно когда Jython и JRuby начинают проникать на землю JVM по сравнению с другими.
Clojure, даже не считая некоторых очень интересных функций, имеет сильную привлекательность, будучи просто диалектом Lisp в JVM. Конечно, это может ограничить его популярность, но я ожидаю, что в течение долгого времени у него будет лояльное сообщество.
Scala может напрямую конкурировать с Java и испытывать свои усилия практически по всем аспектам. Конечно, в настоящее время он не может конкурировать по популярности, и отсутствие сильной корпоративной поддержки может помешать его принятию в корпоративной среде. Это также гораздо более динамичный язык, чем Java, в смысле его развития. С точки зрения языка это хорошо. С точки зрения пользователей, которые планируют написать тысячи строк кода, это не так.
В заключение, я очень хорошо знаком со Scala и знаком только с двумя другими.
Scala
Scala эволюционировал из чисто функционального языка, известного как Funnel, и представляет собой чистую комнату реализации почти всего синтаксиса Java, отличающуюся только тем, где можно сделать явное улучшение или где это может поставить под угрозу функциональную природу языка. Такие различия включают одноэлементные объекты вместо статических методов и вывод типов.
Многое из этого было основано на предыдущей работе Мартина Одерского с языком пиццы . Интеграция OO / FP выходит далеко за рамки простого замыкания и приводит к тому, что язык описывается как пост-функциональный.
Несмотря на это, он ближе всего к Java во многих отношениях. Главным образом из-за сочетания поддержки ОО и статической типизации, а также из-за явной цели в дизайне языка, чтобы он очень тесно интегрировался с Java.
Groovy
Groovy однозначно решает две самые большие критики Java
Возможно, он синтаксически наиболее близок к Java, не предлагая некоторые из более богатых функциональных конструкций, которые предоставляют Clojure и Scala, но все же предлагая определенное эволюционное улучшение - особенно для написания скриптовых программ.
Groovy имеет самую сильную коммерческую поддержку из трех языков, в основном через источник весны.
Clojure
Clojure - это функциональный язык в семействе LISP, он также динамически типизирован.
Такие функции, как поддержка STM, обеспечивают лучшую встроенную поддержку параллелизма, в то время как Scala требуется сторонняя библиотека, такая как Akka, для ее дублирования.
Синтаксически, это также самый далекий из трех языков из типичного кода Java.
Я также должен сообщить, что я больше всего знаком со Scala :)
источник
У меня никогда не было времени играть с clojure. Но для scala vs groovy это слова Джеймса Страчана - создателя Groovy
Вы можете прочитать всю историю здесь
источник
Их можно отличить от того, откуда они берутся или на каких разработчиков они нацелены в основном.
Groovy немного похож на скриптовую версию Java. Долгое время программисты на Java чувствовали себя как дома при создании гибких приложений на основе больших архитектур. Groovy на Grails, как следует из названия, похож на фреймворк Rails. Для людей, которые не хотят постоянно беспокоиться о многословии Java.
Scala - это объектно-ориентированный и функциональный язык программирования, и программисты на Ruby или Python могут почувствовать себя ближе к этому. Он использует довольно много общих хороших идей, найденных в этих языках программирования.
Clojure - это диалект языка программирования Lisp, поэтому разработчики Lisp, Scheme или Haskell могут чувствовать себя как дома при разработке с этим языком.
источник
Я читаю книгу Скотта Дэвиса «Прагматичные программисты»: «Отличные рецепты: смазка колес Java», авторское право, 2008 год, напечатанную в апреле того же года.
Это немного устарело, но книга ясно дает понять, что Groovy буквально является расширением Java. Я могу написать код Java, который работает точно так же, как Java, и переименовать файл * .groovy, и он работает нормально. Согласно книге, верно обратное, если я включу необходимые библиотеки. Пока что эксперименты это подтверждают.
источник
Очевидно, что синтаксис совершенно другой (Groovy ближе всего к Java), но я полагаю, это не то, что вы просите.
Если вы заинтересованы в их использовании для написания сценариев в Java-приложении, Scala, вероятно, не является хорошим выбором, поскольку нет простого способа оценить его с помощью Java, тогда как Groovy особенно подходит для этой цели.
источник
eval
требуется