組み込みC言語プログラマのためのmruby入門(中編) ―― mrubyをお手軽に体験する!

邑中 雅樹

tag: 組み込み

技術解説 2012年11月 7日

●Ruby,mrubyとオブジェクト指向

 Ruby(mruby)を使いこなすには,Rubyがオブジェクト指向言語であるという理解が大事です.しかし,オブジェクト指向を理解しないとRubyが使えないということはありません.そのことは,本稿がここまでに,オブジェクト指向の性質を用いた説明をせずに済んでいることからも,お分かりいただけるでしょう.

 mrubyのオブジェクト指向言語としての性質は,後述する実装上の制約を除くと,Rubyと同じです.ただし,ライブラリなどはサブセットですから,参考書の例題はそのままでは使えない場合があります.Rubyを題材にした参考書で理解を深め,それをmrubyで活用するという段取りが効率的だと思います.

 Rubyは,いくつかのシンタックス・シュガー(文法上の飾り)を除けば,純粋オブジェクト指向言語の性質を持っています.つまり,Rubyの中に存在するあらゆる値はデータとメソッドを持っています.

 C言語のオブジェクト指向拡張であるC++言語は,基本型(int, char など)はデータを持てます.しかし,メソッドは持てませんので,純粋オブジェクト指向言語ではありません.Javaも同じように純粋オブジェクト指向ではありません.

 純粋オブジェクト指向であることは,絶対的な優位ということではありません.実行効率(処理速度やメモリ専有量)についてデメリットが出ることもあります.しかし,すべてをオブジェクトとみなせることで学習が簡単になったり,見通しのよいプログラムを書きやすくなったりというメリットもあります.実行効率の問題については,JITコンパイラなどの技術で,ある程度の解決を期待できます.

 C言語にはオブジェクト指向のサポートはありません.よって,C言語プログラマ向けという本稿の趣旨の範囲内で,詳細を説明することは無理です.ここでは,メソッド呼び出しの方法と,純粋オブジェクト指向言語であるはずの mrubyでオブジェクト指向を意識しないでプログラミングを行えるのかという2点を取り上げたいと思います.


●Ruby(mruby)でのメソッド呼び出し

 オブジェクトのメソッドを呼び出すには,オブジェクトとメソッドの間を「.」(ピリオド)でつなぎます.この記法は,Cの構造体のメンバ呼び出しと同じです.また,Javaも同じ記法でメソッドを呼び出します.

1000.to_s
=> "1000"

 ここでは,1000という値が持っているto_sというメソッドを呼び出しました.to_sメソッドは,自分の値の文字列表現を返します.

 Rubyでは,演算子もメソッド呼び出しで実現されています.

> 2.+ 1
=> 3

 数値オブジェクト2の+メソッドを,引き数1で呼び出しています.結果は 2 + 1 == 3 です.


●トップ・レベル・オブジェクト

 Rubyがオブジェクト指向ならば,メソッドはオブジェクトに属するはずです.しかし,本稿では,クラスの定義やインスタンスの生成といった,オブジェクトの操作を行わずにメソッドを生成していました.これは,Ruby がちょっとした仕掛けを提供しているからです.

 Ruby の実行環境は,トップ・レベル・オブジェクトという特殊なオブジェクトがこっそり用意されています.クラスやオブジェクト・インスタンスを明示しない変数やメソッドの操作は,この,トップ・レベルに存在するオブジェクトへの操作として処理されます.試しに,オブジェクトが nilであるかどうかを問い合わせるメソッドnil?を実行してみます.

> nil?
=> false

 トップ・レベル・オブジェクトへの問い合わせとなりますので,nilではないと返ってきます.

 ところが,mrubyでは,最近までトップ・レベル・オブジェクトに関する実装が簡易的なもので,nil?メソッドに対してtrueを返していました(本稿執筆時点では修正済み).このように,深遠に近づくとmrubyにはまだまだ粗があります.明らかになっている実装上のバグはgithubリポジトリのissue trackにありますので,随時参照することをお薦めします.

* * *

 Rubyは自由度が高い言語です.全貌を理解して使いこなす楽しみもある一方,オブジェクト指向設計や,メタプログラミングなど,濃い話題に走りがちな面もあります.そのため,敷居が高いと感じている方もいらっしゃるかと思います.

 しかし,濃い話題に合わせる必要は必ずしもありません.手続き型の構造化プログラミング言語として使うことができるだけの,懐の広さも持ち合わせています.まずは触れていただいて,段階的に生産性を高めるための機能を習得していくことをお薦めします.

 前回説明した通り,mrubyは,既存のアプリケーションを拡張するために組み込まれることも想定しています.次回は,mrubyをアプリケーションに組み込む方法について解説します.また,想定される適用分野について検討し,組み込みJavaなどの類似技術との違いについても解説します.


むらなか・まさき

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日