Каковы основные различия между Scala и Groovy? [закрытый]



на поверхности Groovy и Scala выглядят довольно похожими, помимо статической типизации Scala и динамической динамики Groovy.




  • какие другие ключевые отличия и преимущества друг над другом?

  • насколько они похожи на самом деле?

  • есть ли конкуренция между ними?


    • Если да, то кто, по-вашему, победит в долгосрочной перспективе?



596   7  

7 ответов:

Они оба объектно-ориентированные языки для JVM, которые имеют лямбды и замыкания и взаимодействуют с Java. Кроме того, они очень разные.

Groovy-это "динамический" язык не только в том смысле, что он динамически типизирован, но и в том, что он поддерживает динамическое мета-Программирование.

Scala является "статическим" языком в том, что он статически типизирован и практически не имеет динамического метапрограммирования за пределами неудобных вещей, которые вы можете сделать в Java. Обратите внимание, Скала система статического типа существенно более однородна и сложна, чем Java.

Groovy синтаксически зависит от Java, но семантически больше зависит от таких языков, как Ruby.

на Scala синтаксически влияют как Ruby, так и Java. На него семантически больше влияют Java, SML, Haskell и очень неясный язык OO, называемый gBeta.

Groovy имеет "случайную" множественную отправку из-за того, как он обрабатывает Java перегрузка.

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

и Scala, и Groovy поддерживают форму множественного наследования с миксинами (хотя Scala называет их чертами).

Scala поддерживает как частичное приложение функций, так и каррирование на уровне языка, Groovy имеет неудобный метод "карри" для выполнения частичного приложения функций.

Scala выполняет прямую оптимизацию хвостовой рекурсии. Я не верю, что груви знает. Это важно в функциональном программировании, но менее важно в императиве программирование.

и Scala и Groovy охотно оцениваются по умолчанию. Однако Scala поддерживает параметры вызова по имени. Groovy does not-call-by-name должен быть эмулирован с помощью замыканий.

Scala имеет "для понимания", обобщение понимания списка, найденного на других языках (технически это понимание монады плюс немного - где-то между haskell's do и C#'S LINQ).

Scala не имеет понятия о "статических" полях, внутренних классах, методах, etc-вместо этого он использует одноэлементные объекты. Groovy использует статическую концепцию.

Scala не имеет встроенного выбора арифметических операторов так, как это делает Groovy. В Scala вы можете назвать методы очень гибко.

Groovy имеет оператор Элвиса для работы с null. Программисты Scala предпочитают использовать типы опций для использования null, но легко написать оператор Элвиса в Scala, если вы хотите.

наконец, есть ложь, есть наглая ложь, и тогда есть ориентиры. Компьютерный язык бенчмарков игры ранжирует Scala как между существенно быстрее, чем Groovy (в диапазоне от двух до 93 раз быстрее), сохраняя при этом примерно тот же размер источника. критерии.

Я уверен, что есть много, много различий, которые я не покрыл. Но, надеюсь, это дает вам суть.

есть ли между ними конкуренция? Да, конечно, но не так сильно, как можно подумать. Заводной настоящий конкуренция-это JRuby и Jython.

кто победит? Мой хрустальный шар треснул так же, как и любой другой.

scala предназначен для oo / функционального гибридного языка и является очень хорошо спланированы и разработаны. groovy больше похож на набор улучшений, которые многие люди хотели бы использовать в java. я внимательно посмотрел на обоих, так что могу сказать:)

ни один из них не лучше и не хуже другого. groovy очень хорош в метапрограммировании, scala очень хорош во всем, что не нуждается в метапрограммировании, поэтому...я, как правило, использую оба.

Scala имеет актеров, которые делают параллелизм гораздо проще реализовать. И черты, которые дают истинное, типобезопасное множественное наследование.

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

Scala реализует списки немного по-другому; в Groovy почти все является экземпляром java.утиль.Список, в то время как Scala использует как списки, так и примитивы матрицы. Groovy имеет (я думаю) лучшую интерполяцию строк.

Scala быстрее, кажется, но заводные люди действительно подталкивают производительность к выпуску 2.0. 1.6 дал огромный скачок в скорости по сравнению с 1.5 сериями.

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

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

Я не использовал Scala много и поэтому не могу сказать много об этом.

Scala имеет гораздо более крутую кривую обучения, чем Groovy. Scala имеет гораздо большую поддержку функционального программирования с его сопоставлением шаблонов и рекурсией на основе хвоста, что означает больше инструментов для чистого FP.

У Scala также есть компиляция dynamica, и я сделал это с помощью twitter eval lib (https://github.com/twitter/util). Я сохранил код scala в плоском файле (без расширения) и с помощью eval создал класс scala во время выполнения. Я бы сказал, что scala-это метапрограммирование и имеет функцию динамического усложнения

Comments

    Ничего не найдено.