summaryrefslogtreecommitdiffhomepage
path: root/vhosts/blog/content/posts/2021-10-02/ruby-detect-running-implementation.ndoc
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2023-09-20 19:56:52 +0900
committernsfisis <nsfisis@gmail.com>2023-09-20 19:56:57 +0900
commita84908b7e8a0e2423afd6b836eccf27a420270b4 (patch)
tree00204b62358f8c57fcb36f601db360626484cc1a /vhosts/blog/content/posts/2021-10-02/ruby-detect-running-implementation.ndoc
parent0b488f85380f964c40b0b9aae69c6611bc7978bc (diff)
downloadnsfisis.dev-a84908b7e8a0e2423afd6b836eccf27a420270b4.tar.gz
nsfisis.dev-a84908b7e8a0e2423afd6b836eccf27a420270b4.tar.zst
nsfisis.dev-a84908b7e8a0e2423afd6b836eccf27a420270b4.zip
feat(blog/nuldoc): change content format from DocBook to NulDoc
Diffstat (limited to 'vhosts/blog/content/posts/2021-10-02/ruby-detect-running-implementation.ndoc')
-rw-r--r--vhosts/blog/content/posts/2021-10-02/ruby-detect-running-implementation.ndoc118
1 files changed, 118 insertions, 0 deletions
diff --git a/vhosts/blog/content/posts/2021-10-02/ruby-detect-running-implementation.ndoc b/vhosts/blog/content/posts/2021-10-02/ruby-detect-running-implementation.ndoc
new file mode 100644
index 00000000..cd999882
--- /dev/null
+++ b/vhosts/blog/content/posts/2021-10-02/ruby-detect-running-implementation.ndoc
@@ -0,0 +1,118 @@
+---
+[article]
+title = "【Ruby】 自身を実行している処理系の種類を判定する"
+description = "Ruby には複数の実装があるが、自身を実行している処理系の種類をスクリプト上からどのように判定すればよいだろうか。"
+tags = [
+ "ruby",
+]
+
+[[article.revisions]]
+date = "2021-10-02"
+remark = "Qiita から移植"
+---
+<article>
+ <note>
+ この記事は Qiita から移植してきたものです。
+ 元 URL: <a href="https://qiita.com/nsfisis/items/74d7ffeeebc51b20d791">https://qiita.com/nsfisis/items/74d7ffeeebc51b20d791</a>
+ </note>
+ <p>
+ Ruby
+ という言語には複数の実装があるが、それらをスクリプト上からどのようにして
+ programmatically に見分ければよいだろうか。
+ </p>
+ <p>
+ <code>Object</code> クラスに定義されている <code>RUBY_ENGINE</code>
+ という定数がこの用途に使える。
+ </p>
+ <p>
+ 参考:
+ <a href="https://docs.ruby-lang.org/ja/latest/method/Object/c/RUBY_ENGINE.html">Object::RUBY_ENGINE</a>
+ </p>
+ <p>
+ 上記ページの例から引用する:
+ </p>
+ <codeblock language="shell-session">
+ <![CDATA[
+ $ 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"
+ ]]>
+ </codeblock>
+ <p>
+ それぞれの処理系がどのような値を返すかだが、stack overflow
+ に良い質問と回答があった。
+ </p>
+ <p>
+ <a href="https://stackoverflow.com/a/9894232">What values for RUBY_ENGINE
+ correspond to which Ruby implementations?</a> より引用:
+ </p>
+ <blockquote>
+ <table>
+ <thead>
+ <tr>
+ <td>RUBY_ENGINE</td>
+ <td>Implementation</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>&lt;undefined&gt;</td>
+ <td>MRI &lt; 1.9</td>
+ </tr>
+ <tr>
+ <td>`ruby'</td>
+ <td>MRI &gt;= 1.9 or REE</td>
+ </tr>
+ <tr>
+ <td>`jruby'</td>
+ <td>JRuby</td>
+ </tr>
+ <tr>
+ <td>`macruby'</td>
+ <td>MacRuby</td>
+ </tr>
+ <tr>
+ <td>`rbx'</td>
+ <td>Rubinius</td>
+ </tr>
+ <tr>
+ <td>`maglev'</td>
+ <td>MagLev</td>
+ </tr>
+ <tr>
+ <td>`ironruby'</td>
+ <td>IronRuby</td>
+ </tr>
+ <tr>
+ <td>`cardinal'</td>
+ <td>Cardinal</td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
+ <p>
+ なお、この質問・回答は
+ 2014年になされたものであり、値は変わっている可能性がある。MRI (aka
+ CRuby) については執筆時現在 (2020/12/8) も <code>'ruby'</code>
+ が返ってくることを確認済み。
+ </p>
+ <p>
+ この表にない主要な処理系として、https://mruby.org[mruby] は <code>'mruby'</code>
+ を返す。
+ </p>
+ <p>
+ <a href="https://github.com/mruby/mruby/blob/ed29d74bfd95362eaeb946fcf7e865d80346b62b/include/mruby/version.h#L32-L35">mruby
+ 該当部分のソース</a> より引用:
+ </p>
+ <codeblock language="c">
+ <![CDATA[
+ /*
+ * Ruby engine.
+ */
+ #define MRUBY_RUBY_ENGINE "mruby"
+ ]]>
+ </codeblock>
+</article>