TokyoRubyKaigi11に行ってきました。プログラムは以下のとおり、
表題 | 発表者 |
---|---|
Streem | "日経Linuxライター" まつもとゆきひろ |
mruby/c | 九州工業大学 田中 和明 |
Rubyに型があると便利か | 株式会社spice life 栗原 勇樹 |
最速ウェブサーバの作り方 | 株式会社ディー・エヌ・エー 奥一穂 |
アプリケーションへのRubyインタープリターの組み込み | 株式会社クリアコード 須藤功平 |
Re: Pattern Matching in Ruby | 株式会社野村総合研究所 辻本 和樹 |
Image Recognition and Code that shouldn't exist | Aaron Patterson |
IMF: Image Manipulation Framework | リクルートホールディングス 村田 賢太 |
Optcarrot: A pure-ruby NES emulator | 遠藤侑介 |
この中で最も私が関心を持ったのは 九州工業大学 田中 和明 先生の mruby/c のセッションです。発表内容にはコードを含む(つまり実装、開発の話をする)ことということでしたので、mruby/cという言葉が初耳(しかもweb畑)のわたしはすこし遠くからmruby/cを眺めてみようと思います。
田中先生の発表を概要を傾聴させていただいた限りでまとめ、その後それについて自分なりに考察していきたいと思います。
(田中先生の発表のスライドはこちら, 事前インタービューはこちら)
mruby/cについて(発表の内容)
しまねソフト研究開発センターで開発されているmrubyよりもさらに小型なrubyの実装です。
mrubyのVMはだいたい400KB以下ほどの容量であるのに比べ、mruby/cは40KBのほどに抑えられているそうです。
このサイズになるとArmよりもさらに小さいワンチップマイコン(そのなかで比較的大きめのもの)で実装が可能になるようでそこを目指しているということで、以下のような特徴があるということでした。
##GC(garbage collecter)がない
mruby/cにはガベージコレクターがありません。
ではどうやって動かしているのかというと実行するプログラムは非常に小さなものにかぎり、
そのプログラムが終了したタイミングで固有メモリ領域を一度初期化するという方法をとっています。
もし長いプログラムを実行したい場合、どうすれば良いのかについては次のConcurrencyで実現しているとのことでした。
##Concurrencyの確保
mruby/cはOSなし(つまりベアメタル)で動作するにもかかわらず
Concurrencyを確保しています。
マイコンクラスのコンピュータで動作させることを前提としているので、
複数コアでの実行ではなく、1コアでの実行になるため、
CPU時間を分割して複数のプログラムが同時に実行される(ように見える)
ようにしています。
##起動時間の特性
プログラムの起動時には以下のプロセスを実行します。
小さなプログラムコードを起動する際に非常に高速に起動するようになっています(ruby, mrubyとの比較については田中先生のスライドを参照ください)
- VMを初期化します
- クラスを作成します
- クラス、メソッドをメモリーに登録します
- メソッドのエントリーポイントを作成します
- メソッドのシンボルを作成します
- メソッドのハッシュテーブルにエレメントを追加します