Alguém pode explicar as principais diferenças entre Scala, Groovy e Clojure. Conheço cada uma dessas compilações para executar na JVM, mas gostaria de uma comparação simples entre elas.
Alguém pode explicar as principais diferenças entre Scala, Groovy e Clojure. Conheço cada uma dessas compilações para executar na JVM, mas gostaria de uma comparação simples entre elas.
Respostas:
Groovy é uma linguagem de tipo dinâmico, cuja sintaxe está muito próxima do Java, com várias melhorias de sintaxe que permitem código mais leve e menos clichê. Ele pode ser executado através de um intérprete, além de ser compilado, o que o torna bom para prototipagem rápida, scripts e aprendizado de linguagens dinâmicas sem precisar aprender uma nova sintaxe (supondo que você conheça Java). A partir do Groovy 2.0, ele também tem suporte crescente à compilação estática . O Groovy suporta fechamentos e suporta programação em um estilo um pouco funcional, embora ainda esteja bastante longe da definição tradicional de programação funcional.
Clojure é um dialeto do Lisp com alguns recursos avançados, como Memória Transacional de Software . Se você gosta do Lisp e gostaria de usar algo parecido na JVM, o Clojure é para você. É possivelmente a linguagem mais funcional em execução na JVM, e certamente a mais famosa. Além disso, ele enfatiza mais a imutabilidade do que outros dialetos Lisp, o que o aproxima do coração dos entusiastas da linguagem funcional.
Scala é uma linguagem totalmente orientada a objetos, mais do que Java, com um dos sistemas de tipos mais avançados disponíveis em linguagens que não são de pesquisa e, certamente, o sistema de tipos mais avançado na JVM. Ele também combina muitos conceitos e características das linguagens funcionais, sem comprometer a orientação do objeto, mas seu comprometimento com as características da linguagem funcional afasta alguns entusiastas desta última.
O Groovy tem boa aceitação e um framework web popular no Grails. Ele também alimenta o sistema de compilação Gradle, que está se tornando uma alternativa popular ao Maven. Pessoalmente, acho que é uma linguagem com utilidade limitada, especialmente quando o Jython e o JRuby começam a fazer incursões no território da JVM, em comparação com os outros.
Clojure, mesmo descontando alguns recursos muito interessantes, tem um forte apelo por ser um dialeto Lisp na JVM. Isso pode limitar sua popularidade, garantido, mas espero que tenha uma comunidade leal por muito tempo.
O Scala pode competir diretamente com o Java e concorrer a dinheiro em quase todos os aspectos. Não pode competir em popularidade no momento, é claro, e a falta de um forte apoio corporativo pode impedir sua aceitação nos ambientes corporativos. É também uma linguagem muito mais dinâmica que Java, no sentido de como a linguagem evolui. Do ponto de vista da linguagem, isso é uma coisa boa. Da perspectiva dos usuários que planejam ter milhares de linhas de código escritas, não é assim.
Como divulgação final, estou muito familiarizado com Scala, e só estou familiarizado com os outros dois.
O Scala evoluiu de uma linguagem funcional pura conhecida como Funil e representa uma implementação de sala limpa de quase toda a sintaxe do Java, diferindo apenas onde é possível fazer uma melhoria clara ou em que comprometeria a natureza funcional da linguagem. Essas diferenças incluem objetos singleton em vez de métodos estáticos e inferência de tipo.
Muito disso foi baseado no trabalho anterior de Martin Odersky com o idioma Pizza . A integração OO / FP vai muito além de meros fechamentos e levou à descrição do idioma como pós-funcional.
Apesar disso, é o mais próximo do Java de várias maneiras. Principalmente devido a uma combinação de suporte de OO e tipagem estática, mas também devido a um objetivo explícito no design da linguagem de que ele deve se integrar muito bem ao Java.
Groovy aborda explicitamente duas das maiores críticas de Java por
Talvez seja sintaticamente mais próximo do Java, não oferecendo algumas das construções funcionais mais ricas que Clojure e Scala fornecem, mas ainda oferecendo uma melhoria evolutiva definitiva - especialmente para escrever programas de scripts.
O Groovy tem o suporte comercial mais forte dos três idiomas, principalmente via springsource.
Clojure é uma linguagem funcional da família LISP, também é digitada dinamicamente.
Recursos como o suporte ao STM oferecem o melhor suporte de simultaneidade pronto para uso, enquanto o Scala exige uma biblioteca de terceiros como a Akka para duplicar isso.
Sintaticamente, também é a mais distante das três linguagens do código Java típico.
Eu também tenho que divulgar que eu estou mais familiarizado com Scala :)
Eu nunca tive tempo de brincar com clojure. Mas para scala vs groovy, estas são as palavras de James Strachan - criador do Groovy
"Embora minha dica para a substituição a longo prazo de javac seja Scala. Estou muito impressionado com isso! Posso dizer honestamente se alguém me mostrou o livro Programming in Scala de Martin Odersky, Lex Spoon & Bill Venners em 2003. provavelmente nunca teria criado o Groovy ".
Você pode ler a história toda aqui
Eles podem ser diferenciados de onde eles vêm ou quais desenvolvedores estão direcionados principalmente.
Groovy é um pouco como a versão de script do Java. Os programadores Java de longa data se sentem em casa ao criar aplicativos ágeis apoiados por grandes arquiteturas. Groovy on Grails é, como o nome sugere, semelhante ao framework Rails. Para pessoas que não querem se preocupar com a verbosidade do Java o tempo todo.
Scala é uma linguagem de programação funcional e orientada a objetos, e os programadores Ruby ou Python podem se sentir mais próximos dessa. Ele emprega muitas boas idéias comuns encontradas nessas linguagens de programação.
Clojure é um dialeto da linguagem de programação Lisp, para que os desenvolvedores Lisp, Scheme ou Haskell possam se sentir em casa enquanto desenvolvem com essa linguagem.
Estou lendo o livro Pragmatic Programmers "Groovy Recipes: Greasing the wheels of Java" de Scott Davis, Copyright 2008 e impresso em abril do mesmo ano.
Está um pouco desatualizado, mas o livro deixa claro que o Groovy é literalmente uma extensão do Java. Posso escrever código Java que funciona exatamente como Java e renomear o arquivo * .groovy e funciona bem. Segundo o livro, o inverso é verdadeiro se eu incluir as bibliotecas necessárias. Até agora, a experimentação parece confirmar isso.
Obviamente, a sintaxe é completamente diferente (o Groovy é o mais próximo do Java), mas suponho que não seja isso que você está pedindo.
Se você estiver interessado em usá-los para criar scripts para um aplicativo Java, o Scala provavelmente não é uma boa escolha, pois não há uma maneira fácil de avaliá- lo a partir do Java, enquanto o Groovy é especialmente adequado para esse fim.
eval
necessário.