SlideShare a Scribd company logo
1 of 16
Download to read offline
mrubyデバッガの紹介
九州工業大学
田中 和明
軽量Rubyフォーラム
2015年1月30日
mrubyの紹介
● mruby – 軽量Ruby
– Rubyと同じ文法
– 実行に必要な資源が少ない
– Cによる機能拡張が容易
mrubyコンパイラ
mrubyVM
● Rubyプログラムを mrubyコンパイラ でコンパイル
mrubyバイトコード を作成する
● mrubyバイトコード を,ターゲットデバイスに入れる
● mrubyバイトコード を,mrubyVMで実行する
開発環境での開発に必要
mrubyプログラム(デバイス非依存)
ターゲットデバイスでの実行に必要
mrubyプログラムの
作成と動作(1)
def sum(n)
s = 0
while n>0 do
s += n
n -= 1
end
s
end
puts sum(10)
mrbc
2 000 OP_ENTER 1:0:0:0:0:0:0
3 001 OP_LOADI R3 0 ; R3:s
4 002 OP_JMP 010
5 003 OP_MOVE R4 R3 ; R3:s
5 004 OP_MOVE R5 R1 ; R1:n
5 005 OP_ADD R4 :+ 1
5 006 OP_MOVE R3 R4 ; R3:s
6 007 OP_MOVE R4 R1 ; R1:n
6 008 OP_SUBI R4 :- 1
6 009 OP_MOVE R1 R4 ; R1:n
4 010 OP_MOVE R4 R1 ; R1:n
4 011 OP_LOADI R5 0
4 012 OP_GT R4 :> 1
4 013 OP_JMPIF R4 003
8 014 OP_RETURNR3 return ; R3:sRubyプログラム
mrunyバイトコード
コンパイル
* 実際にはバイナリ
* デバイスアーキテクチャに依存しない
 (エンディアン,アラインメント)
mrubyプログラムの
作成と動作(2)
2 000 OP_ENTER 1:0:0:0:0:0:0
3 001 OP_LOADI R3 0 ; R3:s
4 002 OP_JMP 010
5 003 OP_MOVE R4 R3 ; R3:s
5 004 OP_MOVE R5 R1 ; R1:n
5 005 OP_ADD R4 :+ 1
5 006 OP_MOVE R3 R4 ; R3:s
6 007 OP_MOVE R4 R1 ; R1:n
6 008 OP_SUBI R4 :- 1
6 009 OP_MOVE R1 R4 ; R1:n
4 010 OP_MOVE R4 R1 ; R1:n
4 011 OP_LOADI R5 0
4 012 OP_GT R4 :> 1
4 013 OP_JMPIF R4 003
8 014 OP_RETURNR3 return ; R3:s
mrunyバイトコード
mrubyVM
ロード ライブラリ ドライバ
mrubyバイトコードを実行
mrubyを使った
組込みソフト開発(1)
●
(準備)
最初に「mrubyXXX」を準備する
– 開発用に,mrubyをビルドする
– 「mrubyコンパイラ」「mrubyVM」
– ターゲットデバイス用に,mrubyをビルドする
(クロスコンパイラを使う)
(必要なライブラリなども作成しておく)
– 「mrubyVM」
開発環境での開発に必要
mrubyプログラム(デバイス非依存)
ターゲットデバイスでの実行に必要
mrubyを使った
組込みソフト開発(2)
●
(開発)
– Rubyでプログラムを作成する
– mrubyコンパイラで バイトコード を生成する
– ターゲットデバイスに バイトコード を入れる
(例えば,SDカード)
– mrubyVMで実行する
開発環境での開発に必要
mrubyプログラム(デバイス非依存)
ターゲットデバイスでの実行に必要
Tips
● mrubyVMでバイトコードを実行するには?
– バイトコードのファイル名
– バイトコードが格納されているポインタ
● Cによる関数の拡張は?
– Cの関数,Rubyのクラス/メソッドの
マッピングの行を記述する
mrb_define_method(mrb, fl, "+", flo_plus,MRB_ARGS_REQ(1));
Rubyのクラス名
(Floatクラスになっている)
Rubyのメソッド名
Cの関数名 引数の数
「1.2 + 2.3」は,
「(1.2).+(1.3)」なので
引数は 1 つ
(numeric.c より抜粋)
mrubyデバッガ
● mruby 1.1.0
– GitHub
– 軽量Rubyフォーラムから入手できます
https://github.com/mruby/mruby
http://forum.mruby.org/
mrubyデバッガ
● mrubyVM内のバイトコードをデバッグする
– 実行
– ブレークポイント
– 式評価(変数の参照)
– コマンドライン
DEMO
●
実行
●
ブレークポイント
●
式の評価
デバッガ仕様
● すべてのデバッガの機能はAPIとして利用できる
– 機能拡張
– 開発環境(IDEなど)からの呼び出し
– リモートデバッグ
mrbgemを使った開発
● Cによるmrubyの拡張の手法
● mrubyソースコードを書き換える
(あまりオススメできない)
● mrbgemsを利用する
– gitを使う
ライブラリ
● Git または Githubを使う
– ライブラリをソースコードから独立させて,
ビルド時に組み込む
– 「build_config.rb」ファイルに1行追加するだけ
conf.gem :github => 'kaz0505/mruby-gpio-raspi'
ラズベリーPi 用のGPIOクラスライブラリ
conf.gem :github => 'kaz0505/mruby-gpio-emuration'
PC用のGPIOエミュレーションクラスライブラリ
ライブラリを利用した例
● GPIOの例
– ラズベリーPi, PCエミュレーション 共通
Gpio.pinMode 1, Gpio::OUTPUT
Gpio.pinMode 2, Gpio::INPUT
Gpio.digitalWrite 1, Gpio::HIGH
Gpio.digitalWrite 2, Gpio::LOW

More Related Content

What's hot

インフラエンジニアのお仕事(オンプレ)
インフラエンジニアのお仕事(オンプレ)インフラエンジニアのお仕事(オンプレ)
インフラエンジニアのお仕事(オンプレ)Shinnosuke Tokuda
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Jubatus 新機能ハイライト
Jubatus 新機能ハイライトJubatus 新機能ハイライト
Jubatus 新機能ハイライトJubatusOfficial
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)三七男 山本
 
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −Kohei Asai
 
mruby IoTプラットフォーム
mruby IoTプラットフォームmruby IoTプラットフォーム
mruby IoTプラットフォームHiromasa Ishii
 
Config mapについて
Config mapについてConfig mapについて
Config mapについてArata Honda
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRubymametter
 
Action Cableで簡易チャットを作ってみた
Action Cableで簡易チャットを作ってみたAction Cableで簡易チャットを作ってみた
Action Cableで簡易チャットを作ってみたKazuhiro Nishiyama
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたYou&I
 
Ruby on cygwin (2019/8月号)
Ruby on cygwin (2019/8月号)Ruby on cygwin (2019/8月号)
Ruby on cygwin (2019/8月号)fd0
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見るkishima7
 
極小Rubyボードの紹介
極小Rubyボードの紹介極小Rubyボードの紹介
極小Rubyボードの紹介三七男 山本
 
C# 7.2 の新機能
C# 7.2 の新機能C# 7.2 の新機能
C# 7.2 の新機能m ishizaki
 

What's hot (20)

Tizen native application
Tizen native applicationTizen native application
Tizen native application
 
2018 07-23
2018 07-232018 07-23
2018 07-23
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
インフラエンジニアのお仕事(オンプレ)
インフラエンジニアのお仕事(オンプレ)インフラエンジニアのお仕事(オンプレ)
インフラエンジニアのお仕事(オンプレ)
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Jubatus 新機能ハイライト
Jubatus 新機能ハイライトJubatus 新機能ハイライト
Jubatus 新機能ハイライト
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)
 
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
 
mruby IoTプラットフォーム
mruby IoTプラットフォームmruby IoTプラットフォーム
mruby IoTプラットフォーム
 
Kansai mrb gr_sakura
Kansai mrb gr_sakuraKansai mrb gr_sakura
Kansai mrb gr_sakura
 
Config mapについて
Config mapについてConfig mapについて
Config mapについて
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
 
JNuma Library
JNuma LibraryJNuma Library
JNuma Library
 
Action Cableで簡易チャットを作ってみた
Action Cableで簡易チャットを作ってみたAction Cableで簡易チャットを作ってみた
Action Cableで簡易チャットを作ってみた
 
Pykonjp2014
Pykonjp2014Pykonjp2014
Pykonjp2014
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
Ruby on cygwin (2019/8月号)
Ruby on cygwin (2019/8月号)Ruby on cygwin (2019/8月号)
Ruby on cygwin (2019/8月号)
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
 
極小Rubyボードの紹介
極小Rubyボードの紹介極小Rubyボードの紹介
極小Rubyボードの紹介
 
C# 7.2 の新機能
C# 7.2 の新機能C# 7.2 の新機能
C# 7.2 の新機能
 

Viewers also liked

ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発Kazuaki Tanaka
 
M2M製品開発におけるmrubyの効果160726
M2M製品開発におけるmrubyの効果160726M2M製品開発におけるmrubyの効果160726
M2M製品開発におけるmrubyの効果160726shimane-itoc
 
mrubyでゲームを書いてみた
mrubyでゲームを書いてみたmrubyでゲームを書いてみた
mrubyでゲームを書いてみたYousuke Kuroda
 
20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料hiroponz
 
mruby/c in TokyoRubyKaigi#11
mruby/c in TokyoRubyKaigi#11mruby/c in TokyoRubyKaigi#11
mruby/c in TokyoRubyKaigi#11Kazuaki Tanaka
 
「mruby/c」の利用期待分野~M2Mでの利用~160726
「mruby/c」の利用期待分野~M2Mでの利用~160726「mruby/c」の利用期待分野~M2Mでの利用~160726
「mruby/c」の利用期待分野~M2Mでの利用~160726shimane-itoc
 

Viewers also liked (9)

ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
 
M2M製品開発におけるmrubyの効果160726
M2M製品開発におけるmrubyの効果160726M2M製品開発におけるmrubyの効果160726
M2M製品開発におけるmrubyの効果160726
 
mrubyでゲームを書いてみた
mrubyでゲームを書いてみたmrubyでゲームを書いてみた
mrubyでゲームを書いてみた
 
20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料
 
Mrubyまとめ v01
Mrubyまとめ v01Mrubyまとめ v01
Mrubyまとめ v01
 
Mrubyの始め方
Mrubyの始め方Mrubyの始め方
Mrubyの始め方
 
mrubyのJIT
mrubyのJITmrubyのJIT
mrubyのJIT
 
mruby/c in TokyoRubyKaigi#11
mruby/c in TokyoRubyKaigi#11mruby/c in TokyoRubyKaigi#11
mruby/c in TokyoRubyKaigi#11
 
「mruby/c」の利用期待分野~M2Mでの利用~160726
「mruby/c」の利用期待分野~M2Mでの利用~160726「mruby/c」の利用期待分野~M2Mでの利用~160726
「mruby/c」の利用期待分野~M2Mでの利用~160726
 

Similar to Ruby東京プレゼン 資料

mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるmruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるRyosuke Akiyama
 
軽量Ruby『mruby』について
軽量Ruby『mruby』について軽量Ruby『mruby』について
軽量Ruby『mruby』についてRyosuke MATSUMOTO
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Takashi Sogabe
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしyamanekko
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Developers Summit
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみようTakuya Azumi
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329shimane-itoc
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1Takuya Mukohira
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化NIFTY Cloud
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updatemganeko
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise EnvironmentTomoya Kawanishi
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発Shuto Suzuki
 
アプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込みアプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込みKouhei Sutou
 
mrubyを使った クラウド連携
mrubyを使った クラウド連携mrubyを使った クラウド連携
mrubyを使った クラウド連携三七男 山本
 
Tokyurubykaigi05
Tokyurubykaigi05Tokyurubykaigi05
Tokyurubykaigi05yamanekko
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 

Similar to Ruby東京プレゼン 資料 (20)

mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるmruby を C# に 組み込んでみる
mruby を C# に 組み込んでみる
 
軽量Ruby『mruby』について
軽量Ruby『mruby』について軽量Ruby『mruby』について
軽量Ruby『mruby』について
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
Mod mrubyについて
Mod mrubyについてMod mrubyについて
Mod mrubyについて
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
さくルビー.Net誕生
さくルビー.Net誕生さくルビー.Net誕生
さくルビー.Net誕生
 
Hello Ruby
Hello RubyHello Ruby
Hello Ruby
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise Environment
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
アプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込みアプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込み
 
mrubyを使った クラウド連携
mrubyを使った クラウド連携mrubyを使った クラウド連携
mrubyを使った クラウド連携
 
Tokyurubykaigi05
Tokyurubykaigi05Tokyurubykaigi05
Tokyurubykaigi05
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 

Ruby東京プレゼン 資料