Jython y JRuby vs. Groovy (y Java) [cerrado]

8

Estoy muy interesado en Python para programar en JVM, y he trabajado mucho en Java y Ruby (no JRuby), y hasta cierto punto en Groovy.

¿Cuáles son los límites para la integración de Java-Jython y Java-JRuby en este momento? ¿Qué pasa con Groovy: hay algo que una clase de Java pueda hacer que una clase de Groovy no pueda hacer? ¿Y qué hay de la integración IDE (principalmente Eclipse, pero IntelliJ y Netbeans también son interesantes)?

No me interesa saber si Python, Ruby o Groovy son mejores / más concisos / lo que sea. Solo estoy interesado en qué tan bien están trabajando en la JVM y las herramientas (especialmente IDE) en este momento. Mi interés principal no está dentro de un servidor web, si eso importa.

Los ejemplos simples de cómo obtener un HelloWorld que extiende una clase Java personalizada e implementa una interfaz Java personalizada me serían muy útiles.

Dan Rosenstark
fuente

Respuestas:

7

No tengo experiencia en JRuby ni Groovy. Pero Jython:

  • Excelente integración con NetBeans. NetBeans puede ejecutar programas Python con Jython casi directamente, simplemente instale el complemento "Distribución Jython" y listo. Aparentemente, Eclipse también funciona. Consulte el capítulo Uso de Jython en un IDE en el Libro de Jython .

  • La integración Java-Jython es excelente. Llamar a Java desde Jython es súper fácil. Llamar a Jython desde Java no es tan sencillo (Java no fue diseñado con Jython en mente), pero sigue siendo bastante fácil. Principalmente he tenido suerte al crear una clase en Jython (extender una clase / interfaz Java) y luego crear instancias de esa clase en Java usando una fábrica de objetos. Vea Jython and Java Integration para ver cómo hacerlo.

Extender una clase Java en Jython funciona así:

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

La implementación de interfaces funciona de manera similar, solo importa la interfaz, "extiéndela" usando una definición de clase como class MyClass(MyInterface)e implementa lo que se necesita.

Mi única crítica contra Jython es que su rendimiento bruto no es muy bueno (y eso se debe principalmente a que utiliza una reflexión masiva para interactuar con Java). Pero entonces, el rendimiento sin formato suele ser bastante irrelevante para un lenguaje de secuencias de comandos.

Joonas Pulakka
fuente
Grandes cosas +1. ¿Alguna idea de cómo se compara el rendimiento de Jython con el rendimiento de Groovy (también basado en la reflexión masiva)?
Dan Rosenstark
No los he comparado personalmente, pero Google parece encontrar muchas opiniones: www.google.com/#q=jython+vs+groovy+performance
Joonas Pulakka
Google? ¿Quién es ese? Parece que jython es peor que cualquiera de los otros langs JVM no Java. Interesante.
Dan Rosenstark
La gente usa Python para aplicaciones de escritorio completas, por lo que el rendimiento es algo importante. ¿Está seguro de que Jython utiliza las API de reflexión de Java? (¿Está seguro de que no ha adoptado las técnicas que Groovy y JRuby tienen? Consulte blog.headius.com/2008/05/power-of-jvm.html y muchas otras publicaciones en el mismo blog para obtener más información sobre el rendimiento).
Ken Bloom
@Ken Bloom: Sí, no usaría Jython para aplicaciones de escritorio completas, porque es bastante lento (pero lo estoy usando incrustado dentro de aplicaciones Java completas). Estoy bastante seguro de que Jython usa principalmente API de reflexión, a diferencia de Groovy o JRuby, la base de código de Jython en realidad se origina en el último milenio, aunque pueden haber hecho algunas optimizaciones últimamente. Gracias por el interesante enlace del blog!
Joonas Pulakka
4

Durante el último año, he estado trabajando mucho con Groovy (y Java también, pero más Groovy).

Integración IDE: OK en Netbeans. Como Groovy es dinámico, no esperes el mismo nivel de soporte IDE como Java (Intelisense, Refactoring, etc.). Algunas personas dicen que InteliJ es aún mejor, pero a mi compañero de trabajo que lo revisó no le gustó. YMMV. La última vez que lo revisé, el soporte en Eclipse no fue tan bueno como en Netbeans.

Groovy se puede integrar o mezclar muy fácilmente con Java. La sintaxis es relativamente similar, por lo que el cambio mental no duele demasiado.

Especialmente cuando se usa con el marco de Grails, es divertido trabajar con Groovy (IMO). También me gusta la similitud con JavaScript; por lo tanto, un proyecto que mezcló Groovy en el backend con JavaScript en el cliente no requiere comprender dos idiomas completamente diferentes; En muchos casos, se siente más como dos dialectos del mismo idioma.

usuario281377
fuente
2

Con respecto a Groovy, una clase de Groovy ciertamente puede hacer todo lo que una clase de Java puede hacer, ya que Java válido es (casi) siempre válido Groovy.

Descubrí que Eclipse y NetBeans no están listos para el horario estelar en lo que respecta al desarrollo de Groovy / Grails. Pero IntelliJ es realmente bueno, si tienes el dinero.

Eric Wilson
fuente
Gracias por eso. Como dije en la pregunta, NO estoy interesado en la Web, por lo que IntelliJ sería gratis.
Dan Rosenstark
1
Java no siempre es válido Groovy (pero casi), como se detalla aquí (aunque algo anticuado): stackoverflow.com/questions/687601/…
Northover
agregado calificador importante.
Eric Wilson