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