Jump to content

ДжРубин

ДжРубин
Разработчик(и) Чарльз Оливер Наттер, Томас Энебо, Ола Бини и Ник Сигер
Первоначальный выпуск 2001 год ; 23 года назад ( 2001 )
Стабильная версия
9.4.5.0 / 2 ноября 2023 г .; 9 месяцев назад ( 2023-11-02 ) [1]
Репозиторий
Написано в Руби и Ява
Операционная система Кросс-платформенный
Платформа Виртуальная машина Java
Тип Интерпретатор языка программирования Ruby
Лицензия EPL / GPL / LGPL
Веб-сайт www .jruby .org  Edit this on Wikidata

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

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

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

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

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

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

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

JRuby поддерживает совместимость с версиями Ruby MRI с 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.4.3.0) ориентирована на Ruby 3.1, хотя некоторые функции 3.1 все еще находятся в работе. [10]

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

[ редактировать ]

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

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

[ редактировать ]

27 февраля 2008 года Sun Microsystems и Токийский университет объявили о совместном исследовательском проекте по созданию виртуальной машины, способной выполнять более одного приложения Ruby или 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.9 1 августа 2006 г. Поддержка рельсов [11]
1.1 28 марта 2008 г. Работает лучше, чем Ruby MRI 1.8.7. [6]
Режим AOT и режим JIT [22]
1.1.4 28 августа 2008 г. Реорганизованный уровень интеграции Java.
Начало поддержки Ruby 1.9.
Подсистема FFI для вызова C библиотек [23]
1.2.0 [24] 16 марта 2009 г. JIT- компилятор для Ruby 1.9
Предварительная Android поддержка со стороны проекта Ruboto .
1.3.0 [25] 3 июня 2009 г. JRuby лучше работает в ограниченных средах, таких как GAE/J.
1.4.0 [26] [27] 2 ноября 2009 г. Windows Native Launcher и установщик Windows
Поддержка Руби 1.8.7
1.5.0 [28] 12 мая 2010 г. Собственный лаунчер для UNIX платформ на базе
Поддержка Ant и интеграция Rake-Ant
Обновления стандартной библиотеки RubyGems и RSpec.
1.6.0 [29] 15 марта 2011 г. Язык Ruby 1.9.2 и совместимость API
Встроенный профайлер
Экспериментальная поддержка расширений C на основе C API Ruby.
1.7.0 [21] 22 октября 2012 г. Язык Ruby 1.9.3 является режимом по умолчанию.
Поддержка для вызовадинамического
1.7.4 [30] 16 мая 2013 г. Экспериментальная поддержка Ruby 2.0 (включая большинство функций и стандартную библиотеку )
9.0.0.0 [31] 22 июля 2015 г. Поддержка Руби 2.x
Новая среда выполнения оптимизации
Новый POSIX -совместимый ввод-вывод и процесс

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

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

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

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

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

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

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

Исправлено 72 проблемы

9.2.0.0 [33] 24 мая 2018 г. Поддержка языка Ruby 2.5.
9.2.9.0 [34] 30 октября 2019 г. Поддержка языка Ruby 2.5.7
9.3.2.0 [35] 2 декабря 2021 г. Поддержка языка Ruby 2.6.x
9.3.3.0 [36] 19 января 2022 г. Поддержка языка Ruby 2.6.x
9.3.4.0 [37] 23 марта 2022 г. Поддержка языка Ruby 2.6.x
9.4.0.0 [38] 22 ноября 2022 г. Поддержка языка Ruby 3.1.
9.4.1.0 [39] 7 февраля 2023 г. Поддержка языка Ruby 3.1.
9.4.2.0 [40] 8 марта 2023 г. Поддержка языка Ruby 3.1.
9.4.3.0 [41] 7 июня 2023 г. Поддержка языка Ruby 3.1.

С начала 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, Rake и RubyGems. В него встроена подсистема FFI, позволяющая использовать библиотеки C в виде драгоценных камней. Он также позволяет запускать Interactive Ruby Shell (irb), как это делает Ruby MRI.

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

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

[ редактировать ]

Руби встречает Яву

[ редактировать ]

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

JRuby вызывает Java

[ редактировать ]

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

require 'java'

frame = javax.swing.JFrame.new
frame.getContentPane.add javax.swing.JLabel.new('Hello, World!')
frame.setDefaultCloseOperation javax.swing.JFrame::EXIT_ON_CLOSE
frame.pack
frame.set_visible true

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

frame.content_pane.add label
frame.visible = true

Вызов JRuby из Java

[ редактировать ]

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

//Example using JSR 233 Scripting for Java 6
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine rbEngine = mgr.getEngineByExtension("rb");
try {
    rbEngine.eval("puts 'Hello World!'");
} catch (ScriptException ex) {
    ex.printStackTrace();
}

Производительность

[ редактировать ]

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

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

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

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

По состоянию на апрель 2014 года в игре The Computer Language Benchmarks Game JRuby 1.7.4 обычно имеет ту же производительность, что и Ruby MRI 2.1.0, но использует больше памяти. [48] [49]

См. также

[ редактировать ]
  1. ^ «Релизы · jruby/jruby» . github.com . Проверено 26 декабря 2023 г.
  2. ^ Джеки (7 сентября 2006 г.). «Sun приветствует разработчиков JRuby» . В записи. Архивировано из оригинала 29 августа 2012 года . Проверено 7 ноября 2013 г.
  3. ^ Ола Бини (2007). «МысльВоркс» . В записи.
  4. ^ Jump up to: а б «Команда Sun JRuby перемещается с корабля на машинный завод» . ПКМир . 28 июля 2009 года . Проверено 2 июня 2012 г.
  5. ^ Jump up to: а б «Red Hat заманивает силовую пару JRuby» . Регистр . 23 мая 2012 года . Проверено 2 июня 2012 г.
  6. ^ Jump up to: а б Канджано, Антонио (12 марта 2007 г.). «Великая рубиновая перестрелка» . Проверено 1 февраля 2008 г.
  7. ^ Наттер, Чарльз (25 апреля 2008 г.). «JRuby 1.1.1 в RedHat Fedora» . Проверено 26 апреля 2008 г.
  8. ^ "джруби" . Fedoraproject.org . Проверено 26 апреля 2008 г. [ постоянная мертвая ссылка ]
  9. ^ Наттер, Чарльз (28 июля 2009 г.). «Будущее JRuby на машиностроительном заводе» . Архивировано из оригинала 31 июля 2009 года . Проверено 28 июля 2009 г.
  10. ^ «Незавершенные функции Ruby 3.1» . Команда JRuby . Проверено 13 июня 2023 г.
  11. ^ Jump up to: а б «Поддержка Rails» . Команда JRuby. Архивировано из оригинала 3 марта 2008 года . Проверено 17 февраля 2008 г.
  12. ^ Наттер, Чарльз (24 августа 2008 г.). «От нуля до производства за 15 минут» . Проверено 27 августа 2008 г.
  13. ^ 98,6% из 2807 тестовых случаев, специфичных для Rails, выполняются успешно; см. выпуск JRuby 0.9.8, заархивированный 22 мая 2015 г., на Wayback Machine.
  14. ^ «Истории успеха» . JRuby Wiki на GitHub. 5 января 2011 года . Проверено 16 марта 2011 г.
  15. ^ «Токийский университет и Sun Microsystems начинают совместные исследовательские проекты в области высокопроизводительных вычислений и языков веб-программирования» . Сан Микросистемс . 27 февраля 2008 года . Проверено 28 февраля 2008 г.
  16. ^ см. JSR 292
  17. ^ «Подпроекты и расследования» . Сан Микросистемс . 2007 . Проверено 6 февраля 2008 г.
  18. ^ Роуз, Джон (26 августа 2008 г.). «С Международным днем ​​Invokedynamic!» . Проверено 3 сентября 2008 г.
  19. ^ Лоример, Р.Дж. (1 сентября 2008 г.). «Динамический вызов выполняется на OpenJDK» . infoq.com . Проверено 3 сентября 2008 г.
  20. ^ Наттер, Чарльз (11 сентября 2008 г.). «Первый опыт InvokeDynamic» . Проверено 13 сентября 2008 г. Мне удалось успешно подключить InvokeDynamic непосредственно к процессу отправки JRuby! Такое волнение! Код уже находится в багажнике JRuby и будет поставляться с JRuby 1.1.5 (хотя он, очевидно, будет отключен на JVM без InvokeDynamic).
  21. ^ Jump up to: а б «Выпущен JRuby 1.7.0» . Команда JRuby. 22 октября 2012. Архивировано из оригинала 25 октября 2012 года . Проверено 23 октября 2011 г.
  22. ^ Jump up to: а б Наттер, Чарльз (27 сентября 2007 г.). «Компилятор завершен» . Проверено 12 октября 2007 г.
  23. ^ Энебо, Том (28 августа 2008 г.). «Выпущен JRuby 1.1.4» . Проверено 25 февраля 2009 г. [ постоянная мертвая ссылка ]
  24. ^ Энебо, Том (16 марта 2009 г.). «Выпущен JRuby 1.2.0» . Команда JRuby. Архивировано из оригинала 19 марта 2009 года . Проверено 17 марта 2009 г.
  25. ^ Энебо, Том (3 июня 2009 г.). «Выпущен JRuby 1.3.0» . Команда JRuby. Архивировано из оригинала 12 июня 2009 года . Проверено 3 июня 2009 г.
  26. ^ «Выпущен JRuby 1.4.0» . Команда JRuby. 2 ноября 2009 года . Проверено 3 ноября 2009 г.
  27. ^ «Выпущен JRuby 1.4.0» . adtmag.com. 10 ноября 2009 года . Проверено 21 ноября 2009 г.
  28. ^ «Выпущен JRuby 1.5.0» . Команда JRuby. 12 мая 2010 года. Архивировано из оригинала 16 мая 2010 года . Проверено 12 мая 2010 г.
  29. ^ «Выпущен JRuby 1.6.0» . Команда JRuby. 15 марта 2011 года . Проверено 15 марта 2011 г.
  30. ^ «Выпущен JRuby 1.7.4» . Команда JRuby. 16 мая 2013 года . Проверено 19 мая 2013 г.
  31. ^ «Выпущен JRuby 9.0.0.0» . Команда JRuby. 22 июля 2015 года . Проверено 25 июля 2015 г.
  32. ^ «Выпущен JRuby 9.1.7.0 — JRuby.org» . jruby.org . Проверено 13 января 2017 г.
  33. ^ «Выпущен JRuby 9.2.0.0» . Архивировано из оригинала 27 мая 2018 года . Проверено 27 мая 2018 г.
  34. ^ «Выпущен JRuby 9.2.9.0» . Проверено 5 ноября 2019 г.
  35. ^ «Выпущен JRuby 9.3.2.0» . Проверено 11 января 2022 г.
  36. ^ «Выпущен JRuby 9.3.3.0» . Проверено 19 января 2022 г.
  37. ^ «Выпущен JRuby 9.3.4.0» . Проверено 23 марта 2022 г.
  38. ^ «Выпущен JRuby 9.4.0.0» . Проверено 1 декабря 2022 г.
  39. ^ «Выпущен JRuby 9.4.1.0» . Проверено 15 февраля 2023 г.
  40. ^ «Выпущен JRuby 9.4.2.0» . Проверено 13 июня 2023 г.
  41. ^ «Выпущен JRuby 9.4.3.0» . Проверено 13 июня 2023 г.
  42. ^ «Поддержка Ruby и JRuby доступна в среде IDE NetBeans» . netbeans.org. 6 марта 2007 года . Проверено 4 июля 2009 г.
  43. ^ «Ruby делает платформу NetBeans ярче» . infoworld.com. 1 марта 2007 года . Проверено 4 июля 2008 г.
  44. ^ Фокс, Джошуа (17 июля 2006 г.). «Ruby для мира Java» . JavaWorld . Проверено 26 июля 2020 г.
  45. ^ JSR 223: Создание сценариев для запроса спецификации платформы Java
  46. ^ Зигер, Ник (25 октября 2007 г.). «JRuby on Rails: достаточно быстро» . Проверено 28 октября 2007 г.
  47. ^ Канджано, Антонио (3 декабря 2007 г.). «Великая рубиновая перестрелка» . Проверено 2 февраля 2014 г.
  48. ^ «JRuby по сравнению с Ruby 1.9, игра с тестами компьютерного языка (1)» . Архивировано из оригинала 23 января 2015 года . Проверено 2 февраля 2014 г.
  49. ^ «JRuby по сравнению с Ruby 1.9, игра с тестами компьютерного языка (2)» . Архивировано из оригинала 23 июля 2014 года . Проверено 2 февраля 2014 г.

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3e4a258d5e66d9b577b7114cff7296bc__1703617860
URL1:https://arc.ask3.ru/arc/aa/3e/bc/3e4a258d5e66d9b577b7114cff7296bc.html
Заголовок, (Title) документа по адресу, URL1:
JRuby - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)