Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

"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

https://github.com/kou/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をする→一部した)

takahashim
Rubyist. Founder and CEO of Tatsu-zine Publishing Inc.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした