Разработчики) | Чарльз Оливер Наттер, Томас Энебо, Ола Бини и Ник Зигер |
---|---|
Первый выпуск | 2001 |
Стабильный выпуск | 9.2.17.0 / 29 марта 2021 г . [1] |
Репозиторий | |
Написано в | Руби и Java |
Операционная система | Кроссплатформенность |
Платформа | Виртуальная машина Java |
Тип | Интерпретатор языка программирования Ruby |
Лицензия | EPL / GPL / LGPL |
Веб-сайт | www |
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 1.6 C. С выпуском Ruby 1.8.6 были предприняты попытки обновить JRuby до 1.8.6 функций и семантики. С 2001 года проекту помогли несколько участников, в результате чего в настоящее время (2012 год [Обновить]) основная команда состоит примерно из шести человек.
JRuby 1.1 добавил в JRuby режимы компиляции Just-in-time и Ahead-of-time, и в большинстве случаев он уже был быстрее, чем текущая на тот момент эталонная реализация 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.2.11.0) поддерживает Ruby 2.5.7. Предстоящая версия 9.3 будет поддерживать Ruby 2.6. [10]
Ruby on Rails [ править ]
JRuby может запускать веб-фреймворк Ruby on Rails с версии 0.9 (май 2006 г.), [11] [12] с возможностью выполнения RubyGems и WEBrick . С тех пор, как Sun наняла двух ведущих разработчиков, совместимость и скорость Rails значительно улучшились. JRuby версии 1.0 успешно прошел почти все собственные тестовые примеры Rails. [13] С тех пор разработчики начали использовать JRuby для приложений Rails в производственных средах. [14]
Совместная работа с несколькими виртуальными машинами [ править ]
27 февраля 2008 года Sun Microsystems и Токийский университет объявили о совместном исследовательском проекте по реализации виртуальной машины, способной выполнять более одного приложения Ruby или JRuby на одном интерпретаторе. [15]
Динамический вызов на виртуальных машинах Java [ править ]
JSR 292 ( Поддержка динамически типизированных языков на платформе JavaTM ) [16] предлагает:
- добавление новой
invokedynamic
инструкции на уровне JVM, позволяющей вызывать метод с использованием проверки динамического типа , - динамически изменяющиеся классы и методы во время выполнения.
Проект Sun Open Source Multi Language Virtual Machine нацелен на создание прототипа этого JSR. [17] Первый рабочий прототип, разработанный как патч для OpenJDK , был объявлен и стал доступен в конце августа 2008 года. [18] [19]
Команда JRuby внедрила динамический вызов в свою кодовую базу. Динамический вызов изначально поставлялся с выпуском 1.1.5 в примитивной форме. [20] Версия 1.7.0 включила его по умолчанию в сборках Java 8. [21]
История выпусков [ править ]
В этой таблице представлены только выпуски, которые представляют собой важные шаги в истории JRuby, за исключением версий, в которых в основном исправлены ошибки и улучшена производительность. Улучшения производительности также не показаны в таблице ниже, поскольку каждый выпуск обычно вносил такие улучшения.
Релиз | Дата выпуска | Особенности |
---|---|---|
0,9 | 2006-08-01 | Поддержка Rails [11] |
1.1 | 2008-03-28 | Работает лучше , чем Рубин МРТ 1.8.7 [6] Режим АОТ и JIT - режима [22] |
1.1.4 | 2008-08-28 | Отредактированный уровень интеграции Java. Начало Ruby 1.9 поддерживает подсистему FFI для вызова библиотек C [23] |
1.2.0 [24] | 2009-03-16 | JIT- компилятор для Ruby 1.9. Предварительная поддержка Android проектом Ruboto . |
1.3.0 [25] | 2009-06-03 | JRuby лучше работает в ограниченных средах, таких как GAE / J |
1.4.0 [26] [27] | 2009-11-02 | Поддержка Windows Native Launcher и Windows installer Ruby 1.8.7 |
1.5.0 [28] | 2010-05-12 | Native Launcher для платформ на базе UNIX Поддержка Ant и интеграция Rake-Ant Обновления стандартной библиотеки, RubyGems и RSpec |
1.6.0 [29] | 2011-03-15 | Совместимость с языком Ruby 1.9.2 и API Встроенный профилировщик Экспериментальная поддержка расширений C на основе API C Ruby |
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, Rake и RubyGems. Он включает в себя подсистему FFI, позволяющую использовать библиотеки C, объединенные в виде гемов. Он также позволяет запускать интерактивную оболочку Ruby Shell (irb), как это делает Ruby MRI.
Пакет Netbeans Ruby Pack , доступный в NetBeans 6, позволяет разрабатывать IDE с использованием Ruby и JRuby, а также Ruby on Rails для двух реализаций Ruby. [35] [36] Он больше не включен в NetBeans 7.0 и более поздних версий.
Программирование [ править ]
Руби встречает Java [ править ]
JRuby похож на стандартный интерпретатор Ruby, за исключением написанного на Java . JRuby имеет некоторые из тех же концепций, включая объектно-ориентированное программирование и динамическую типизацию, что и Ruby. Ключевое отличие состоит в том, что JRuby тесно интегрирован с Java и может вызываться непосредственно из программ Java. [37] Java играет важную роль в разработке веб-приложений.
JRuby вызывает Java [ править ]
Одной из мощных возможностей JRuby является его способность вызывать классы платформы Java . Для этого необходимо сначала загрузить поддержку Java JRuby, вызвав «require 'java'». В следующем примере создается Java JFrame с JLabel:
требуется 'java'кадр = javax . качели . JFrame . новый каркас . getContentPane . добавить javax . качели . JLabel . новый ( 'Hello, World!' ) фрейм . setDefaultCloseOperation javax . качели . JFrame :: EXIT_ON_CLOSE рамка . упаковать раму . set_visible истина
JRuby также позволяет пользователю вызывать Java-код, используя более Ruby-подобное именование методов подчеркивания и ссылаться на свойства JavaBean как на атрибуты: [ сомнительно
]рамка . content_pane . добавить рамку метки . visible = true
Вызов JRuby из Java [ править ]
JRuby можно так же легко вызвать из Java, используя либо JSR 223 [38] Scripting для Java 6, либо инфраструктуру сценариев Apache Bean Scripting .
// Пример использования сценариев JSR 233 для Java 6 ScriptEngineManager mgr = new ScriptEngineManager (); ScriptEngine rbEngine = мгр . getEngineByExtension ( "rb" ); попробуйте { rbEngine . eval ( "ставит 'Hello World!'" ); } catch ( ScriptException ex ) { ex . printStackTrace (); }
Производительность [ править ]
Согласно некоторым тестам, JRuby быстрее альтернатив. Поскольку реализации различаются по тому, сколько кода загружается перед выполнением, разные методы измерения скорости могут привести к предвзятой интерпретации преимуществ производительности. Время, необходимое для загрузки самой виртуальной машины Java, часто исключается из времени выполнения при вычислении тестов.
JRuby имеет значительное архитектурное преимущество, заключающееся в возможности использовать потоки JVM без ограничения глобальной блокировкой интерпретатора (аналогично Rubinius ), что позволяет достичь полного параллелизма внутри процесса, чего Ruby MRI не может достичь, несмотря на использование потоков ОС.
В реальном приложении веб-сервера Mongrel, протестированном в 2007 году, производительность JRuby выше, чем у Ruby MRI 1.8, после того как была создана виртуальная машина Java. [39]
В тесте 2007 года реализации Ruby JRuby был быстрее, чем Ruby MRI 1.8 в некоторых тестах, но YARV превзошел их обоих. [40]
По состоянию на апрель 2014 года в игре The Computer Language Benchmarks Game JRuby 1.7.4 обычно имеет ту же производительность, что и Ruby MRI 2.1.0, но использует больше памяти. [41] [42]
См. Также [ править ]
- GraalVM
- Список языков сценариев Java
- ZK (framework) - фреймворк Ajax, поддерживающий JRuby
Ссылки [ править ]
- ^ "Релизы · jruby / jruby" . github.com . Проверено 5 апреля 2021 .
- ^ Jacki (2006-09-07). «Sun приветствует разработчиков JRuby» . На записи. Архивировано из оригинала на 2012-08-29 . Проверено 7 ноября 2013 .
- ↑ Ола Бини. «ThoughtWorks» . На записи.
- ^ a b «Команда Сан Дж. Руби прыгает с корабля на машинный двор» . PCWorld . 2009-07-28 . Проверено 2 июня 2012 .
- ^ a b «Red Hat заманивает в паре JRuby power» . Реестр . 2012-05-23 . Проверено 2 июня 2012 .
- ^ a b Cangiano, Антонио (2007-03-12). «Великая Рубиновая перестрелка» . Проверено 1 февраля 2008 .
- ^ Наттер, Чарльз (2008-04-25). «JRuby 1.1.1 в RedHat Fedora» . Проверено 26 апреля 2008 .
- ^ "Джруби" . fedoraproject.org . Проверено 26 апреля 2008 .[ постоянная мертвая ссылка ]
- ↑ Наттер, Чарльз (28 июля 2009 г.). «Будущее Дж. Руби на Моторном заводе» . Архивировано из оригинала на 2009-07-31 . Проверено 28 июля 2009 .
- ^ «Поддержка Ruby 2.6» . Команда JRuby . Проверено 9 апреля 2020 .
- ^ a b «Поддержка Rails» . Команда JRuby . Проверено 17 февраля 2008 .
- ^ Наттер, Чарльз (2008-08-24). «С нуля до производства за 15 минут» . Проверено 27 августа 2008 .
- ^ 98,6% из 2807 тестовых примеров, специфичных для Rails, выполняются успешно; см. Выпущенный JRuby 0.9.8, заархивированный 22 мая 2015 г., на Wayback Machine
- ^ «Истории успеха» . JRuby Wiki на GitHub. 2011-01-05 . Проверено 16 марта 2011 .
- ^ «Токийский университет и Sun Microsystems начинают совместные исследовательские проекты по высокопроизводительным вычислениям и языкам программирования на базе Интернета» . Sun Microsystems . 2008-02-27 . Проверено 28 февраля 2008 .
- ^ см. JSR 292
- ^ «Суб-проекты и исследования» . Sun Microsystems . 2007 . Проверено 6 февраля 2008 .
- ^ Роуз, Джон (2008-08-26). «С Международным днем Invokedynamic!» . Проверено 3 сентября 2008 .
- Перейти ↑ Lorimer, RJ (2008-09-01). «Динамический вызов выполняется в OpenJDK» . infoq.com . Проверено 3 сентября 2008 .
- ↑ Наттер, Чарльз (11 сентября 2008 г.). «Первый вкус InvokeDynamic» . Проверено 13 сентября 2008 .
Мне удалось успешно подключить InvokeDynamic непосредственно к процессу отправки JRuby!
Какой азарт!
Код уже находится в багажнике JRuby и будет поставляться с JRuby 1.1.5 (хотя, очевидно, он будет отключен на JVM без InvokeDynamic).
- ^ a b «Выпущен JRuby 1.7.0» . Команда JRuby. 2012-10-22 . Проверено 23 октября 2011 .
- ^ a b Наттер, Чарльз (27 сентября 2007). «Компилятор завершен» . Проверено 12 октября 2007 .
- ^ Enebo, Том (2008-08-28). «Выпущен JRuby 1.1.4» . Проверено 25 февраля 2009 .[ постоянная мертвая ссылка ]
- ^ Enebo, Том (2009-03-16). «Выпущен JRuby 1.2.0» . Команда JRuby. Архивировано из оригинала на 2009-03-19 . Проверено 17 марта 2009 .
- ^ Enebo, Том (2009-06-03). «Выпущен JRuby 1.3.0» . Команда JRuby. Архивировано из оригинала на 2009-06-12 . Проверено 3 июня 2009 .
- ^ «Выпущен JRuby 1.4.0» . Команда JRuby. 2009-11-02 . Проверено 3 ноября 2009 .
- ^ «Выпущен JRuby 1.4.0» . adtmag.com. 2009-11-10 . Проверено 21 ноября 2009 .
- ^ «Выпущен JRuby 1.5.0» . Команда JRuby. 2010-05-12 . Проверено 12 мая 2010 .
- ^ "Выпущен JRuby 1.6.0" . Команда JRuby. 2011-03-15 . Проверено 15 марта 2011 .
- ^ "Выпущен JRuby 1.7.4" . Команда JRuby. 2013-05-16 . Проверено 19 мая 2013 .
- ^ «Выпущен JRuby 9.0.0.0» . Команда JRuby. 2015-07-22 . Проверено 25 июля 2015 .
- ^ "Выпущен JRuby 9.1.7.0 - JRuby.org" . jruby.org . Проверено 13 января 2017 .
- ^ «Выпущен JRuby 9.2.0.0» . Проверено 27 мая 2018 .
- ^ «Выпущен JRuby 9.2.9.0» . Проверено 5 ноября 2019 .
- ^ «Поддержка Ruby и JRuby доступна в IDE NetBeans» . netbeans.org. 2007-03-06 . Проверено 4 июля 2009 .
- ^ «Ruby делает платформу NetBeans ярче» . infoworld.com. 2007-03-01 . Проверено 4 июля 2008 .
- ↑ Фокс, Джошуа (17 июля 2006 г.). «Ruby для мира Java» . JavaWorld . Проверено 26 июля 2020 .
- ^ JSR 223: Сценарий для запроса спецификации платформы Java
- ^ Зигер, Ник (2007-10-25). «JRuby on Rails: достаточно быстро» . Проверено 28 октября 2007 .
- ^ Cangiano, Антонио (2007-12-03). «Великая Рубиновая перестрелка» . Проверено 2 февраля 2014 .
- ^ "JRuby по сравнению с Ruby 1.9, компьютерной версией Benchmarks Game (1)" . Архивировано из оригинала на 2015-01-23 . Проверено 2 февраля 2014 .
- ^ "JRuby по сравнению с Ruby 1.9, компьютерной игрой для тестов (2)" . Архивировано из оригинала на 2014-07-23 . Проверено 2 февраля 2014 .
Дальнейшее чтение [ править ]
- Катнер, Джо (22 августа 2012 г.). Развертывание с помощью JRuby: предоставление масштабируемых веб-приложений с использованием JVM (первое издание). Прагматическая книжная полка . п. 200. ISBN 978-1934356975.
- О Наттер, Чарльз; Энебо, Томас; Зигер, Ник; Бини, Ола; Дис, Ян (4 февраля 2011 г.). Использование JRuby: перенос Ruby на Java (первое издание). Прагматическая книжная полка . С. 300 . ISBN 978-1934356654.
- Эдельсон, Джастин; Лю, Генри (18 ноября 2008 г.). JRuby Cookbook (Первое издание). O'Reilly Media . С. 222 . ISBN 978-0-596-51980-3.
- Бини, Ола (24 сентября 2007 г.). Практические проекты JRuby on Rails Web 2.0: перенос Ruby on Rails в Java (первое издание). Апресс . С. 330 . ISBN 978-1-59059-881-8.
- Кутлер, Крис; Леонард, Брайан (4 мая 2009 г.). IDE NetBeans Ruby и Rails с JRuby (первое издание). Апресс . п. 160. ISBN 978-1-4302-1636-0. Архивировано из оригинального 27 августа 2012 года . Проверено 12 июля 2009 года .
Внешние ссылки [ править ]
- Официальный веб-сайт