More Related Content
Similar to Ruby東京プレゼン 資料 (20)
Ruby東京プレゼン 資料
- 4. 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バイトコード
コンパイル
* 実際にはバイナリ
* デバイスアーキテクチャに依存しない
(エンディアン,アラインメント)
- 5. 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バイトコードを実行
- 8. 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 より抜粋)
- 15. ライブラリ
● Git または Githubを使う
– ライブラリをソースコードから独立させて,
ビルド時に組み込む
– 「build_config.rb」ファイルに1行追加するだけ
conf.gem :github => 'kaz0505/mruby-gpio-raspi'
ラズベリーPi 用のGPIOクラスライブラリ
conf.gem :github => 'kaz0505/mruby-gpio-emuration'
PC用のGPIOエミュレーションクラスライブラリ
- 16. ライブラリを利用した例
● GPIOの例
– ラズベリーPi, PCエミュレーション 共通
Gpio.pinMode 1, Gpio::OUTPUT
Gpio.pinMode 2, Gpio::INPUT
Gpio.digitalWrite 1, Gpio::HIGH
Gpio.digitalWrite 2, Gpio::LOW