🔥

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