Jython e JRuby vs Groovy (e Java) [chiuso]

7

Sono molto interessato a Python per programmare sulla JVM, e ho lavorato molto su Java e Ruby (non su JRuby), e in una certa misura su Groovy.

Quali sono i limiti all'integrazione Java-Jython e Java-JRuby in questo momento? Che dire di Groovy: ci sono cose che una classe Java può fare che una classe di Groovy non può fare? E l'integrazione di IDE (soprattutto Eclipse, ma anche IntelliJ e Netbeans sono interessanti)?

Non mi interessa sapere se Python, Ruby o Groovy sono migliori / più concisi / qualunque cosa. Mi interessa solo sapere quanto stanno lavorando sulla JVM e sugli strumenti (specialmente gli IDE ) proprio adesso. Il mio interesse principale non è all'interno di un server web, se questo è importante.

Semplici esempi di ottenere un Hello World che estenda una classe Java personalizzata e implementa un'interfaccia Java personalizzata mi sarebbero molto utili.

    
posta Dan Rosenstark 22.10.2010 - 01:36
fonte

3 risposte

7

Non ho esperienza di JRuby e Groovy. Ma Jython:

  • Ottima integrazione con NetBeans. NetBeans può eseguire programmi Python con Jython quasi immediatamente, basta installare il plugin "Jython Distribution" e il gioco è fatto. Apparentemente funziona anche Eclipse. Vedi il capitolo Uso di Jython in un IDE nel Jython Book .

  • L'integrazione Java-Jython è eccellente. Chiamare Java da Jython è semplicissimo. Chiamare Jython da Java non è così semplice (Java non è stato progettato pensando a Jython), ma è comunque abbastanza facile. Ho avuto maggior fortuna con la creazione di una classe in Jython (estendendo una classe / interfaccia Java), e quindi creando istanze di quella classe in Java usando una fabbrica di oggetti. Vedi Integrazione Jython e Java per istruzioni.

L'estensione di una classe Java in Jython funziona così:

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!'

Le interfacce di implementazione funzionano in modo simile, basta importare l'interfaccia, "estenderla" usando una definizione di classe come class MyClass(MyInterface) e implementare ciò che è necessario.

La mia unica critica contro Jython è che le sue prestazioni non corrette sono molto buone (e questo è principalmente dovuto al fatto che utilizza una riflessione massiccia per interagire con Java). Tuttavia, le prestazioni non elaborate sono in genere piuttosto irrilevanti per un linguaggio di scripting.

    
risposta data 22.10.2010 - 08:52
fonte
4

Per l'ultimo anno, ho lavorato molto con Groovy (e anche con Java, ma più Groovy).

Integrazione IDE: OK in Netbeans. Poiché Groovy è dinamico, non aspettarti lo stesso livello di supporto IDE come Java (Intelisense, Refactoring, ecc.). Alcuni dicono che InteliJ è ancora meglio, ma il mio collega che ha controllato non è piaciuto. YMMV. L'ultima volta che ho controllato, il supporto in Eclipse non era buono come in Netbeans.

Groovy può essere facilmente integrato o mixato con Java. La sintassi è relativamente simile, quindi l'interruttore mentale non fa troppo male.

Soprattutto quando usato con il framework Grails, Groovy è divertente da lavorare con (IMO). Mi piace anche la somiglianza con JavaScript; quindi un progetto che ha mixato Groovy sul backend con JavaScript sul client non richiede la comprensione di due linguaggi completamente diversi; in molti casi, sembra più come due dialetti della stessa lingua.

    
risposta data 16.12.2010 - 16:06
fonte
1

Riguardo a Groovy, una classe Groovy può certamente fare tutto ciò che una classe Java può, poiché Java valido è (quasi) sempre valido Groovy.

Ho scoperto che Eclipse e NetBeans non sono ancora pronti per il prime time quando si tratta dello sviluppo di Groovy / Grails. Ma IntelliJ è davvero buono, se hai i soldi.

    
risposta data 22.10.2010 - 19:02
fonte

Leggi altre domande sui tag