原本目標之一是要瞭解 ruby code 如何變成 CPU instruction,直覺想法是從 YARV 的 main() 開始看程式碼。目前確認到:
main(),在 main.c 的實作很單純。在 ruby_sysinit 中第一個跳過沒仔細看的是 fill_standard_fds()。裡面用到 fstat, pipe, dup2。RUBY_INIT_STACK 呼叫 ruby_init_stack,這裡的 stack 應該是 thread 的 stack,是 OS 管理的。其中一個技巧是先 declare 一個 variable,它應該就是如其名 variable_in_this_stack_frame 標記此 thread 用到的 stack 起點。用途還不清楚。ruby_setup 會初始化 YARV VM,記在 ruby_current_vm_ptr,VM 包含很多資訊例如 objspace。objspace 又會在 Init_heap 被初始化。另外 ruby 程式會用到的 native class 和特殊常數會在 rb_call_inits(), ruby_prog_init() 中初始化ruby_options 看起來是會 parse ruby 程式的地方,裡面會一層層呼叫到 yycompile
VALUE 但實際是個 pointer (rb_ast_t*, rb_iseq_t*, RData*),這些 struct 的共同點是第一個值是 flags,應該是靠 flag 來判斷如何解讀指向的結構。為什麼要定義 VALUE 而不直接 cast 成 void* 的原因還不清楚到此大概有 ruby code 轉換成 AST 的架構,接下來要看 AST to YARV instruction。