| 開発者 | チャールズ・オリバー・ナッター、トーマス・エネボ、オラ・ビニ、ニック・シーガー |
|---|---|
| 初回リリース | 2001年 |
| 安定リリース | 9.4.5.0 / 2023年11月2日[1] |
| リポジトリ |
|
| 書かれた | RubyとJava |
| オペレーティング·システム | クロスプラットフォーム |
| プラットフォーム | Java仮想マシン |
| タイプ | Ruby プログラミング言語インタープリタ |
| ライセンス | EPL / GPL / LGPL |
| Webサイト | 詳しくはこちら |
JRuby は、主にJavaで記述された、Java 仮想マシン上のRuby プログラミング言語の実装です。これは、3 方向EPL / GPL / LGPLライセンスの下でリリースされたフリー ソフトウェアです。JRuby はJavaと緊密に統合されており、Java と Ruby コード間の完全な双方向アクセスを備えたインタープリターを任意の Java アプリケーションに埋め込むことができます ( Python 言語の Jythonに似ています)。
JRuby の主任開発者は Charles Oliver Nutter と Thomas Enebo で、Ola Biniや Nick Sieger など、現在および過去の貢献者も多数います。2006 年 9 月、Sun Microsystems はEnebo と Nutter を雇用し、JRuby にフルタイムで取り組みました。[2] 2007 年 6 月、ThoughtWorks はOla Bini を雇用し、Ruby と JRuby に取り組みました。[3]
2009年7月、JRuby開発者はSunを離れ、Engine YardでJRubyの開発を継続した。[4] 2012年5月、NutterとEneboはEngine Yardを離れ、 Red HatでJRubyの開発に携わった。[5]
歴史
JRuby は、もともと 2001 年に Jan Arne Petersen によって作成されました。当時およびその後数年間、コードは Ruby 1.6 Cコードの直接の移植でした。Ruby 1.8.6 のリリースに伴い、JRuby を 1.8.6 の機能とセマンティクスに更新する取り組みが始まりました。2001 年以来、数人の貢献者がプロジェクトを支援し、現在 (2012 年) の約 6 人のメンバーからなるコア チームに至っています[アップデート]。
JRuby 1.1では、 JRubyにジャストインタイムコンパイルとアヘッドオブタイムコンパイルモードが追加され、当時のRuby 1.8.7リファレンス実装よりもほとんどの場合で高速化されました。[6]
JRubyパッケージはほとんどのプラットフォームで利用可能であり、Fedora 9はJRuby 1.1.1で標準パッケージとして組み込まれた最初のプラットフォームの1つです。[7] [8]
2009年7月、サン・マイクロシステムズのJRubyコア開発者であるチャールズ・オリバー・ナッター、トーマス・エネボ、ニック・シーガーがEngine Yardに加わり、JRubyの開発を継続した。[4] [9] 2012年5月、ナッターとエネボはEngine Yardを離れ、レッドハットでJRubyの開発に携わった。[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はバージョン0.9(2006年5月)以降、 Ruby on Railsウェブフレームワークを実行できるようになり、 [11] [12] RubyGemsとWEBrickを実行する機能も備えています。Sunが2人のリード開発者を雇用して以来、Railsの互換性と速度は大幅に向上しました。JRubyバージョン1.0は、Railsの独自のテストケースのほぼすべてに合格しました。[13] それ以来、開発者は本番環境でRailsアプリケーションにJRubyを使い始めました。[14]
複数の仮想マシンのコラボレーション
2008年2月27日、サン・マイクロシステムズと東京大学は、 1つのインタープリタ上で複数のRubyまたはJRubyアプリケーションを実行できる仮想マシンを実装するための共同研究プロジェクトを発表しました。[15]
Java仮想マシンでの動的呼び出し
JSR 292(JavaTMプラットフォームでの動的型付け言語のサポート)[16]では以下を提案している。
invokedynamicJVMレベルで新しい命令を追加し、動的型チェックを使用したメソッド呼び出しを可能にする。- 実行時にクラスとメソッドを動的に変更します。
SunオープンソースプロジェクトMulti Language Virtual Machineは、このJSRのプロトタイプを作成することを目指しています。[17] OpenJDKのパッチとして開発された最初の実用的なプロトタイプは、2008年8月末に発表され、利用可能になりました。[18] [19]
JRubyチームは動的呼び出しをコードベースに実装しました。動的呼び出しは、1.1.5リリースでプリミティブな形で最初に出荷されました。[20]バージョン1.7.0では、Java 8ビルドでデフォルトで有効になりました。[21]
リリース履歴
この表には、主にバグ修正とパフォーマンス改善を行ったバージョンを除き、JRuby の歴史において重要な進歩を示すリリースのみが表示されています。パフォーマンスの改善は通常、すべてのリリースでもたらされているため、以下の表には表示されていません。
デザイン
2006 年初頭から、現在の JRuby コア チームは、JRuby を単なる C 移植からさらに進化させ、パフォーマンスの向上とJava バイトコードへの最終的なコンパイルの支援に取り組んできました。この目的をサポートするために、チームは野心的な目標を設定しました。それは、JRuby を使用して Ruby on Rails を変更せずに実行できるようにすることです。この目標を達成する過程で、JRuby テスト スイートは拡張され、チームは JRuby の「正確さ」に自信を持つようになりました。その結果、2006 年の終わりから 2007 年の初めにかけて、JRuby のコア サブシステムのより複雑な再設計とリファクタリングに着手しました。
JRubyはRubyの混合モード仮想マシンとして機能するように設計されており、コードを直接解釈するか、実行時にJavaバイトコードにジャストインタイムコンパイルするか、実行前にJavaバイトコードに事前コンパイルすることができます。2007年10月までは、 Rubyのすべての構成要素をサポートしていたのは解釈モードのみでしたが、バージョン1.1以降では完全なAOT/JITコンパイラが利用可能になりました。[22]コンパイラの設計により、解釈されたコードとコンパイルされたコードを並行して実行できるほか、逆コンパイルして再最適化し、生成されたバイトコードをJavaクラスファイルとして出力することもできます。
フレームワークのサポート
JRuby には、Rails、RSpec、 Rake、RubyGemsのサポートが組み込まれています。FFI サブシステムが組み込まれているため、gem としてバンドルされた C ライブラリを使用できます。また、Ruby MRI と同様に、 Interactive Ruby Shell (irb) を起動することもできます。
NetBeans 6で利用可能なNetbeans Ruby Packは、RubyとJRuby、およびRubyの2つの実装用のRuby on Railsを使用したIDE開発を可能にします。[42] [43] NetBeans 7.0以降には含まれなくなりました。
プログラミング
RubyとJavaの出会い
JRubyはJavaで書かれていることを除いて、標準のRubyインタープリタに似ています。JRubyは、オブジェクト指向プログラミングや動的型付けなど、Rubyと同じ概念をいくつか備えています。主な違いは、JRubyはJavaと緊密に統合されており、Javaプログラムから直接呼び出すことができることです。[44] JavaはWebアプリケーションの開発において重要な役割を果たしています。
JRuby が Java を呼び出す
JRuby の強力な機能の 1 つは、 Java プラットフォームのクラスを呼び出す機能です。これを行うには、まず「require 'java'」を呼び出して JRuby の Java サポートをロードする必要があります。次の例では、JLabel を含む Java JFrame を作成します。
'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 では、より Ruby らしいアンダースコア メソッド命名を使用して Java コードを呼び出したり、 JavaBeanプロパティを属性として参照したりすることもできます: [疑わしい–議論]
frame .content_pane .ラベルを追加frame .visible = true
JavaからJRubyを呼び出す
JRubyは、 JSR 223 [45] Scripting for Java 6またはApache Bean Scriptingフレームワークを使用して、Javaから簡単に呼び出すことができます。
// 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 では OS スレッドを活用しているにもかかわらず実現できません。
2007年にテストされた実際のMongrel ウェブサーバーアプリケーションでは、Java仮想マシンがインスタンス化された後、JRubyのパフォーマンスはRuby MRI 1.8よりも優れていました。[46]
2007年のRuby実装のベンチマークでは、JRubyはいくつかのテストでRuby MRI 1.8よりも高速でしたが、YARVは両方を上回りました。[47]
2014年4月現在、The Computer Language Benchmarks Gameでは、JRuby 1.7.4はRuby MRI 2.1.0と同等のパフォーマンスを発揮しますが、メモリ使用量は多くなります。[48] [49]
参照
- グラールVM
- Java スクリプト言語のリスト
- ZK (フレームワーク) – JRuby をサポートする Ajax フレームワーク
参考文献
- ^ “Releases · jruby/jruby”. github.com . 2023年12月26日閲覧。
- ^ Jacki (2006 年 9 月 7 日). 「Sun が JRuby 開発者を歓迎」。On the Record。2012 年 8 月 29 日時点のオリジナルよりアーカイブ。2013年11 月 7 日閲覧。
- ^ Ola Bini (2007). 「ThoughtWorks」. オン・ザ・レコード.
- ^ ab 「Sun の JRuby チームが Engine Yard に移籍」PCWorld 2009 年 7 月 28 日2012 年6 月 2 日閲覧。[永久リンク切れ]
- ^ ab 「Red Hat が JRuby の有力企業 2 社を誘致」The Register 2012 年 5 月 23 日2012 年6 月 2 日閲覧。
- ^ ab Cangiano, Antonio (2007年3月12日). 「The Great Ruby Shootout」 . 2008年2月1日閲覧。
- ^ Nutter, Charles (2008 年 4 月 25 日). 「RedHat Fedora の JRuby 1.1.1」 . 2008 年4 月 26 日閲覧。
- ^ "jruby". fedoraproject.org . 2008年4月26日閲覧。 [永久リンク切れ]
- ^ Nutter, Charles (2009 年 7 月 28 日). 「Engine Yard における JRuby の将来」。2009 年 7 月 31 日時点のオリジナルよりアーカイブ。2009年7 月 28 日閲覧。
- ^ 「未完成の Ruby 3.1 機能」。JRuby チーム。2023 年6 月 13 日閲覧。
- ^ ab 「Rails サポート」。JRuby チーム。2008 年 3 月 3 日時点のオリジナルよりアーカイブ。2008 年2 月 17 日閲覧。
- ^ Nutter, Charles (2008 年 8 月 24 日)。「15 分でゼロから生産へ」 。2008年8 月 27 日閲覧。
- ^ 2,807 件の Rails 固有のテスト ケースのうち 98.6% が正常に実行されました。JRuby 0.9.8 リリース アーカイブ 2015 年 5 月 22 日、Wayback Machineを参照
- ^ 「成功事例」。GitHub 上の JRuby Wiki。2011 年 1 月 5 日。2011年3 月 16 日閲覧。
- ^ 「東京大学とサン・マイクロシステムズ、高性能コンピューティングとウェブベースプログラミング言語に関する共同研究プロジェクトを開始」サン・マイクロシステムズ2008年2月27日2008年2月28日閲覧。
- ^ JSR 292を参照
- ^ 「サブプロジェクトと調査」。Sun Microsystems。2007年。 2008年2月6日閲覧。
- ^ ローズ、ジョン (2008 年 8 月 26 日)。「Happy International Invokedynamic Day!」。2008 年9 月 3 日閲覧。
- ^ Lorimer, RJ (2008 年 9 月 1 日)。「OpenJDK での動的呼び出しの実行」。infoq.com。2008年9 月 3 日閲覧。
- ^ Nutter, Charles (2008 年 9 月 11 日)。「InvokeDynamic の初体験」 。2008年9 月 13 日閲覧。InvokeDynamic
を JRuby のディスパッチ プロセスに直接接続することに成功しました。とても興奮しています。コードはすでに JRuby のトランクに含まれており、JRuby 1.1.5 に同梱されます (ただし、InvokeDynamic のない JVM では無効になります)。
- ^ ab 「JRuby 1.7.0 リリース」。JRuby チーム。2012 年 10 月 22 日。2012 年 10 月 25 日時点のオリジナルよりアーカイブ。2011年10 月 23 日閲覧。
- ^ ab Nutter, Charles (2007 年 9 月 27 日). 「The Compiler Is Complete」 . 2007 年10 月 12 日閲覧。
- ^ Enebo, Tom (2008 年 8 月 28 日). 「JRuby 1.1.4 リリース」. 2009 年2 月 25 日閲覧。[永久リンク切れ]
- ^ Enebo, Tom (2009 年 3 月 16 日). 「JRuby 1.2.0 リリース」. JRuby チーム. 2009 年 3 月 19 日時点のオリジナルよりアーカイブ。2009年3 月 17 日閲覧。
- ^ Enebo, Tom (2009 年 6 月 3 日). 「JRuby 1.3.0 リリース」. JRuby チーム. 2009 年 6 月 12 日時点のオリジナルよりアーカイブ。2009年6 月 3 日閲覧。
- ^ 「JRuby 1.4.0 リリース」。JRuby チーム。2009 年 11 月 2 日。2009年11 月 3 日閲覧。
- ^ 「JRuby 1.4.0 リリース」。adtmag.com。2009 年 11 月 10 日。2009 年 11 月 15 日時点のオリジナルよりアーカイブ。2009年11 月 21 日閲覧。
- ^ 「JRuby 1.5.0 リリース」。JRuby チーム。2010 年 5 月 12 日。2010 年 5 月 16 日時点のオリジナルよりアーカイブ。2010年5 月 12 日閲覧。
- ^ 「JRuby 1.6.0 リリース」。JRuby チーム。2011 年 3 月 15 日。2011 年3 月 15 日閲覧。
- ^ 「JRuby 1.7.4 リリース」。JRuby チーム。2013 年 5 月 16 日。2013年5 月 19 日閲覧。
- ^ 「JRuby 9.0.0.0 リリース」。JRuby チーム。2015 年 7 月 22 日。2015 年 7 月 24 日時点のオリジナルよりアーカイブ。2015年7 月 25 日閲覧。
- ^ “JRuby 9.1.7.0 Released — JRuby.org”. jruby.org . 2017年1月16日時点のオリジナルよりアーカイブ。 2017年1月13日閲覧。
- ^ “JRuby 9.2.0.0 リリース”. 2018年5月27日時点のオリジナルよりアーカイブ。2018年5月27日閲覧。
- ^ 「JRuby 9.2.9.0 リリース」。2019 年11 月 5 日閲覧。
- ^ 「JRuby 9.3.2.0 リリース」。2022年1月11日閲覧。
- ^ 「JRuby 9.3.3.0 リリース」。2022年1月19日閲覧。
- ^ 「JRuby 9.3.4.0 リリース」。2022年3月23日閲覧。
- ^ 「JRuby 9.4.0.0 リリース」。2022年12月1日閲覧。
- ^ 「JRuby 9.4.1.0 リリース」。2023年2月15日閲覧。
- ^ 「JRuby 9.4.2.0 リリース」。2023年6月13日閲覧。
- ^ 「JRuby 9.4.3.0 リリース」。2023年6月13日閲覧。
- ^ 「Ruby および JRuby サポートが NetBeans IDE で利用可能」。netbeans.org。2007 年 3 月 6 日。2011 年 7 月 19 日時点のオリジナルよりアーカイブ。2009年7 月 4 日閲覧。
- ^ 「Ruby が NetBeans プラットフォームを明るくする」。infoworld.com。2007 年 3 月 1 日。2008年7 月 4 日閲覧。
- ^ Fox, Joshua (2006 年 7 月 17 日). 「Java の世界のための Ruby」. JavaWorld . 2020 年7 月 26 日閲覧。
- ^ JSR 223: Java プラットフォーム仕様要求のスクリプト
- ^ Sieger, Nick (2007 年 10 月 25 日)。「JRuby on Rails: Fast Enough」。2007 年10 月 28 日閲覧。
- ^ Cangiano, Antonio (2007年12月3日). 「The Great Ruby Shootout」 . 2014年2月2日閲覧。
- ^ 「JRubyとRuby 1.9の比較、コンピュータ言語ベンチマークゲーム(1)」。2015年1月23日時点のオリジナルよりアーカイブ。2014年2月2日閲覧。
- ^ 「JRubyとRuby 1.9の比較、コンピュータ言語ベンチマークゲーム(2)」。2014年7月23日時点のオリジナルよりアーカイブ。2014年2月2日閲覧。
さらに読む
- Kutner, Joe (2012 年 8 月 22 日)。『JRuby によるデプロイ: JVM を使用したスケーラブルな Web アプリの配信 (初版)』。Pragmatic Bookshelf。p . 200。ISBN 978-1934356975。
- O Nutter, Charles; Enebo, Thomas; Sieger, Nick; Bini, Ola; Dees, Ian (2011 年 2 月 4 日)。『JRuby の使用: Ruby を Java に導入する (初版)』。Pragmatic Bookshelf。300ページ。ISBN 978-1934356654。
- Edelson, Justin; Liu, Henry (2008 年 11 月 18 日)。JRuby Cookbook (初版)。O'Reilly Media。222ページ。ISBN 978-0-596-51980-3。
- Bini, Ola (2007 年 9 月 24 日)。実践的な JRuby on Rails Web 2.0 プロジェクト: Ruby on Rails を Java に導入する (初版) 。Apress。330ページ。ISBN 978-1-59059-881-8。
- Kutler, Chris、Leonard, Brian (2009 年 5 月 4 日)。NetBeans Ruby および Rails IDE with JRuby (初版) 。Apress。p . 160。ISBN 978-1-4302-1636-0. 2012年8月27日時点のオリジナルよりアーカイブ。2009年7月12日閲覧。
外部リンク
- 公式サイト
