LoginSignup
13
10

More than 5 years have passed since last update.

mrubyとCRubyの非互換とその対応方法

Last updated at Posted at 2015-01-04

(メモ。詳しくはあとで追記するかも。)

"foo" "bar" の文字列連結ができない

"foo" + "bar" を使う。

defined?(Foo)がエラーになる

const_defined?(:Foo)を使う。

mrubyにdefined?(Foo)が実装されていない理由は、Fooが未定義でもエラーにさせないために特殊な実行が行われており、それを嫌ったためだったはず。

:"foo#{a}bar#{b}"形式のSymbol定義がエラーになる

"foo#{a}bar#{b}".to_symを使う。

$:等の変数がない

$LOAD_PATH等はあったりするのでこちらを使う。

RUBY_PATCHLEVEL等の定数がない

適当に定義して回避する?

なお、2016年現在のmrubyにはパッチレベルの概念がない。github:mruby/mrubyのmasterとmruby forumのリリース版のみ。

RbConfigがない

同上。

なお、mrubyはクロス開発もごく自然に行われるため、ビルド時のOSの情報とかは役に立たないことがあるのに注意。

IOがない

github:iij/mruby-ioを使う。

Dirがない

github:iij/mruby-dirを使う。

Dir.glob は github:gromnitsky/mruby-dir-glob を使う。

tmpdirがない

github:iij/mruby-tempfileを使う。

requireがない

github:iij/mruby-requireを使う。

ENVがない

github:iij/mruby-envを使う。

Regexpがない

github:iij/mruby-regexp-pcreやgithub:mattn/mruby-onig-regexpを使う。

Iconvがない

github:mattn/mruby-iconvを使う。

fileutils.rb、pp.rb等がない

fileutilsに関してはgithub:gromnitsky/mruby-fileutils-simple があったりする(実装は力技ですごい)のでこの辺を使ったりする。

pp.rbの代わりは書いた -> https://github.com/takahashim/mruby-pp

Kernel#execがない

Kernel#systemならgithub:iij/mruby-processにあったりするのでこちらでもよければこれを使う。

あと、github:haconiwa/mruby-execがある(動作未確認)。

at_exitがない

github:ksss/mruby-at_exit を使う。

mruby本家にat_exitがない理由については http://ksss9.hatenablog.com/entry/2016/08/19/224631 を参照。そもそもインタプリタの実行終了とプロセスの終了が一致するCRubyと、インタプリタが終了してもプロセスが終了するとは限らないmrubyでat_exitをどう揃えるべきか、という問題がある。なお、ISO Rubyではat_exitは定義されていない。

File.executable?がない

github:iij/mruby-io にあるかと思ったらなかった。自力でなんとかすべきか。

executable?はOSに依存する概念なのでいろいろめんどくさい、という難点がある。

その他いろいろ動かないものがある

(自力で直せそうなら修正してpull requestをする→一部した)

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10