mruby入門 ~組込みソフト開発を効率アップ~ · mruby入門...

25
mruby入門 ~組込みソフト開発を効率アップ~ SEC先端技術入門ゼミ 九州工業大学 情報工学部 田中 和明 RubyAssociation 軽量Rubyフォーラム

Upload: others

Post on 04-Sep-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

mruby入門~組込みソフト開発を効率アップ~

SEC先端技術入門ゼミ

九州工業大学 情報工学部田中 和明

RubyAssociation軽量Rubyフォーラム

質問 - 1● Ruby/mrubyを知っていますか?

A :Rubyもmrubyも知っているB :Rubyは知っている

 (mrubyは知らない)C :Rubyもmrubyも知らない

Rubyとmruby● Ruby

– オブジェクト志向プログラム言語ISO30170 / JIS X 3017

– Webアプリケーション開発では標準的な言語● mruby

– Rubyの仕様に従って,軽量化した言語– 実行時に必要なリソースを少なくする

質問 - 2● 組込みシステムの開発費内訳

– (1) (2) (3) に入るのは?

(1)

(2)

(1)(3)

システム開発費

その他共通費用

A :ハードウェア(電子系)B :ハードウェア(機構系)C :ソフトウェア

IPA 「組込みソフトウェア産業の現状と課題」より抜粋

組込みシステムの開発をスムーズに行うには?

● 状況に応じて,適切な手法を選択する

● 選択肢の一つとしてmrubyを

銀の弾丸は無い

武器の種類は多いほど有利である

Rubyが使われる理由● ソフトウェア開発がしやすい

– 開発者のためのプログラム言語である(まつもとゆきひろ氏)

● プログラムの可読性が高い– 自分のプログラム,他人のプログラムを

理解しやすい● 多くのライブラリが用意されている

質問 - 3Rubyのプログラム

● 次のプログラムの振る舞いを推測できますか?

ary = [1, 2.3, "abc", [1,2]]

for data in ary do p data*2end

◯ ×

一応,解答です

ary = [1, 2.3, "abc", [1,2]]

for data in ary do p data*2end

24.6"abcabc"[1, 2, 1, 2]

Rubyで組込みソフトを開発

● Rubyインタープリタが多くの資源を必要とする– 数十MBのメモリ– 数百msの初期化

かなり無理

mruby開発へ● Rubyの特徴(開発者に優しい)を

組込みソフト開発へ導入する

● 経済産業省地域イノベーション創出研究開発事業「軽量Rubyを用いた組込みプラットフォームの研究・開発」

● 2010年~2012年

mrubyのその後● コミュニティによる開発が継続

● NPO法人 軽量Rubyフォーラムmrubyのリリース,技術情報開発方針,ツール開発

http://www.mruby.org/

http://forum.mruby.org/

Rubyプログラムの実行Ruby

ソースコード

コードの解析

中間コードの生成

実行

質問 - 4● Rubyプログラム実行で,

もっとも資源を使う処理は? Rubyソースコード

A : コードの解析

B : 中間コードの生成

C : 実行

mruby● Rubyコンパイラを作れば良い!

● CやJavaのようなコンパイルでは不十分Rubyの良さが失われてしまう

Rubyは動的な言語である

(参考)動的とは?

ary = [1, 2.3, "abc", [1,2]]

for data in ary do p data*2end

この「*2」の具体的な実装はどうする?実行される時まで,実行内容はわからない

意義あり!

(参考)動的とは?● 先の例は, C++の仮想関数でも実現できる● では以下のようなプログラムは?

def func(n) return n+1end

if rand(1..2)==1 then def func(n) return n*2 endend

p func(5)

頑張ればできると思うが...

mruby● Rubyに特化したコンパイラと実行環境

● さまざまな実行環境に対応する– 他機種への対応:– 実行環境に依存する部分だけを

実装するだけで良い

さらに・・・

mrubyコンパイラ● Rubyソースコードをコンパイルして,バイトコードを得る– バイトコード: バイナリ形式

mruby VM● mrubyのバイトコードを実行する

バイトコードの実行

デバイス依存部分

デバイス

mruby VM新規デバイスへの対応:この部分を開発する

gems● mrubyで利用できるライブラリ● mrubyVMの機能を追加できる● (例) socketを使いたいIIJが github で公開している gem を入れる次の1行を「build_config.rb」に追加する

conf.gem :github => 'iij/mruby-socket'

(OSのsocketシステムコールのwrapper)

質問 - 5● mrubyVMが必要とするメモリ量は?

A :20KBB :200KBC :2MBD :20MB

答え● オープンソース版(githubで公開中)

● 研究開発段階

RAM=150KBROM=250KB

RAM=20KBROM=40KB

質問 - 6● 最後に,私からの質問です.● もっとも期待するのはどれですか?

(1つだけ)A :開発環境

コンパイラや書き込みツールなどB :評価ボードの入手

実際に試してみたいC :技術情報や事例紹介

検証したい,情報が必要D :コンサルティング

自社の製品・サービスに適用できるか?

DEMO

参考資料● mrubyの入手

● mrubyVMのビルドに必要な環境

http://www.mruby.org/http://forum.mruby.org/

Cコンパイラ(C99相当, VMを生成する)bison(最初に一度だけ必要)Ruby(ビルド処理に必要)

ターゲットデバイス用のクロス開発環境