JRuby - JRuby

JRuby
JRuby logo.png
Разработчики)Чарльз Оливер Наттер, Томас Энебо, Ола Бини и Ник Зигер
изначальный выпуск2001; 19 лет назад (2001)
Стабильный выпуск
9.2.13.0 / 3 августа 2020 г.; 4 месяца назад (2020-08-03)[1]
Репозиторий Отредактируйте это в Викиданных
Написано вРубин и Ява
Операционная системаКроссплатформенность
ПлатформаВиртуальная машина Java
ТипИнтерпретатор языка программирования Ruby
ЛицензияEPL /GPL /LGPL
Интернет сайтwww.jruby.org Отредактируйте это в Викиданных

JRuby это реализация Язык программирования Ruby на вершине Виртуальная машина Java, написано в основном на Ява. это бесплатно программное обеспечение выпущен под трехходовой EPL /GPL /LGPL лицензия. JRuby тесно интегрирован с Ява чтобы разрешить встраивание интерпретатора в любое приложение Java с полным двусторонним доступом между Java и кодом Ruby (аналогично Jython для языка Python).

Ведущие разработчики JRuby Чарльз Оливер Наттер и Томас Энебо, со многими нынешними и прошлыми участниками, включая Ола Бини и Ник Зигер. В сентябре 2006 г. Sun Microsystems нанял Энебо и Наттера для работы над JRuby на постоянной основе.[2] В июне 2007 г. ThoughtWorks нанял Ола Бини для работы над Ruby и JRuby.[3]

В июле 2009 года разработчики JRuby покинули Sun, чтобы продолжить разработку JRuby на Машинный двор.[4] В мае 2012 года Наттер и Энебо покинули Engine Yard, чтобы работать над JRuby в Красная шляпа.[5]

История

JRuby был первоначально создан Яном Арне Петерсеном в 2001 году. В то время и в течение нескольких последующих лет код был прямым портом Ruby 1.6. C код. С выпуском Ruby 1.8.6 начались попытки обновить JRuby до 1.8.6 функций и семантики. С 2001 г. проекту помогли несколько участников, в результате чего в настоящее время (2012 г.) основная команда из шести человек.

JRuby 1.1 добавлен Своевременная компиляция и Опережающая компиляция Mode в JRuby и в большинстве случаев уже был быстрее, чем текущая эталонная реализация Ruby 1.8.7.[6]

Пакеты JRuby доступны для большинства платформ; Fedora 9 был одним из первых, кто включил его в качестве стандартного пакета в JRuby 1.1.1.[7][8]

В июле 2009 года основные разработчики JRuby из Sun Microsystems, Чарльз Оливер Наттер, Томас Энебо и Ник Зигер, присоединился Машинный двор продолжить разработку JRuby.[4][9] В мае 2012 года Наттер и Энебо покинули Engine Yard, чтобы работать над JRuby в Красная шляпа.[5]

JRuby поддерживает совместимость с Рубиновый МРТ версии с 1.6 по 1.9.3. JRuby 1.0 поддерживает Ruby 1.8.6, а JRuby 1.4.0 обновляет эту совместимость до Ruby 1.8.7. JRuby 1.6.0 добавил одновременную поддержку Ruby 1.9.2, при этом JRuby 1.7.0 делает Ruby 1.9.3 режимом выполнения по умолчанию (совместимость с Ruby 1.8.7 доступна через флаг командной строки). В JRuby 9.0.0.0 добавлена ​​поддержка Ruby 2.2.

Текущая версия JRuby (9.2.11.0) поддерживает Ruby 2.5.7. Предстоящая версия 9.3 будет поддерживать Ruby 2.6.[10]

Рубин на рельсах

JRuby смог запустить Рубин на рельсах веб-фреймворк с версии 0.9 (май 2006 г.),[11][12] со способностью выполнять RubyGems и WEBrick. С тех пор, как Sun наняла двух ведущих разработчиков, совместимость и скорость Rails значительно улучшились. JRuby версии 1.0 успешно прошел почти все собственные тестовые примеры Rails.[13] С тех пор разработчики начали использовать JRuby для приложений Rails в производственных средах.[14]

Совместная работа с несколькими виртуальными машинами

27 февраля 2008 г. Sun Microsystems и Токийский университет объявила о совместном исследовательском проекте по созданию виртуальной машины, способной выполнять более одного Рубин или приложение JRuby на одном интерпретаторе.[15]

Динамический вызов на виртуальных машинах Java

JSR 292 (Поддержка динамически типизированных языков на платформе JavaTM)[16] предлагает:

  • добавление нового invokedynamic инструкция на уровне JVM, позволяющая вызывать метод с использованием динамических проверка типа,
  • динамически меняющиеся классы и методы во время выполнения.

Проект Sun с открытым исходным кодом Многоязычная виртуальная машина стремится создать прототип этого JSR.[17] Первый рабочий прототип, разработанный как заплатка на OpenJDK, был объявлен и стал доступен в конце августа 2008 года.[18][19]

Команда JRuby внедрила динамический вызов в свою кодовую базу. Динамический вызов изначально поставлялся с выпуском 1.1.5 в примитивной форме.[20] Версия 1.7.0 включила его по умолчанию в сборках Java 8.[21]

История выпуска

В этой таблице представлены только выпуски, в которых представлены важные шаги в истории JRuby, за исключением версий, в которых в основном исправлены ошибки и улучшена производительность. Улучшения производительности также не показаны в таблице ниже, поскольку каждый выпуск обычно вносил такие улучшения.

РелизДата выходаОсобенности
0.92006-08-01Поддержка Rails[11]
1.12008-03-28Работает лучше, чем Ruby MRI 1.8.7[6]
Режим AOT и JIT режим[22]
1.1.42008-08-28Отредактированный уровень интеграции Java
Начало поддержки Ruby 1.9
FFI подсистема вызова C библиотеки[23]
1.2.0[24]2009-03-16JIT компилятор для Ruby 1.9
Предварительный Android поддержка со стороны Рубото проект.
1.3.0[25]2009-06-03JRuby лучше работает в ограниченных средах, например GAE / J
1.4.0[26][27]2009-11-02Windows Native Launcher и установщик Windows
Поддержка Ruby 1.8.7
1.5.0[28]2010-05-12Родной лаунчер для UNIX на базе платформ
Поддержка Ant и интеграция с Rake-Ant
Обновления стандартной библиотеки, RubyGems, и RSpec
1.6.0[29]2011-03-15Совместимость с языком Ruby 1.9.2 и API
Встроенный профайлер
Экспериментальная поддержка расширений C на основе Ruby C API
1.7.0[21]2012-10-22Язык Ruby 1.9.3 является режимом по умолчанию
Поддержка для invokedynamic
1.7.4[30]2013-05-16Экспериментальная поддержка Ruby 2.0 (большинство функций и stdlib включены)
9.0.0.0[31]2015-07-22Поддержка Ruby 2.x
Новая оптимизация времени выполнения
Новый POSIX-совместимый ввод-вывод и процесс

Полностью перенесенная логика кодирования / транскодирования из MRI

9.1.7.0[32]2017-01-11Исправлена ​​серьезная ошибка LinkageError при использовании нескольких потоков

Исправлено несколько проблем с аргументом ключевого слова

Исправлено несколько проблем с парсером

Уменьшение использования памяти JIT

Обновите Psych до 2.2.2

Обновите jruby-openssl до 0.9.18

72 ошибки исправлено

9.2.0.0[33]2018-05-24Поддержка языка Ruby 2.5
9.2.9.0[34]2019-10-30Поддержка языка Ruby 2.5.7

Дизайн

С начала 2006 года текущая основная команда JRuby стремилась вывести JRuby за рамки простого порта C, чтобы поддерживать лучшую производительность и способствовать конечной компиляции в Байт-код Java. Для поддержки этой цели команда поставила амбициозную цель: иметь возможность запускать Ruby on Rails без изменений с использованием JRuby. В процессе достижения этой цели набор тестов JRuby расширился до такой степени, что команда приобрела уверенность в «правильности» JRuby. В результате к концу 2006 и началу 2007 года они начали совершать гораздо более сложные изменения дизайна и рефакторинга основных подсистем JRuby.

JRuby разработан для работы в качестве виртуальной машины смешанного режима для Ruby, где код может быть либо интерпретирован напрямую, точно во время компиляции во время выполнения в байт-код Java, либо заблаговременно скомпилирован в байт-код Java перед выполнением. До октября 2007 г. только интерпретированный режим поддерживает все конструкции Ruby, но полный компилятор AOT / JIT доступен начиная с версии 1.1.[22] Конструкция компилятора позволяет интерпретируемому и скомпилированному коду работать параллельно, а также декомпиляция для повторной оптимизации и вывода сгенерированного байт-кода в виде файлов классов Java.

Поддержка фреймворков

JRuby имеет встроенную поддержку Rails, RSpec, Грабли и RubyGems. Он включает подсистему FFI, позволяющую использовать библиотеки C, объединенные в виде гемов. Это также позволяет запускать Интерактивная Ruby Shell (irb) как Ruby MRI.

В Пакет Netbeans Ruby, доступный в NetBeans 6, позволяет разрабатывать IDE с использованием Ruby и JRuby, а также Ruby on Rails для двух реализаций Ruby.[35][36]Он больше не включен в NetBeans 7.0 и новее.

Программирование

Ruby встречает Java

JRuby похож на стандартный интерпретатор Ruby, за исключением того, что он написан на Ява. JRuby имеет некоторые из тех же концепций, в том числе объектно-ориентированного программирования, и динамическая типизация как Руби. Ключевое отличие состоит в том, что JRuby тесно интегрирован с Java и может вызываться непосредственно из программ Java.[37] Java играет важную роль в разработке веб-приложений.

JRuby вызывает Java

Одной из мощных функций JRuby является его способность вызывать классы Платформа Java. Для этого необходимо сначала загрузить поддержку Java JRuby, вызвав «require 'java'». В следующем примере создается Java JFrame с JLabel:

требовать 'Ява'Рамка = javax.качать.JFrame.новыйРамка.getContentPane.Добавить javax.качать.JLabel.новый('Привет, мир!')Рамка.setDefaultCloseOperation javax.качать.JFrame::EXIT_ON_CLOSEРамка.пакетРамка.set_visible истинный

JRuby также позволяет пользователю вызывать Java-код, используя более Ruby-подобный имя метода подчеркивания и обратиться к JavaBean свойства как атрибуты:[сомнительный ]

Рамка.content_pane.Добавить меткаРамка.видимый = истинный

Вызов JRuby из Java

JRuby можно так же легко вызвать из Java, используя либо JSR 223[38] Сценарии для Java 6 или Сценарии Apache Bean рамки.

// Пример использования сценариев JSR 233 для Java 6ScriptEngineManager мгр = новый ScriptEngineManager();ScriptEngine rbEngine = мгр.getEngineByExtension("рб");пытаться {    rbEngine.оценка("помещает" Hello World! "");} ловить (ScriptException бывший) {    бывший.printStackTrace();}

Спектакль

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

JRuby обладает значительным архитектурным преимуществом, позволяющим использовать потоки JVM без ограничений глобальная блокировка интерпретатора (аналогично Рубиниус ), поэтому достигается полный параллелизм внутри процесса, чего Ruby MRI не может достичь, несмотря на использование потоков ОС.

В реальном Дворняга веб сервер приложение, протестированное в 2007 году, после создания виртуальной машины Java производительность JRuby лучше, чем Ruby MRI 1.8.[39]

В тесте 2007 года реализации Ruby JRuby был быстрее, чем Ruby MRI 1.8 в некоторых тестах, но YARV превзошел их обоих.[40]

По состоянию на апрель 2014 г. Игра "Тесты компьютерного языка", JRuby 1.7.4 обычно имеет ту же производительность, что и Ruby MRI 2.1.0, но использует больше памяти.[41][42]

Смотрите также

Рекомендации

  1. ^ "Выпущен JRuby 9.2.13.0". Получено 2020-08-11.
  2. ^ Джеки (07.09.2006). «Sun приветствует разработчиков JRuby». На записи. Архивировано из оригинал на 2012-08-29. Получено 2013-11-07.
  3. ^ Ола Бини. "ThoughtWorks". На записи.
  4. ^ а б "Команда Sun's JRuby прыгает с корабля на моторную верфь". PCWorld. 2009-07-28. Получено 2012-06-02.
  5. ^ а б "Red Hat заманивает в паре JRuby power". Реестр. 2012-05-23. Получено 2012-06-02.
  6. ^ а б Канжиано, Антонио (2007-03-12). "Великая Рубиновая перестрелка". Получено 2008-02-01.
  7. ^ Наттер, Чарльз (2008-04-25). «JRuby 1.1.1 в RedHat Fedora». Получено 2008-04-26.
  8. ^ "джруби". fedoraproject.org. Получено 2008-04-26.[постоянная мертвая ссылка ]
  9. ^ Наттер, Чарльз (2009-07-28). "Будущее Дж. Руби на Моторном заводе". Архивировано из оригинал в 2009-07-31. Получено 2009-07-28.
  10. ^ «Поддержка Ruby 2.6». Команда JRuby. Получено 2020-04-09.
  11. ^ а б "Поддержка Rails". Команда JRuby. Получено 2008-02-17.
  12. ^ Наттер, Чарльз (2008-08-24). «С нуля за 15 минут». Получено 2008-08-27.
  13. ^ 98,6% из 2807 тестовых примеров, специфичных для Rails, выполняются успешно; видеть Выпущен JRuby 0.9.8 В архиве 22 мая 2015 г. Wayback Machine
  14. ^ "Истории успеха". JRuby Wiki на GitHub. 2011-01-05. Получено 2011-03-16.
  15. ^ «Токийский университет и Sun Microsystems начинают совместные исследовательские проекты в области высокопроизводительных вычислений и языков программирования на базе Интернета». Sun Microsystems. 2008-02-27. Получено 2008-02-28.
  16. ^ см. JSR 292
  17. ^ «Суб-проекты и исследования». Sun Microsystems. 2007. Получено 2008-02-06.
  18. ^ Роуз, Джон (2008-08-26). «С Международным днем ​​Invokedynamic!». Получено 2008-09-03.
  19. ^ Лоример, Р.Дж. (2008-09-01). «Динамический вызов выполняется в OpenJDK». infoq.com. Получено 2008-09-03.
  20. ^ Наттер, Чарльз (11 сентября 2008 г.). "Первый вкус InvokeDynamic". Получено 2008-09-13. Мне удалось успешно подключить InvokeDynamic напрямую к процессу отправки JRuby! Какой азарт! Код уже находится в багажнике JRuby и будет поставляться с JRuby 1.1.5 (хотя, очевидно, он будет отключен на JVM без InvokeDynamic).
  21. ^ а б "Выпущен JRuby 1.7.0". Команда JRuby. 2012-10-22. Получено 2011-10-23.
  22. ^ а б Наттер, Чарльз (27 сентября 2007 г.). «Компилятор завершен». Получено 2007-10-12.
  23. ^ Энебо, Том (2008-08-28). "Выпущен JRuby 1.1.4". Получено 2009-02-25.[постоянная мертвая ссылка ]
  24. ^ Энебо, Том (16 марта 2009 г.). "Выпущен JRuby 1.2.0". Команда JRuby. Архивировано из оригинал на 2009-03-19. Получено 2009-03-17.
  25. ^ Энебо, Том (2009-06-03). "Выпущен JRuby 1.3.0". Команда JRuby. Архивировано из оригинал на 2009-06-12. Получено 2009-06-03.
  26. ^ "Выпущен JRuby 1.4.0". Команда JRuby. 2009-11-02. Получено 2009-11-03.
  27. ^ "Выпущен JRuby 1.4.0". adtmag.com. 2009-11-10. Получено 2009-11-21.
  28. ^ "Выпущен JRuby 1.5.0". Команда JRuby. 2010-05-12. Получено 2010-05-12.
  29. ^ "Выпущен JRuby 1.6.0". Команда JRuby. 2011-03-15. Получено 2011-03-15.
  30. ^ "Выпущен JRuby 1.7.4". Команда JRuby. 2013-05-16. Получено 2013-05-19.
  31. ^ "Выпущен JRuby 9.0.0.0". Команда JRuby. 2015-07-22. Получено 2015-07-25.
  32. ^ "Выпущен JRuby 9.1.7.0 - JRuby.org". jruby.org. Получено 2017-01-13.
  33. ^ "Выпущен JRuby 9.2.0.0". Получено 2018-05-27.
  34. ^ "Выпущен JRuby 9.2.9.0". Получено 2019-11-05.
  35. ^ «Поддержка Ruby и JRuby доступна в IDE NetBeans». netbeans.org. 2007-03-06. Получено 2009-07-04.
  36. ^ «Ruby делает платформу NetBeans ярче». infoworld.com. 2007-03-01. Получено 2008-07-04.
  37. ^ Фокс, Джошуа (17 июля 2006 г.). «Ruby для мира Java». JavaWorld. Получено 2020-07-26.
  38. ^ JSR 223: сценарий для запроса спецификации платформы Java
  39. ^ Зигер, Ник (2007-10-25). "JRuby on Rails: достаточно быстро". Получено 2007-10-28.
  40. ^ Канжиано, Антонио (2007-12-03). "Великая Рубиновая перестрелка". Получено 2014-02-02.
  41. ^ "JRuby по сравнению с Ruby 1.9, компьютерной игрой для тестов (1)". Архивировано из оригинал на 2015-01-23. Получено 2014-02-02.
  42. ^ «JRuby по сравнению с Ruby 1.9, компьютерной игрой для тестов (2)». Архивировано из оригинал в 2014-07-23. Получено 2014-02-02.

дальнейшее чтение

внешняя ссылка