Различия между виртуальными машинами Ruby - PullRequest
3 голосов
/ 25 сентября 2008

Каковы преимущества / недостатки основных виртуальных машин Ruby (такие как функции, совместимость, производительность и особенности)? Я знаю, что есть также некоторые дополнительные функции, такие как возможность использования интерфейсов Java через JRuby. Это также было бы полезно отметить. Есть ли у какой-либо виртуальной машины явное преимущество на данном этапе и в каких контекстах?

Ответы [ 2 ]

6 голосов
/ 27 сентября 2008

Вот немного информации, которую я нашел на основных виртуальных машинах: Ruby MRI , Ruby 1.9 (YARV) , JRuby , XRuby , Рубиниус и IronRuby

В прошлом году был тест производительности , в котором сравнивались основные виртуальные машины, но с тем, как быстро развивалась разработка виртуальных машин, это, вероятно, не столь актуально сегодня. Ruby 1.9 был, как правило, самым быстрым, и, по-моему, пока имеет преимущество над JRuby.

В настоящее время четыре виртуальные машины способны работать с Ruby on Rails: Ruby MRI, Ruby 1.9, JRuby и Rubinius.

XRuby работает на JVM, как и JRuby, и компилирует исходные файлы Ruby в Java .class.

IronRuby работает на .NET, используя их DLR, и позволяет интегрировать Ruby с библиотеками .NET и инфраструктурой. Он еще не может запустить Ruby on Rails.

Существует также виртуальная машина с именем HotRuby , которая позволяет запускать исходный код Ruby в браузере или во Flash.

6 голосов
/ 25 сентября 2008

Я использовал оба Matz's Ruby и JRuby, и они решают разные задачи. Если вы разрабатываете прямое приложение на Ruby или Rails, то этого, вероятно, будет достаточно, но если есть несколько мощных библиотек Java, которые могут помочь, то JRuby может быть полезен.

Я не сделал ничего слишком сложного, но JRuby, похоже, довольно хорошо соответствовал, по крайней мере, в том, что касается реализации основных функций языка (я пока не сталкивался с какими-либо различиями, но они могут существовать).

Один небольшой анекдот, которым я хотел бы поделиться ... Я писал сценарий для взаимодействия с базой данных DB2. Поддержка DB2 в Ruby ужасна ... вам нужно установить всю экспресс-версию DB2, просто чтобы иметь возможность скомпилировать драйверы Ruby, что мне даже не помогло. Я сыт по горло и переключился на JRuby, используя JDBC и несколько маленьких jar-файлов DB2 JDBC. Это решило мою проблему отлично. Точка? Что ж, если получение доступа к некоторым библиотекам Java упростит проблему под рукой, обязательно сделайте это!

Надеюсь, это было полезно! Извините, у меня нет опыта работы с другими виртуальными машинами ....


Еще одно предостережение, о котором я читал, но я не слишком хорошо знаю детали ... JRuby, я думаю, поддерживает потоки через потоки Java вместо "зеленых" потоков, поддерживаемых в реализации Matz ... так что если вы Если вам нужна многопоточность в многоядерных системах, JRuby, вероятно, будет вам лучше ... если вы не хотите выполнять многопоточность в C.

...