けいぞうのメモ帳

言語設計のお勉強

mrubyを読む準備

mrubyコードリーディングが楽しいので準備から考えたこと、調べたことを纏めていきたいと思います。
まず、準備とmrubyの周囲についてを纏めてみました。

きっかけ

 大学が春休みになった("14/3/1時点~)。あと、OSSだった。
プログラミングできないのがつらいから出来る人のコードを読みたかった。
こういう記事を書いたら後戻りできなくなるかなと思った。(続けるために)

呟く

するとね


教えてくださった方々、ありがとうございます。
取っ掛かりが手に入ったので、やらねば損だと思った次第です。

始める

教えてもらった参考URL
mruby Complete
mrubyを読む - Code Reading Wiki
あと、Rubyそのもののリーディング記事も役に立ちます。
Rubyソースコード完全解説

目標

rubyにおけるgemに相当するmrubyのmrubgemを作れるようになる。
mrubyにpull-reqest を飛ばせるようになったら最高である。

 

ソースコードはここ

mruby/mruby · GitHub
githubで管理されています。
リリースがmruby v1.0.0 が存在していますが開発がガンガン行こうぜと進んでいるので
変化がすさまじいです。重要なデータ構造が変わったり(互換性あり)、Enumが実装されたり。
その辺のcommit logを書いている方もいます。
mruby master changesを始めます - mruby-master-changes
iijさんが不具合の修正のみをまとめた安定版リリースをしていたりするのでそっちをみたりするのも楽しい。
Releases · iij/mruby · GitHub

mruby周りのあれやこれや

名前の話

 mrubyは組み込み用のrubyです。なんでMの頭文字が付いてるかは
GithubWikiに書いてあります。
曰く
Embeddableのm
mimimal implementationのm
まつもとゆきひろ(Matz)のm
また、mrubyの初期コミッターになぜかまつもとさんがたくさんいるから(2人+Matz)
イニシャルにMが付く人であればmrubyv1.0.0の時点で
団体を除くほぼ全員にMが付いています、すごい。

luaとの話

 世の中にはLuaというOOPかつ軽量なスクリプトな言語が既に存在しています。
大雑把に言えば、mrubyとluaやっていることが一緒です。
それなのになんで?みたいな話も説明している方がいます。
Getting started with mruby - Matt Aimonetti
Wht not Lua?と分かりやすい問いかけです。
Luaのポジションを目指すのではなく、DSLを簡単に書けるRubyがあれば開発が楽しく
素早く出来てうれしい!みたいなことが書いてあります。

 Twitterを見ている感じだと、メモリ等の制約が緩い組み込み環境が今後10年くらいで増えていくから
そのような場でC/C++に固執したりシンプルすぎるLuaでキリキリするよりRubyでふんわりできたらいいな。
みたいなニュアンスを感じました。
また、Webアプリケーションの開発に一部mrubyを使い、requirement にRubyを必要とせず
Rubyを使う使い方もあると思います。
ちなみにライセンスはMITLです。気楽にWebアプリと纏めて配布できます。
mrubyの推進団体もあるようです。
特定非営利法人軽量Rubyフォーラム
正直、どういうものなのか自分はよくわかっていない。

情報源

主にTwitterです。各コミッターのTwitterやmrubyで検索掛けて眺めたり、コミッターのブログを見たり。
まだ、ドキュメント的なものが存在していないようです。githubを眺めていれば分かる
去年のmruby advent calendar も大変参考になります。
mruby Advent Calendar 2013 - Qiita
mrbgemはgithubのmrbgem-list に一覧があります。動かないものも割と存在しているそうです。

雑感

mrubyは公開されておよそ2年、Rubyでいうところの"97年くらいの状況でしょう。
まだまだ始まったばかりといった風で見ていてとても楽しいです。
mrubyはコードも綺麗で、その目的から量も少なめなのでOSSの勉強にもってこいだと思います。
さらにはCの書き方とRubyの仕様も知れて一石二鳥といったところ、素敵。

 情報収集と方法のまとめと個人の主観がごっちゃになった記事になってしまった。
 次はmruby/include/mruby.h とmruby/include/mruby/value.h を読んだ話を書ければいいな。