Topお知らせ【Documents】軽量Ruby普及・実用化促進ネットワーク
2022/3/3
【Documents】軽量Ruby普及・実用化促進ネットワーク
|
|
・Rubyとmrubyの違いについて |
|
mrubyはRubyのサブセットとして実装されているため言語としてのコア部分は共通しています。しかしながらmrubyは組込み向け用途に特化した部分がありRubyとの違いも見られます。この章では以下の項目に関してRubyとmrubyの違いを説明します。 |
|
・コンパイラ言語
・C言語との主従関係
・RubyGemsとmrbgems
・数値型の扱い
・正規表現
・扱える文字コード
・カスタマイズ |
|
・コンパイラ言語 |
|
Ruby |
mruby |
• Rubyスクリプトのインタプリタ
実行。 |
• mrubyスクリプトのインタプリ
タ実行。
• mrubyコンパイラでmrubyスクリプトをバイナリに変換。
コンパイル結果のバイナリをmruby VMで実行。
|
|
|
・C言語との主従関係 |
|
Ruby |
mruby |
• RubyからC言語モジュールの呼び出しが可能
( Rubyが主、C言語が従 ) |
• mrubyからC言語モジュールの呼び出しが可能
( mrubyが主、C言語が従 )
• C言語アプリケーションからmrubyの呼び出しが可能
( C言語が主、mrubyが従 ) |
|
|
・RubyGemsとmrbgems |
Ruby |
mruby |
• Ruby拡張ライブラリフレームワーク(RubyGems)
• C言語またはRubyで機能拡張
• 実行時にライブラリを追加 |
• mruby拡張ライブラリフレームワーク(mrbgems)
• C言語またはmrubyで機能拡張
• ビルド時にライブラリを追加
( 実行時のライブラリ追加はオ
プション ) |
|
|
・数値型の扱い(1) |
|
Ruby |
mruby |
Numeric
+--- Integer 整数型
| +--- Fixnum int範囲内の数
| +--- Bignum int範囲を超える数
+--- Float 浮動小数型
• 演算結果がint型を超える場合はBignumに拡張される。 |
Numeric
+--- Integer 整数型
| +--- Fixnum int範囲内の数
| Bignum対応なし
+--- Float 浮動小数型
• 演算結果がint型を超える場合はInteger overflow (RangeError) になる |
|
|
・数値型の扱い(2) |
|
mrubyの演算結果はmruby 2.1.2よりRubyの演算結果と同様になりました。
それ以前のバージョンでは演算結果の数値型は演算結果の値によって決定されます。
|
|
Ruby |
mruby |
• 演算結果の数値型は演算する値の型 (Integer / Float)によって決定される。
irb(main):001:0> 1 / 2
=> 0
irb(main):002:0> 2 * 2.5
=> 5.0
irb(main):003:0> |
% ./mirb
mirb - Embeddable Interactive Ruby Shell
> 1 / 2
=> 0
> 2 * 2.5
=> 5.0
> |
|
|
・正規表現 |
|
Ruby |
mruby |
正規表現(Regexpクラス)を標準装備
• 正規表現エンジンは固定
• 1.9以前 Oniguruma
• 2.0以降 Onigumo |
• 正規表現はオプション
※mrbgemsで提供
• 正規表現エンジンを選択可能
• mruby-onig-regexp
• mruby-pcre-regexp |
|
|
・扱える文字コード |
Ruby |
mruby |
• ASCII
• UTF-8
• Shift_JIS
• EUC-JP
• Windows-31J などなど... |
• ASCII
• UTF-8 (オプション) |
|
|
・カスタマイズ |
|
Ruby |
mruby |
• 実行環境用のバイナリを配布
(ソースコードも入手可能)
• バイナリ提供のためカスタマイ
ズ不能 |
• ソースコード配布
(そのままでは使えない)
• ヘッダファイル、ビルドスクリプト修正によるカスタマイズが
可能 |
|
|
・mruby API |
|
mrubyのclass.methodなどの情報は下記をご覧ください。 |
|
mruby official HP |
https://mruby.org/docs/api/ |