generated at
『Rubyのしくみ』

何章を読んで、何章を読んでないのか忘れたmrsekut
Ruby知らなさすぎて読むのしんどい

1章 字句解析と構文解析
文法規則
Rubyはlexは使用していない
自作の字句解析器を使用している
パフォーマンス面、Lexが用意していない特殊な字句解析ルールが必要だった
Ripper
Rubyが実際に使用している字句解析器と構文解析器を呼び出せる
Ripper.lex
行番号、列番号、シンボル、トークン情報の配列を返す
文法エラーは指摘しない

2章 コンパイル
Ruby1.9以降はコンパイラが導入された
Rubyコード→トークン列→ASTノード→YARV命令列→・・・→C→機械語
ASTからYARV命令列にコンパイルする
RubyコードのASTをYARV用コードに変換していく過程が説明されている
関数呼び出しとブロック呼び出し
丁寧なんだけどいまいち頭に入らないなmrsekut
実際になにか作ってみないとだめかも
ASTを一番上から再帰的に処理し、YARV命令にコンパイルする


3
スタック指向な仮想マシン
ただのスタックマシンじゃない、二重スタックマシンだ
内部スタック
コールスタック
どのメソッドが、他のメソッドや関数やブロックやラムダを呼び出したのかを記録する
rb_control_frame_t構造体のスタック
C実装の構造体
メンバ
sp
pc
プログラムカウンタ
現在の命令の場所を指す
self
type
METHOD, BLOCK, EVALなど


4
5
6
7
8
9
10
11
12