На первый взгляд Groovy и Scala выглядят очень похоже, за исключением статической типизации Scala и динамического Groovy.
- В чем заключаются другие ключевые различия и преимущества каждого из них перед другим?
- Насколько они похожи на самом деле?
- Есть ли между ними конкуренция?
- Если да, то кто, по вашему мнению, выиграет в долгосрочной перспективе?
Ответы:
Они оба являются объектно-ориентированными языками для JVM, которые имеют лямбда-выражения и замыкания и взаимодействуют с Java. В остальном они очень разные.
Groovy - это «динамический» язык не только в том смысле, что он динамически типизирован, но и в том смысле, что он поддерживает динамическое метапрограммирование.
Scala является «статическим» языком в том смысле, что он статически типизирован и практически не имеет динамического метапрограммирования, кроме неудобных вещей, которые вы можете делать на Java. Обратите внимание: система статических типов в Scala значительно более унифицирована и сложна, чем в Java.
На Groovy синтаксически влияет Java, но на семантическое больше влияют такие языки, как Ruby.
На Scala синтаксически влияют как Ruby, так и Java. На него больше семантически влияют Java, SML, Haskell и очень малоизвестный объектно-ориентированный язык под названием gBeta.
Groovy имеет "случайную" множественную отправку из-за того, как он обрабатывает перегрузку Java.
Scala поддерживает только однократную отправку, но в ней есть сопоставление с образцом, основанное на SML, для решения некоторых из тех же типов проблем, для решения которых предназначена множественная отправка. Однако там, где множественная отправка может выполняться только по типу среды выполнения, сопоставление с образцом в Scala может выполняться по типам среды выполнения, значениям или обоим. Сопоставление с образцом также включает синтаксически приятное связывание переменных. Трудно переоценить, насколько приятным является программирование на Scala только благодаря этой единственной функции.
И Scala, и Groovy поддерживают форму множественного наследования с помощью миксинов (хотя в Scala они называются типажами).
Scala поддерживает как частичное применение функций, так и каррирование на уровне языка, Groovy имеет неудобный метод «карри» для выполнения частичного приложения функций.
Scala выполняет прямую оптимизацию хвостовой рекурсии. Я не верю, что Groovy знает. Это важно в функциональном программировании, но менее важно в императивном программировании.
И Scala, и Groovy по умолчанию оцениваются с нетерпением. Однако Scala поддерживает параметры вызова по имени. Groovy этого не делает - вызов по имени должен эмулироваться с помощью замыканий.
В Scala есть «для понимания», обобщение представлений списков, имеющихся в других языках (технически это монадные понимания плюс немного - где-то между do Haskell и LINQ в C #).
Scala не имеет понятия «статические» поля, внутренние классы, методы и т.д. - вместо этого он использует одноэлементные объекты. Groovy использует концепцию статики.
В Scala нет встроенного набора арифметических операторов, в отличие от Groovy. В Scala вы можете очень гибко называть методы.
В Groovy есть оператор elvis для работы с null. Программисты Scala предпочитают использовать типы Option вместо использования null, но при желании легко написать оператор elvis на Scala.
Наконец, есть ложь, есть чертова ложь, а затем есть тесты. Игра компьютерных тестов оценивает Scala как значительно более быструю, чем Groovy (от двух до 93 раз быстрее), при сохранении примерно того же размера исходного кода. ориентиры .
Я уверен, что есть очень много различий, которые я не рассмотрел. Но, надеюсь, это дает вам суть.
Есть ли между ними соревнование? Да, конечно, но не настолько, как вы думаете. Настоящие конкуренты Groovy - это JRuby и Jython.
Кто победит? Мой хрустальный шар так же треснул, как и любой другой.
источник
scala задуман как функционально-функциональный гибридный язык, он очень хорошо спланирован и разработан. Groovy больше похож на набор улучшений, которые многие люди хотели бы использовать в java. я внимательно посмотрел на оба, так что могу сказать :)
ни один из них не лучше или хуже другого. Groovy очень хорош в метапрограммировании, scala очень хорош во всем, что не требует метапрограммирования, поэтому ... я обычно использую оба.
источник
В Scala есть акторы, которые значительно упрощают реализацию параллелизма. И черты, обеспечивающие истинное, безопасное для типов множественное наследование.
источник
Вы попали в точку с помощью статического и динамического набора текста. Оба являются частью нового поколения динамических языков с замыканиями, лямбда-выражениями и т. Д. Между ними есть несколько синтаксических различий, но функционально я не вижу большой разницы между Groovy и Scala.
Scala реализует списки немного иначе; в Groovy практически все является экземпляром java.util.List, тогда как Scala использует как списки, так и примитивные массивы. Groovy имеет (я думаю) лучшую интерполяцию строк.
Кажется, что Scala быстрее, но ребята из Groovy действительно стремятся повысить производительность в выпуске 2.0. 1.6 дала огромный скачок в скорости по сравнению с серией 1.5.
Я не думаю, что какой-либо язык действительно «выиграет», поскольку он нацелен на два разных класса проблем. Scala - это высокопроизводительный язык, который очень похож на Java, но не имеет такого же уровня шаблонов, как Java. Groovy предназначен для быстрого прототипирования и разработки, где скорость менее важна, чем время, необходимое программистам для реализации кода.
источник
У Scala гораздо более крутая кривая обучения, чем у Groovy. Scala имеет гораздо большую поддержку функционального программирования с его сопоставлением с образцом и хвостовой рекурсией, что означает больше инструментов для чистого FP.
источник
В Scala также есть компиляция динамического кода, и я сделал это с помощью twitter eval lib ( https://github.com/twitter/util ). Я сохранил код Scala в плоском файле (без какого-либо расширения) и использовал класс scala, созданный eval во время выполнения. Я бы сказал, что scala - это метапрограммирование и имеет функцию динамического усложнения.
источник