Является ли Ruby кроссплатформенным, как Java? - PullRequest
8 голосов
/ 21 августа 2009

Вы можете скомпилировать приложение Java и запустить его на любом компьютере, где расположена виртуальная машина Java, независимо от базового оборудования.

Поскольку Ruby on Rails был построен на Ruby, я беспокоюсь о том, является ли создание программного обеспечения на Ruby в любой среде одинаковым или нет. Существуют версии Ruby для Windows, Linux и Mac, по крайней мере.

Итак, могли бы вы сделать то же самое с приложением Ruby и с приложением Java? Другими словами, насколько кроссплатформенный Ruby?

EDIT: Я имею в виду сам по себе Ruby, а не Ruby, запущенный на другой виртуальной машине, как в jRuby . Стоит ли ожидать больше кроссплатформенной разработки на Ruby, чем на Java, или они почти одинаковы?

Ответы [ 5 ]

13 голосов
/ 21 августа 2009

Ruby - это язык сценариев, и он интерпретируется во время выполнения интерпретатором Ruby. Код Ruby интерпретируется и преобразуется в язык машинного уровня, т.е. код сборки. Говоря о независимости платформы, вы можете запускать код ruby ​​на любой из платформ, таких как Linux, Windows или Mac, если у вас установлен зависимый от платформы Ruby Interpreter.

Где, как и в Java, он компилируется и преобразуется в промежуточный байтовый класс, и этот байтовый класс интерпретируется зависимой от платформы JVM (виртуальной машиной Java).

Таким образом, вы можете считать, что исходный файл Ruby является классом байтов, который можно запускать на любой платформе, при этом один байтовый класс различий уже скомпилирован, но исходный файл ruby ​​будет скомпилирован во время выполнения.

5 голосов
/ 03 сентября 2009

Ruby довольно тесно связывается с базовой платформой. Это особенно актуально, когда речь идет о механизмах процессов / потоков и различных формах IPC. Это более значимые проблемы, которые необходимо преодолеть, по сравнению с «тривиальными» в качестве разделителя каталогов и так далее. Я почти уверен, что нет паритета между, скажем, средой выполнения Windows Ruby и средой Linux Ruby.

В Java модель IPC / процесс / поток одинакова на всех платформах, где работает JVM.

3 голосов
/ 01 марта 2010

Пока вы не касаетесь аппаратных средств или потоков, Ruby должен работать в трех основных операционных системах. Для веб-разработки Ruby в основном будет работать везде одинаково. Для более продвинутых приложений нет, потому что он не предлагает абстракции JVM (что вы, вероятно, имеете в виду).

2 голосов
/ 21 апреля 2016

Java является кроссплатформенным. Ruby нет. Очень похоже на запоздалую мысль: «О, у нас есть пользователи Windows, давайте попробуем и заставить это работать».

В Java за годы интенсивного использования я испытал менее 10 кросс-платформенных проблем. Области, в которых это было, были областями, которые были бы хитрыми. Особенности системы / файловой системы.

В ruby ​​у меня возникали проблемы даже при выполнении первого урока по rails, как и у других (https://github.com/twbs/bootstrap-sass/issues/696). Я бы не стал рассматривать кроссплатформенность ruby. Платформа опирается на целый ряд зависимостей, которые в любое время один из них использует что-то определенное для платформы, все это ломается, т. е. вижу эту ошибку: ExecJS :: RuntimeError в Windows пытается следовать rubytutorial

Я также унаследовал крупный проект ruby, и он опирался на capistrano, webkit, bcrypt, и для этого требовался комплект сборки dev и собственные сборки. Это не просто работает. Посмотрите людей, имеющих проблемы здесь: https://github.com/codahale/bcrypt-ruby/issues/116 Забавно, в какой-то момент они предлагают, чтобы кто-то следил за японским постом:)

0 голосов
/ 21 августа 2009

Если ничего другого, вы можете запустить JRuby, интерпретатор Ruby, написанный на Java.

...