Jython e JRuby vs. Groovy (e Java) [fechado]

8

Estou muito interessado em Python para programação na JVM e trabalhei muito em Java e Ruby (não JRuby) e, até certo ponto, em Groovy.

Quais são os limites para a integração Java-Jython e Java-JRuby agora? E o Groovy: existem coisas que uma classe Java pode fazer que uma classe Groovy não pode? E quanto à integração do IDE (principalmente Eclipse, mas IntelliJ e Netbeans também são interessantes)?

Não estou interessado em saber se Python, Ruby ou Groovy é melhor / mais conciso / o que for. Só estou interessado em saber como eles estão trabalhando na JVM e nas ferramentas (especialmente IDEs) no momento. Meu principal interesse não é dentro de um servidor web, se isso importa.

Exemplos simples de obter um HelloWorld que estende uma classe Java personalizada e implementa uma interface Java personalizada seriam muito úteis para mim.

Dan Rosenstark
fonte

Respostas:

7

Não tenho experiência com JRuby nem Groovy. Mas Jython:

  • Excelente integração com o NetBeans. O NetBeans pode executar programas Python com o Jython quase imediatamente, basta instalar o plug-in "Jython Distribution" e pronto. Aparentemente, o Eclipse também funciona. Consulte o capítulo Usando o Jython em um IDE no livro Jython .

  • A integração Java-Jython é excelente. Chamar Java a partir do Jython é super fácil. Chamar Jython a partir de Java não é tão simples (Java não foi projetado com Jython em mente), mas ainda é bastante fácil. Eu tive muita sorte em criar uma classe em Jython (estendendo uma classe / interface Java) e depois criar instâncias dessa classe em Java usando uma fábrica de objetos. Consulte Jython e Java Integration para obter instruções.

Estender uma classe Java no Jython funciona assim:

from javax.swing import JFrame, JButton

class MyFrame(JFrame):

    def __init__(self):
        self.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
        self.size = (300, 300)
        self.add(JButton('Click Me!', actionPerformed=self.print_something))
        self.visible = True

    def print_something(self, event):
        print 'Clicked!'

A implementação de interfaces funciona da mesma maneira, basta importar a interface, "estendê-la" usando uma definição de classe como class MyClass(MyInterface)e implementar o que é necessário.

Minha única crítica ao Jython é que seu desempenho bruto não é muito bom (e isso ocorre principalmente porque ele usa uma reflexão maciça para interagir com Java). Mas, então, o desempenho bruto geralmente é bastante irrelevante para uma linguagem de script.

Joonas Pulakka
fonte
Ótimas coisas +1. Alguma idéia de como o desempenho do Jython se compara ao desempenho do Groovy (também massivamente baseado em reflexão)?
Dan Rosenstark 22/10/10
Eu não tenho, pessoalmente, comparou-os, mas o Google parece encontrar muitas opiniões: www.google.com/#q=jython+vs+groovy+performance
Joonas Pulakka
Google? Quem é aquele? Parece que jython é pior do que qualquer um dos outros idiomas JVM não Java. Interessante.
Dan Rosenstark 22/10/10
As pessoas usam o Python para aplicativos de desktop completos, então o desempenho importa um pouco. Você tem certeza de que o Jython usa as APIs de reflexão do Java. (Você tem certeza de que não adotou as técnicas que Groovy e JRuby possuem? Consulte blog.headius.com/2008/05/power-of-jvm.html e muitas outras postagens no mesmo blog para obter mais discussões sobre desempenho.)
Ken Bloom
@ Ken Bloom: Sim, eu não usaria o Jython para aplicativos de desktop de pleno direito, porque é bastante lento (mas estou usando-o incorporado em aplicativos Java de pleno direito). Tenho certeza de que o Jython usa principalmente APIs de reflexão - ao contrário do Groovy ou JRuby, a base de código do Jython na verdade se origina do último milênio - embora elas possam ter feito algumas otimizações recentemente. Obrigado pelo interessante link do blog!
Joonas Pulakka
4

No último ano, tenho trabalhado muito com o Groovy (e Java também, mas mais com o Groovy).

Integração IDE: OK no Netbeans. Como o Groovy é dinâmico, não espere o mesmo nível de suporte a IDE como Java (Intelisense, Refatoração etc.). Algumas pessoas dizem que o InteliJ é ainda melhor, mas meu colega de trabalho que fez check-out não gostou. YMMV. Na última vez que verifiquei, o suporte no Eclipse não era tão bom quanto no Netbeans.

O Groovy pode ser facilmente integrado ou misturado com Java. A sintaxe é relativamente semelhante, portanto a mudança mental não dói muito.

Especialmente quando usado com a estrutura Grails, o Groovy é divertido de se trabalhar (IMO). Eu também gosto da semelhança com JavaScript; portanto, um projeto que mescla Groovy no back-end com JavaScript no cliente não requer a compreensão de dois idiomas completamente diferentes; em muitos casos, parece mais dois dialetos do mesmo idioma.

user281377
fonte
2

Com relação ao Groovy, uma classe Groovy certamente pode fazer tudo o que uma classe Java, pois Java válido é (quase) sempre Groovy válido.

Descobri que o Eclipse e o NetBeans ainda não estão prontos para o horário nobre no desenvolvimento do Groovy / Grails. Mas o IntelliJ é realmente bom, se você tiver o dinheiro.

Eric Wilson
fonte
Obrigado por isso. Como eu disse na pergunta, NÃO estou interessado em Web, então o IntelliJ seria gratuito.
Dan Rosenstark 22/10/10
1
O Java não é SEMPRE válido Groovy (mas quase), conforme detalhado aqui (Embora um pouco datado): stackoverflow.com/questions/687601/…
Northover
adicionado qualificador importante.
Eric Wilson