Jython và JRuby so với Groovy (và Java) [đã đóng]


8

Tôi rất quan tâm đến Python để lập trình trên JVM và tôi đã làm việc với Java và Ruby (không phải JRuby) rất nhiều và ở một mức độ nhất định trong Groovy.

Các giới hạn đối với tích hợp Java-Jython và Java-JRuby ngay bây giờ là gì? Thế còn Groovy: có bất kỳ điều gì mà một lớp Java có thể làm mà một lớp Groovy không thể làm được không? Và những gì về tích hợp IDE (chủ yếu là Eclipse, nhưng IntelliJ và Netbeans cũng thú vị)?

Tôi không quan tâm đến việc Python, Ruby hay Groovy tốt hơn / ngắn gọn hơn / bất cứ điều gì. Tôi chỉ quan tâm đến việc họ đang làm việc tốt như thế nào trong JVM và các công cụ (đặc biệt là IDE) ngay bây giờ. Mối quan tâm chính của tôi không nằm trong máy chủ web, nếu điều đó quan trọng.

Các ví dụ đơn giản về việc nhận HelloWorld mở rộng lớp Java tùy chỉnh và triển khai giao diện Java tùy chỉnh sẽ rất hữu ích với tôi.

Câu trả lời:


7

Tôi không có kinh nghiệm về JRuby cũng như Groovy. Nhưng Jython:

  • Tích hợp tuyệt vời với NetBeans. NetBeans có thể chạy các chương trình Python với Jython gần như ngay lập tức, chỉ cần cài đặt plugin "Phân phối Jython" và bạn đã hoàn tất. Rõ ràng Eclipse cũng hoạt động tốt. Xem chương Sử dụng Jython trong IDE trong Sách Jython .

  • Tích hợp Java-Jython là tuyệt vời. Gọi Java từ Jython là siêu dễ dàng. Gọi Jython từ Java không hoàn toàn đơn giản (Java không được thiết kế với Jython), nhưng vẫn khá dễ dàng. Tôi hầu như đã gặp may mắn khi tạo một lớp trong Jython (mở rộng một lớp / giao diện Java) và sau đó tạo các thể hiện của lớp đó trong Java bằng cách sử dụng một nhà máy đối tượng. Xem Tích hợp Jython và Java để biết cách thực hiện.

Mở rộng một lớp Java trong Jython hoạt động như thế này:

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

Việc thực hiện các giao diện hoạt động tương tự nhau, chỉ cần nhập giao diện, "mở rộng" nó bằng cách sử dụng một định nghĩa lớp như class MyClass(MyInterface)và thực hiện những gì cần thiết.

Sự chỉ trích duy nhất của tôi đối với Jython là hiệu năng thô của nó không tốt lắm (và điều đó chủ yếu là vì nó sử dụng sự phản chiếu lớn để tương tác với Java). Nhưng sau đó, hiệu suất thô thường không liên quan đến ngôn ngữ kịch bản.


Công cụ tuyệt vời +1. Bạn có biết hiệu suất của Jython so với hiệu suất của Groovy (cũng dựa trên phản xạ ồ ạt) không?
Dan Rosenstark

Cá nhân tôi chưa so sánh chúng, nhưng Google dường như tìm thấy rất nhiều ý kiến: www.google.com/#q=jython+vs+groovy+performance
Joonas Pulakka

Google? Ai đó? Có vẻ như jython tệ hơn bất kỳ các lang JVM không phải Java nào khác. Hấp dẫn.
Dan Rosenstark

Mọi người sử dụng Python cho các ứng dụng máy tính để bàn đầy đủ, do đó hiệu suất có phần quan trọng. Bạn có chắc chắn rằng Jython sử dụng API phản chiếu Java. (Bạn có chắc chắn rằng nó đã không áp dụng các kỹ thuật mà Groovy và JRuby có? Xem blog.headius.com/2008/05/power-of-jvm.htmlnhiều bài đăng khác trên cùng một blog để thảo luận thêm về hiệu suất.)
Ken Bloom

@Ken Bloom: Có, tôi sẽ không sử dụng Jython cho các ứng dụng máy tính để bàn đầy đủ, vì nó khá chậm (nhưng tôi đang sử dụng nó được nhúng trong các ứng dụng Java chính thức). Tôi khá chắc chắn rằng Jython sử dụng hầu hết các API phản chiếu - không giống như Groovy hay JRuby, cơ sở mã của Jython thực sự bắt nguồn từ thiên niên kỷ trước - mặc dù gần đây chúng có thể đã thực hiện một số tối ưu hóa. Cảm ơn các liên kết blog thú vị!
Joonas Pulakka

4

Trong năm ngoái, tôi đã làm việc rất nhiều với Groovy (và cả Java nữa, nhưng nhiều Groovy hơn).

Tích hợp IDE: OK trong Netbeans. Vì Groovy rất năng động, không mong đợi cùng mức hỗ trợ IDE như Java (Intelisense, Tái cấu trúc, v.v.). Một số người nói rằng InteliJ thậm chí còn tốt hơn, nhưng đồng nghiệp của tôi, người đã kiểm tra nó không thích nó. YMMV. Lần trước tôi đã kiểm tra, hỗ trợ trong Eclipse không tốt như trong Netbeans.

Groovy có thể rất dễ dàng tích hợp hoặc trộn lẫn với Java. Cú pháp tương đối giống nhau, do đó, chuyển đổi tinh thần không làm tổn thương quá nhiều.

Đặc biệt khi được sử dụng với khung Grails, Groovy rất vui khi làm việc với (IMO). Tôi cũng thích sự tương đồng với JavaScript; do đó, một dự án trộn Groovy trên phần phụ trợ với JavaScript trên máy khách không yêu cầu hiểu hai ngôn ngữ hoàn toàn khác nhau; trong nhiều trường hợp, nó cảm thấy giống như hai phương ngữ của cùng một ngôn ngữ.


2

Về Groovy, một lớp Groovy chắc chắn có thể làm mọi thứ mà một lớp Java có thể, vì Java hợp lệ là (hầu như) luôn luôn hợp lệ Groovy.

Tôi đã thấy rằng Eclipse và NetBeans chưa sẵn sàng cho thời kỳ chính khi phát triển Groovy / Grails. Nhưng IntelliJ thực sự tốt, nếu bạn có tiền.


Cảm ơn vì điều đó. Như tôi đã nói trong câu hỏi, tôi KHÔNG quan tâm đến Web, vì vậy IntelliJ sẽ miễn phí.
Dan Rosenstark

1
Java không hoàn toàn LUÔN LUÔN hợp lệ (nhưng gần như), như được nêu chi tiết tại đây (Mặc dù có phần ngày): stackoverflow.com/questions/687601/
trộm

bổ sung vòng loại quan trọng.
Eric Wilson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.