2018/03/10(土) [n年前の日記]
#2 [ruby][mruby] mrubyのmrbgemを試す
mruby に機能を追加していく時は、mrbgem なるものを使うらしい。build_config.rb を編集して、追加したいアレコレを記述してビルドし直して、追加機能入りの mruby を作る…のだとか。
実際試してみないと感じが掴めないなと。試してみたり。
実際試してみないと感じが掴めないなと。試してみたり。
◎ mruby-jsonを追加。 :
JSONのパースができるライブラリがあるらしいので追加してみた。
_mattn/mruby-json
"mrubyのファイル一式を置いてある場所"\build_config.rb を編集。
mruby をビルドし直し。自分の環境は、Windows10 x64 + Visual Studio 2015 Community なので、スタートメニューから、Visual Studio 2015 → 開発者コマンドプロンプト for 2015 を起動。cd hoge で目的のディレクトリに移動してから、以下。
出来上がった .exe は、少しファイルサイズが増えた。
mirb を起動して動作確認。
機能として追加されたっぽい。なるほど、こういう感じで使うのか…な。
_mattn/mruby-json
"mrubyのファイル一式を置いてある場所"\build_config.rb を編集。
# Use mrbgemsと書かれたあたりのところに、以下の行を追加。
conf.gem :github => 'mattn/mruby-json'
mruby をビルドし直し。自分の環境は、Windows10 x64 + Visual Studio 2015 Community なので、スタートメニューから、Visual Studio 2015 → 開発者コマンドプロンプト for 2015 を起動。cd hoge で目的のディレクトリに移動してから、以下。
ruby ./minirake
出来上がった .exe は、少しファイルサイズが増えた。
mirb を起動して動作確認。
> mirb mirb - Embeddable Interactive Ruby Shell > jsontext = '{"x":100, "y":200, "names":["hoge", "fuga", "piyo"]}' => "{\"x\":100, \"y\":200, \"names\":[\"hoge\", \"fuga\", \"piyo\"]}" > hash = JSON::parse(jsontext) => {"x"=>100, "y"=>200, "names"=>["hoge", "fuga", "piyo"]} > hash["x"] => 100 > hash["y"] => 200 > hash["names"].each {|s| puts s} hoge fuga piyo => ["hoge", "fuga", "piyo"] > exit
機能として追加されたっぽい。なるほど、こういう感じで使うのか…な。
◎ mruby-randomは追加できなかった。 :
疑似乱数が得られる、Random というクラスもあるらしいので追加しようとしたけれど…。エラーが出る…。
_matsumotory/mruby-random: mruby-random
build_config.rb を編集。以下を追加。
ビルド。
エラーが出る…。
どういう意味のエラーメッセージだろう…。
_matsumotory/mruby-random: mruby-random
build_config.rb を編集。以下を追加。
conf.gem :git => 'https://github.com/matsumoto-r/mruby-random.git'
ビルド。
ruby ./minirake
エラーが出る…。
rake aborted! Don't know how to rake D:/Ruby/mruby/mruby/build/host/mrbgems/mruby-random/src/mrb_random.obj
どういう意味のエラーメッセージだろう…。
◎ mruby-tinymtを追加。 :
疑似乱数に関しては、mruby-TinyMT という版もあるらしい。Ruby で使われてる Random、というか
_Mersenne twister
に、何か制限を加えて軽くした版、とかなんとか。
_matsumotory/mruby-tinymt: rand() and srand() method with TinyMT
_Tiny Mersenne Twister (TinyMT)
build_config.rb を編集。以下を追加。
こちらはビルドが通った。
動いてるっぽい。
_matsumotory/mruby-tinymt: rand() and srand() method with TinyMT
_Tiny Mersenne Twister (TinyMT)
build_config.rb を編集。以下を追加。
conf.gem :git => 'https://github.com/matsumoto-r/mruby-tinymt.git'
ruby ./minirake
こちらはビルドが通った。
> mirb mirb - Embeddable Interactive Ruby Shell > tmt = TinyMT.new(0xf50a1d49, 0xffa8ffeb, 0x0bf2bfff) => #<TinyMT:0xd28ad0 tinymt32_ctx=#<Object:0xd28ab0>> > tmt.srand(5) => nil > tmt.rand() => 0.061755396425724 > tmt.rand() => 0.47946119308472 > tmt.rand(6) => 5 > tmt.rand(6) => 5 > tmt.rand(6) => 3 > tmt.rand(6) => 1 > tmt.rand(6) => 5 > exit
動いてるっぽい。
◎ その他のライブラリ。 :
[ ツッコむ ]
以上です。