Na superfície, Groovy e Scala parecem muito semelhantes, além de Scala ser digitado estaticamente e dinâmico Groovy.
- Quais são as outras principais diferenças e vantagens que cada uma tem sobre a outra?
- Quão parecidos eles são realmente?
- Existe concorrência entre os dois?
- Se sim, quem você acha que vencerá a longo prazo?
Respostas:
Ambas são linguagens orientadas a objetos para a JVM que possuem lambdas e fechamentos e interoperam com Java. Fora isso, eles são extremamente diferentes.
O Groovy é uma linguagem "dinâmica", não apenas no sentido de que é digitada dinamicamente, mas também em suporte a metaprogramação dinâmica.
Scala é uma linguagem "estática", pois é digitada estaticamente e praticamente não possui metaprogramação dinâmica além das coisas desajeitadas que você pode fazer em Java. Observe que o sistema de tipo estático do Scala é substancialmente mais uniforme e sofisticado que o do Java.
O Groovy é influenciado sintaticamente por Java, mas semanticamente influenciado mais por linguagens como Ruby.
Scala é sintaticamente influenciado por Ruby e Java. É semanticamente influenciado mais por Java, SML, Haskell e uma linguagem OO muito obscura chamada gBeta.
O Groovy possui despacho múltiplo "acidental" devido à maneira como lida com a sobrecarga de Java.
O Scala é apenas de despacho único, mas possui correspondência de padrões inspirada em SML para lidar com alguns dos mesmos tipos de problemas que o despacho múltiplo deve tratar. No entanto, onde o despacho múltiplo só pode despachar no tipo de tempo de execução, a correspondência de padrões do Scala pode despachar nos tipos, valores ou ambos de tempo de execução. A correspondência de padrões também inclui ligação variável sintaticamente agradável. É difícil enfatizar quão agradável esse recurso único torna a programação no Scala.
O Scala e o Groovy suportam uma forma de herança múltipla com mixins (embora Scala os chame de características).
O Scala suporta aplicativos de funções parciais e curry no nível da linguagem, o Groovy possui um método "curry" estranho para executar aplicativos de funções parciais.
Scala faz otimização direta da recursão da cauda. Não acredito que o Groovy acredite. Isso é importante na programação funcional, mas menos importante na programação imperativa.
Scala e Groovy são avidamente avaliados por padrão. No entanto, o Scala suporta parâmetros de chamada por nome. O Groovy não - chamada por nome deve ser emulada com fechamentos.
O Scala tem "para compreensões", uma generalização das compreensões de lista encontradas em outros idiomas (tecnicamente são compreensões de mônada mais um pouco - em algum lugar entre o fazer de Haskell e o LINQ do C #).
O Scala não tem conceito de campos "estáticos", classes internas, métodos etc. - ele usa objetos singleton. Groovy usa o conceito estático.
A Scala não construiu na seleção de operadores aritméticos da mesma maneira que o Groovy. No Scala, você pode nomear métodos de maneira muito flexível.
Groovy tem o operador elvis para lidar com null. Os programadores do Scala preferem usar os tipos Option ao usar null, mas é fácil escrever um operador elvis no Scala, se você quiser.
Finalmente, existem mentiras, existem malditas mentiras e, depois, há referências. O jogo de benchmarks de linguagem de computador classifica o Scala como sendo substancialmente mais rápido que o Groovy (variando de duas a 93 vezes mais rápido), mantendo aproximadamente o mesmo tamanho de fonte. benchmarks .
Tenho certeza de que existem muitas, muitas diferenças que não cobri. Mas espero que isso lhe dê uma essência.
Existe uma competição entre eles? Sim, é claro, mas não tanto quanto você imagina. A verdadeira concorrência de Groovy é JRuby e Jython.
Quem vai ganhar? Minha bola de cristal está tão quebrada quanto a de qualquer outra pessoa.
fonte
O scala deve ser uma linguagem híbrida funcional / oo e é muito bem planejado e projetado. groovy é mais como um conjunto de aprimoramentos que muitas pessoas gostariam de usar em java. olhei mais de perto para os dois, para que eu saiba :)
nenhum deles é melhor ou pior que o outro. groovy é muito bom em metaprogramação, scala é muito bom em tudo que não precisa de metaprogramação, então ... eu costumo usar os dois.
fonte
A Scala possui atores, que facilitam a implementação da concorrência. E traços que dão herança múltipla verdadeira e segura.
fonte
Você acertou na cabeça com a digitação estática e dinâmica. Ambos fazem parte da nova geração de linguagens dinâmicas, com fechamentos, expressões lambda e assim por diante. Também existem algumas diferenças sintáticas entre os dois, mas, funcionalmente, não vejo uma grande diferença entre Groovy e Scala.
Scala implementa Listas um pouco diferente; no Groovy, praticamente tudo é uma instância do java.util.List, enquanto o Scala usa Lists e matrizes primitivas. Groovy tem (eu acho) melhor interpolação de strings.
Scala é mais rápido, ao que parece, mas o pessoal do Groovy está realmente pressionando o desempenho para a versão 2.0. O 1.6 deu um enorme salto de velocidade em relação à série 1.5.
Não acho que nenhum dos idiomas realmente 'vença', pois tem como alvo duas classes diferentes de problemas. Scala é uma linguagem de alto desempenho que é muito parecida com Java, sem ter o mesmo nível de clichê que Java. O Groovy é para prototipagem e desenvolvimento rápidos, onde a velocidade é menos importante do que o tempo necessário para os programadores implementarem o código.
fonte
Scala tem uma curva de aprendizado muito mais íngreme que o Groovy. O Scala tem muito mais suporte para programação funcional com sua correspondência de padrões e recursão baseada em cauda, o que significa mais ferramentas para FP puro.
fonte
O Scala também possui compilação dinâmica e eu fiz isso usando o twitter eval lib ( https://github.com/twitter/util ). Eu mantive o código scala em um arquivo simples (sem nenhuma extensão) e usando a classe scal eval criada em tempo de execução. Eu diria que scala é meta-programação e tem característica de complicação dinâmica
fonte