Ответ 1
Они являются объектно-ориентированными языками для JVM, которые имеют лямбды и замыкания и взаимодействуют с Java. Помимо этого, они совершенно разные.
Groovy является "динамическим" языком не только в том смысле, что он динамически типизирован, но и поддерживает динамическое метапрограммирование.
Scala - это "статический" язык, поскольку он статически типизирован и практически не имеет динамического метапрограммирования за неудобными вещами, которые вы можете делать на Java. Примечание. Scala система статического типа существенно более однородна и сложна, чем Java.
Groovy синтаксически влияет на Java, но на семантически влияет больше на такие языки, как Ruby.
Scala синтаксически влияет как Ruby, так и Java. На него семантически больше влияют Java, SML, Haskell и очень неясный язык OO, называемый gBeta.
Groovy имеет "случайную" множественную отправку из-за способа перегрузки Java.
Scala - только одна отправка, но имеет SML-вдохновляющее сопоставление шаблонов для решения некоторых из тех же проблем, с которыми приходится иметь дело с несколькими диспетчерами. Однако, когда множественная отправка может отправлять только по типу времени выполнения, сопоставление шаблонов Scala может отправлять на типы выполнения, значения или и то, и другое. Соответствие шаблону также включает синтаксически приятное связывание переменных. Трудно переоценить, насколько приятно, что эта единственная функция делает программирование в Scala.
Оба Scala и Groovy поддерживают форму множественного наследования с mixins (хотя Scala вызывает их черты).
Scala поддерживает как приложение частичной функции, так и currying на уровне языка, Groovy имеет неудобный метод "curry" для выполнения приложения с частичными функциями.
Scala оптимизирует оптимизацию хвостовой рекурсии. Я не верю, что Groovy делает. Это важно в функциональном программировании, но менее важно в императивном программировании.
Обе версии Scala и Groovy оцениваются по умолчанию. Однако Scala поддерживает параметры по умолчанию. Groovy нет - вызов по имени должен быть эмулирован с закрытием.
Scala имеет "для понимания", обобщение перечислимых понятий, найденных на других языках (технически это понимание монадов плюс бит - где-то между Haskell do и С# LINQ).
Scala не имеет понятия "статические" поля, внутренние классы, методы и т.д. Вместо этого он использует одноэлементные объекты. Groovy использует статическую концепцию.
Scala не имеет встроенного выбора арифметических операторов таким образом, как это делает Groovy. В Scala вы можете назвать методы очень гибко.
Groovy имеет оператор elvis для обращения с нулем. Scala программисты предпочитают использовать типы опций для использования нулевого значения, но легко написать оператор elvis в Scala, если хотите.
Наконец, есть ложь, есть проклятая ложь, а затем есть ориентиры. Уровень игры в компьютерных играх оценивается как Scala как между существенно быстрее, чем Groovy (от 2 до 93 раз быстрее), сохраняя при этом примерно одинаковый размер источника. тесты.
Я уверен, что есть много и много различий, которые я не затронул. Но, надеюсь, это дает вам смысл.
Есть ли конкуренция между ними? Да, конечно, но не так сильно, как вы думаете. Groovy Настоящая конкуренция - JRuby и Jython.
Кто собирается побеждать? Мой хрустальный шар так же треснут, как и все остальные.