Jython dan JRuby vs. Groovy (and Java) [ditutup]

8

Saya sangat tertarik pada Python untuk pemrograman pada JVM, dan saya telah banyak bekerja di Java dan Ruby (bukan JRuby), dan sampai batas tertentu di Groovy.

Apa batasan untuk integrasi Java-Jython dan Java-JRuby sekarang? Bagaimana dengan Groovy: adakah yang bisa dilakukan oleh kelas Java yang tidak bisa dilakukan oleh kelas Groovy? Dan bagaimana dengan integrasi IDE (kebanyakan Eclipse, tetapi IntelliJ dan Netbeans juga menarik)?

Saya tidak tertarik apakah Python, Ruby atau Groovy lebih baik / lebih ringkas / apa pun. Saya hanya tertarik pada seberapa baik mereka bekerja di JVM dan alat (terutama IDE) sekarang. Minat utama saya bukan di dalam server web, jika itu penting.

Contoh sederhana untuk mendapatkan HelloWorld yang memperluas kelas Java khusus dan mengimplementasikan antarmuka Java khusus akan sangat berguna bagi saya.

Dan Rosenstark
sumber

Jawaban:

7

Saya tidak punya pengalaman JRuby maupun Groovy. Tapi Jython:

  • Integrasi yang sangat baik dengan NetBeans. NetBeans dapat menjalankan program Python dengan Jython hampir langsung dari kotak, cukup instal plugin "Jython Distribution" dan Anda selesai. Rupanya Eclipse juga berfungsi. Lihat bab Menggunakan Jython dalam IDE di Buku Jython .

  • Integrasi Java-Jython sangat baik. Memanggil Java dari Jython sangat mudah. Memanggil Jython dari Java tidak semudah itu (Java tidak dirancang dengan Jython dalam pikiran), tetapi masih cukup mudah. Saya sebagian besar beruntung dengan membuat kelas di Jython (memperluas kelas Java / antarmuka), dan kemudian membuat contoh dari kelas itu di Jawa menggunakan objek pabrik. Lihat Jython dan Java Integration untuk caranya.

Memperluas kelas Java di Jython bekerja seperti ini:

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

Mengimplementasikan antarmuka bekerja dengan cara yang sama, hanya mengimpor antarmuka, "memperluas" menggunakan definisi kelas seperti class MyClass(MyInterface)dan mengimplementasikan apa yang diperlukan.

Satu-satunya kritik saya terhadap Jython adalah bahwa kinerja mentahnya tidak terlalu bagus (dan itu sebagian besar karena menggunakan refleksi masif untuk berinteraksi dengan Java). Tapi kemudian, kinerja mentah biasanya sangat tidak relevan untuk bahasa scripting.

Joonas Pulakka
sumber
+1 bagus. Adakah yang tahu bagaimana kinerja Jython dibandingkan dengan kinerja Groovy (juga berbasis refleksi besar-besaran)?
Dan Rosenstark
Saya belum membandingkan mereka secara pribadi, tetapi Google tampaknya menemukan banyak pendapat: www.google.com/#q=jython+vs+groovy+performance
Joonas Pulakka
Google? Siapa itu? Sepertinya jython lebih buruk daripada yang lain non-Java JVM langs. Menarik.
Dan Rosenstark
Orang-orang menggunakan Python untuk aplikasi desktop yang lengkap, sehingga kinerja agak penting. Apakah Anda yakin bahwa Jython menggunakan API refleksi Java. (Apakah Anda yakin belum mengadopsi teknik yang dimiliki Groovy dan JRuby? Lihat blog.headius.com/2008/05/power-of-jvm.html dan banyak pos lainnya di blog yang sama untuk diskusi kinerja yang lebih lanjut.)
Ken Bloom
@ Ken Bloom: Ya, saya tidak akan menggunakan Jython untuk aplikasi desktop yang lengkap, karena ini sangat lambat (tapi saya menggunakannya tertanam di dalam aplikasi Java yang lengkap). Saya cukup yakin bahwa Jython menggunakan sebagian besar API refleksi - tidak seperti Groovy atau JRuby, basis kode Jython sebenarnya berasal dari milenium terakhir - meskipun mereka mungkin telah membuat beberapa optimasi belakangan ini. Terima kasih atas tautan blog yang menarik!
Joonas Pulakka
4

Untuk tahun lalu, saya telah banyak bekerja dengan Groovy (dan Java juga, tetapi lebih banyak Groovy).

Integrasi IDE: OK di Netbeans. Karena Groovy dinamis, jangan berharap tingkat dukungan IDE yang sama seperti Java (Intelisense, Refactoring, dll.). Beberapa orang mengatakan bahwa InteliJ bahkan lebih baik, tetapi rekan kerja saya yang memeriksanya tidak menyukainya. YMMV. Terakhir kali saya memeriksa, dukungan di Eclipse tidak sebaik di Netbeans.

Groovy dapat dengan mudah diintegrasikan atau dicampur dengan Java. Sintaksnya relatif sama, sehingga pergantian mental tidak terlalu menyakitkan.

Terutama ketika digunakan dengan kerangka kerja Grails, Groovy menyenangkan untuk bekerja dengan (IMO). Saya juga suka kesamaan dengan JavaScript; Oleh karena itu proyek yang menggabungkan Groovy di backend dengan JavaScript pada klien tidak memerlukan pemahaman dua bahasa yang sama sekali berbeda; dalam banyak kasus, rasanya lebih seperti dua dialek dengan bahasa yang sama.

pengguna281377
sumber
2

Mengenai Groovy, kelas Groovy tentu saja dapat melakukan semua yang dapat dilakukan oleh kelas Java, karena Java yang valid (hampir) selalu valid Groovy.

Saya telah menemukan bahwa Eclipse dan NetBeans tidak cukup siap untuk prime-time ketika datang ke pengembangan Groovy / Grails. Tapi IntelliJ sangat bagus, jika Anda punya uang.

Eric Wilson
sumber
Terima kasih untuk itu. Seperti yang saya katakan dalam pertanyaan, Saya TIDAK tertarik dengan Web, jadi IntelliJ akan bebas.
Dan Rosenstark
1
Java tidak selalu SELALU valid Groovy (tapi hampir), seperti yang dijelaskan di sini (Meskipun agak tanggal): stackoverflow.com/questions/687601/…
Northover
menambahkan kualifikasi penting.
Eric Wilson