開發 Rails app 數年間總有卡關的感覺,想想應該要深入對「計算機科學」的瞭解,能將過程中遇到的事物與計算機演進歷史的知識連結,專業地描述前因後果。 回顧...
Ruby 程式碼是文字檔,透過 interpreter 讀取執行。YARV 是用 C 寫的 Ruby interpreter 實作,經過 compile 成執行...
如同 C spec (參考 C11 5.1.2.2.1 Program startup),YARV 的 entry 是 main.c 的 main(),長得很單...
整理一下: CPU 只能執行 instruction set,與既定的 hardware 互動交換 data (包含 instruction 及讀寫 valu...
看 rb_iseq_struct 的內容,它好像已經是 compile 過的 iseq 了,可是從 main() 又看不到哪裡呼叫了 parse.c。需要加 b...
parser 實作在 codegen 產生的 parse.c,呼叫裡面的 function。function 太多命名看不出進入點是哪個,先找一個大概知道是做...
在 ruby_options() 內有對 execution context, stack 的操作。YARV 是 stack machine 架構,用來取代原始...
從 ruby_options() 用到 TAG_NONE 在 vm_core.h 裡找到 TAG 的定義,名字都是熟悉的 ruby 操作,應該是直接對應,之後再...
在 ruby_optoins 有宣告 void *volatile iseq = 0; 比對其後使用的方式 ruby_init_stack((...
覺得需要更明確地瞭解 stack 的內容。回到 rb_main,這裡是 stack 第一次出現的地方 static int rb_main(int argc,...