(メモ。詳しくはあとで追記するかも。)
"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をする→一部した)