Odpowiedzi:
JRuby to implementacja Rubiego, która działa na JVM, podczas gdy Ruby Matza to implementacja w C.
Najważniejsze cechy, na które należy zwrócić uwagę:
Istnieją inne różnice, które są wymienione na wiki JRuby:
Dziwię się, że we wszystkich odpowiedziach na to pytanie brakuje kluczowej rzeczy, związanej z GIL .
Główna różnica, na którą należy zwrócić uwagę, zwł. w aplikacjach internetowych, takich jak te zbudowane w Railsach, jest prawdziwa współbieżność („Global Interpreter Lock” bezpłatnie). Kiedy dwa wątki są uruchomione (np. Obsługują 2 żądania użytkowników) z JRuby, są one w stanie działać jednocześnie w ramach jednego procesu, podczas gdy w MRI istnieje GIL (nawet z natywnymi wątkami 1.9), który unika wykonywania równoległego kodu Ruby.
Dla programisty aplikacji jest to pierwsza rzecz, o której należy pamiętać, rozważając JRuby, ponieważ naprawdę błyszczy, config.threadsafe!
ale wymaga upewnienia się, że Twój kod (i kod klejnotów) jest „naprawdę” bezpieczny dla wątków.
Może się mylę, ale myślę, że możesz spakować aplikację JRuby on Rails w sposób, którego nie możesz zrobić z normalnym RoR - spójrz na Mingle lub podobny. Umożliwia sprzedaż bez upuszczania spodni / otwierania komono.
To powiedziawszy, nie jestem wystarczająco zaznajomiony z opakowaniami RoR, więc nie zmuszaj mnie do tego :)
przeważnie powinno działać tak samo. w jRoR możesz uzyskać 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 korzysta z natywnych bibliotek, które nie mają odpowiednika działającego na 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ę spotkałem).
Jest tu już kilka świetnych odpowiedzi.
eebbesen omówił już podstawy, a kares (sam!) powiedział nam, że JRuby nie ma GIL.
Dodam z bardziej praktycznej perspektywy, uruchomiłem aplikacje na Ruby on Rails, a następnie migrowałem do JRuby ze względu na wydajność.
Istniały dwie główne korzyści związane z wydajnością: JRuby jest (lub był) po prostu szybszy niż Ruby w niektórych okolicznościach, a po drugie, brak wzmianek o Global Interpreter Lock Kares pozwolił mi na wielowątkowość, która, choć trudna, odblokowała rzędy wielkości korzyści w zakresie wydajności .
Bardzo duża aplikacja Ruby on Rails została przeportowana i uruchomiona w ciągu godziny, klejnoty i wszystko. Jedyną rzeczywistą usterką było to, że wyrażenia regularne w Javie są nieco inne niż w Rubim. To monumentalne osiągnięcie ze strony JRuby'ego.