2008-09-30 41 views

Trả lời

149

JRuby là triển khai ruby ​​chạy trên JVM trong khi ruby ​​của Matz là triển khai C.

Các tính năng chính cần lưu ý là:

  1. JRuby chạy trên Java VM và nó hoặc biên soạn hoặc giải thích xuống mã byte Java.
  2. JRuby có thể tích hợp với mã Java. Nếu bạn có các thư viện lớp java (.jar's), bạn có thể tham khảo và sử dụng chúng từ bên trong mã ruby ​​với JRuby. Theo một hướng khác, bạn cũng có thể gọi mã Jruby từ bên trong Java. JRuby cũng có thể sử dụng các khả năng của máy chủ ứng dụng và JVM.
  3. JRuby thường được lưu trữ trong các máy chủ ứng dụng Java như thủy tinh của Sun hoặc thậm chí máy chủ web Tomcat.
  4. Mặc dù bạn không thể sử dụng đá quý ruby ​​bản địa với JRuby có các triển khai jruby cho hầu hết các thư viện ruby ​​phổ biến.

Có sự khác biệt khác được liệt kê ở wiki JRuby:

+0

Cảm ơn bạn, câu trả lời đó chỉ là về mọi thứ tôi đang tìm kiếm.:) – epochwolf

+4

oh, và nó chạy chậm hơn một chút so với 1,9 – rogerdpack

+3

Ngoài ra, JRuby nên có chủ đề hệ điều hành gốc thực, như tôi đã nói ... –

3

chủ yếu là nó cũng hoạt động tương tự. trong jRoR bạn có thể truy cập những thứ bạn không có trong RoR. Thông thường chủ yếu là một mối quan tâm triển khai.

Tuy nhiên, nếu ứng dụng RoR của bạn sử dụng thư viện gốc không có tương đương chạy trên JVM, điều đó có thể là một nỗi đau. Tuy nhiên hầu hết các libs có một phiên bản không có sẵn (ít nhất là những cái phổ biến tôi đã đi qua).

7

Tôi có thể sai, nhưng tôi nghĩ bạn có thể đóng gói một JRuby on Rails ứng dụng theo cách bạn không thể làm với RoR bình thường - xem Mingle hoặc tương tự. Làm cho nó có thể bán mà không cần thả quần của bạn/mở komono.

Điều đó nói rằng, tôi không đủ quen thuộc với RoR bao bì, vì vậy không giữ tôi để nó :)

+1

Bạn hoàn toàn chính xác về điều này , mặc dù bạn sẽ cần một thứ như đá quý Rawr hoặc Roir để làm điều này hoàn toàn (lần trước tôi sử dụng Mingle, nó có các tập tin Ruby không bị xáo trộn ...). –

47

Tôi ngạc nhiên có một điều rất quan trọng còn thiếu trong tất cả các câu trả lời cho câu hỏi này, liên quan đến GIL .

Sự khác biệt chính bạn nên quan tâm đặc biệt. trong các ứng dụng web chẳng hạn như các ứng dụng được tạo bằng Rails là đồng thời thực sự ("Khóa thông dịch toàn cầu" miễn phí). Khi hai luồng đang chạy (ví dụ: phục vụ 2 yêu cầu người dùng) với JRuby, chúng có khả năng chạy đồng thời trong một quy trình duy nhất, trong khi MRI có GIL (ngay cả với các luồng gốc của 1.9) tránh việc thực thi mã Ruby song song. Đối với một nhà phát triển ứng dụng, đây là điều đầu tiên cần lưu ý khi xem xét JRuby, vì nó thực sự tỏa sáng với config.threadsafe! nhưng yêu cầu bạn phải đảm bảo mã của bạn (và mã đá quý) của bạn "an toàn".