🔥
Rubyプログラムの実行の全体像
Rubyのインタプリタの仕組みが分からなかったので調べてみました。
以下の流れでrubyプログラムは実行されます。
間違っていたら教えてください。
Rubyコード
array = [1, 2, 3]
array.push(4)
パーサー
・Rubyコードを抽象構文木(AST)に変換します。
- AssignNode
- VariableNode: array
- ArrayNode: [1, 2, 3]
- SendNode
- Receiver: array
- Method: push
- Arguments: 4
コンパイル
・抽象構文木(AST)をYARVバイトコード(中間コード)に変換します。
0000 putobject [1, 2, 3]
0002 setlocal array
0004 getlocal array
0006 putobject 4
0008 send push, 1
0010 leave
実行エンジン
・YARVバイトコードを解析して実行することでマッピングされているC言語(rb_ary_push)を呼び出します。
C言語の関数が呼ばれる
すでにバイナリ化されたC言語(rb_ary_push)を実行します。
Discussion