+
+

更新履歴

+
    + +
  1. + : Qiita から移植 +
  2. + +
+
+
+

この記事は Qiita から移植してきたものです。 元 URL: +https://qiita.com/nsfisis/items/74d7ffeeebc51b20d791

+
+
+
+

Ruby +という言語には複数の実装があるが、それらをスクリプト上からどのようにして +programmatically に見分ければよいだろうか。

+
+
+

Object クラスに定義されている RUBY_ENGINE +という定数がこの用途に使える。

+
+
+

参考: +Object::RUBY_ENGINE

+
+
+

上記ページの例から引用する:

+
+
+
+
$ ruby-1.9.1 -ve 'p RUBY_ENGINE'
+ruby 1.9.1p0 (2009-03-04 revision 22762) [x86_64-linux]
+"ruby"
+$ jruby -ve 'p RUBY_ENGINE'
+jruby 1.2.0 (ruby 1.8.6 patchlevel 287) (2009-03-16 rev 9419) [i386-java]
+"jruby"
+
+
+
+

それぞれの処理系がどのような値を返すかだが、stack overflow +に良い質問と回答があった。

+
+ +
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RUBY_ENGINEImplementation

<undefined>

MRI < 1.9

`ruby'

MRI >= 1.9 or REE

`jruby'

JRuby

`macruby'

MacRuby

`rbx'

Rubinius

`maglev'

MagLev

`ironruby'

IronRuby

`cardinal'

Cardinal

+
+
+
+

なお、この質問・回答は +2014年になされたものであり、値は変わっている可能性がある。MRI (aka +CRuby) については執筆時現在 (2020/12/8) も 'ruby' +が返ってくることを確認済み。

+
+
+

この表にない主要な処理系として、https://mruby.org[mruby] は 'mruby' +を返す。

+
+ +
+
+
/*
+ * Ruby engine.
+ */
+#define MRUBY_RUBY_ENGINE  "mruby"
+
+
+