Ответы:
JRuby - это реализация Ruby, которая работает на JVM, а Matz's Ruby - это реализация на C.
Ключевые особенности, на которые следует обратить внимание:
Есть и другие отличия, которые перечислены на вики JRuby:
Я удивлен, что во всех ответах на этот вопрос отсутствует важная вещь, связанная с GIL .
Основное отличие, которое вы должны заботиться о ESP. в веб-приложениях, например, построенных с помощью Rails, настоящий параллелизм («Global Interpreter Lock» бесплатный). Когда два потока работают (например, обслуживают 2 пользовательских запроса) с JRuby, они могут работать одновременно в одном процессе, тогда как в MRI есть GIL (даже с собственными потоками 1.9), который избегает параллельного выполнения кода Ruby.
Для разработчика приложений это первое, что нужно иметь в виду при рассмотрении JRuby, поскольку он действительно хорош, config.threadsafe!
но требует от вас, чтобы ваш код (и ваш гем-код) были «действительно» поточно-ориентированными.
Я могу ошибаться, но я думаю, что вы можете упаковать приложение JRuby on Rails так, как это невозможно сделать с обычным RoR - посмотрите на Mingle или подобное. Позволяет продавать без опускания штанов / открытия комоно.
Тем не менее, я недостаточно знаком с упаковкой RoR, так что не держите меня за это :)
в основном это должно работать так же. в jRoR вы можете получить доступ к тому, чего не было бы в RoR. Обычно это в основном проблема развертывания.
Однако, если ваше приложение RoR использует собственные библиотеки, которые не имеют эквивалента, который работает на JVM, это может быть проблемой. Однако большинство библиотек имеют не родную версию (по крайней мере, популярные, с которыми я сталкивался).
Здесь уже есть несколько отличных ответов.
Эббесен уже охватил основы, и Карес (сам!) сказал нам, что у JRuby нет GIL.
Добавлю с практической точки зрения, я запустил приложения на Ruby on Rails, а затем мигрировал на JRuby по соображениям производительности.
Было два основных выигрыша в производительности: JRuby (или был) просто быстрее, чем Ruby, в некоторых обстоятельствах, и два, отсутствие упоминания Кареса о Глобальной блокировке интерпретатора позволило мне выполнять многопоточность, которая, хотя и сложная, открыла преимущества производительности на несколько порядков. ,
Очень большое приложение Ruby on Rails портировано и запущено за час, гемы и все такое. Единственный фактический сбой заключался в том, что регулярные выражения Java немного отличаются от регулярных в Ruby. Это монументальное достижение со стороны JRuby.