2008-09-30 29 views

Odpowiedz

149

JRuby to implementacja ruby ​​działająca na JVM, natomiast Ruby Matza to implementacja języka C.

Najważniejsze cechy zwrócić uwagę to:

  1. jruby działa na Java VM i to zarówno skompilowane lub interpretować w dół do kodu bajtowego Javy.
  2. JRuby można zintegrować z kodem Java. Jeśli posiadasz biblioteki klas Java (.jar), możesz odwoływać się do nich i używać ich z poziomu kodu Ruby przy pomocy JRuby. W przeciwnym kierunku możesz również wywołać kod Jruby z poziomu Java. JRuby może również wykorzystywać możliwości JVM i serwera aplikacji.
  3. JRuby jest zazwyczaj hostowany na serwerach aplikacji Java, takich jak szkielet firmy Sun, a nawet serwer WWW Tomcat.
  4. Chociaż nie można używać rdzennych rubinowych klejnotów z JRuby, istnieją jorkie implementacje dla większości popularnych bibliotek ruby.

Są też inne różnice, które są wymienione na wiki jruby:

+0

Dziękuję, że odpowiada prawie wszystko, czego szukałem.:) – epochwolf

+4

oh, i działa nieco wolniej niż 1,9 – rogerdpack

+3

Ponadto, JRuby powinien mieć rzeczywiste natywne wątki systemu operacyjnego, jak mi powiedziano ... –

3

głównie powinno działać tak samo. w jRoR masz dostęp do rzeczy, których nie miałbyś w RoR. Zwykle jest to głównie problem związany z wdrożeniem.

Jeśli jednak twoja aplikacja RoR używa natywnych bibliotek, które nie mają odpowiednika, który działa na maszynie JVM, może to być uciążliwe. Jednak większość bibliotek ma dostępną wersję inną niż natywna (przynajmniej te popularne, z którymi się zetknąłem).

7

Może się mylę, ale myślę, że można zapakować do JRuby on Rails aplikacja w sposób, którego nie możesz zrobić z normalnym RoR - spójrz na Mingle lub podobne. Umożliwia sprzedaż bez zrzucania spodni/otwierania komono.

To powiedziawszy, nie jestem na tyle obeznany z opakowaniem RoR, więc nie trzymaj mnie do niego :)

+1

Masz absolutną rację w tym , chociaż będziesz potrzebował czegoś takiego jak klejnot Rawr lub Roir, aby to zrobić całkowicie (ostatnio użyłem Mingle, miałam niezakłócone pliki Ruby ...). –

47

Dziwię jest kluczowym Brakuje we wszystkich odpowiedzi na to pytanie, związane z GIL .

Najważniejszą różnicą, na którą powinieneś zwrócić uwagę. w aplikacjach internetowych, takich jak te utworzone za pomocą Railsów, jest true concurrency ("Global Interpreter Lock" za darmo). Gdy dwa wątki są uruchomione (na przykład obsługują 2 żądania użytkownika) z JRuby, mogą działać równocześnie w jednym procesie, podczas gdy w MRI istnieje GIL (nawet z natywnymi wątkami 1.9), który unika równoległego wykonywania kodu Ruby.

Dla deweloperów aplikacji jest to pierwsza rzecz, o której należy pamiętać biorąc pod uwagę JRuby, ponieważ naprawdę świeci się z config.threadsafe!, ale wymaga upewnienia się, że twój kod (i kod klejnotów) jest "prawdziwie" bezpieczny dla wątków.