iT邦幫忙

鐵人檔案

2023 iThome 鐵人賽
回列表
自我挑戰組

C again 系列

開發 Ruby 多年後,發現要再提升能力需要有更紮實的基礎知識。看看 C 發現它是學習 computer 的好夥伴。

鐵人鍊成 | 共 30 篇文章 | 1 人訂閱 訂閱系列文 RSS系列文
DAY 1

設定目標

開發 Rails app 數年間總有卡關的感覺,想想應該要深入對「計算機科學」的瞭解,能將過程中遇到的事物與計算機演進歷史的知識連結,專業地描述前因後果。 回顧...

2023-09-14 ‧ 由 wenkbns 分享
DAY 2

Interpreter process

Ruby 程式碼是文字檔,透過 interpreter 讀取執行。YARV 是用 C 寫的 Ruby interpreter 實作,經過 compile 成執行...

2023-09-15 ‧ 由 wenkbns 分享
DAY 3

YARV Interpreter 的 main()

如同 C spec (參考 C11 5.1.2.2.1 Program startup),YARV 的 entry 是 main.c 的 main(),長得很單...

2023-09-16 ‧ 由 wenkbns 分享
DAY 4

AST nodes

整理一下: CPU 只能執行 instruction set,與既定的 hardware 互動交換 data (包含 instruction 及讀寫 valu...

2023-09-17 ‧ 由 wenkbns 分享
DAY 5

rb_iseq_struct 與問題

看 rb_iseq_struct 的內容,它好像已經是 compile 過的 iseq 了,可是從 main() 又看不到哪裡呼叫了 parse.c。需要加 b...

2023-09-18 ‧ 由 wenkbns 分享
DAY 6

尋找 parse ruby code 的地方

parser 實作在 codegen 產生的 parse.c,呼叫裡面的 function。function 太多命名看不出進入點是哪個,先找一個大概知道是做...

2023-09-19 ‧ 由 wenkbns 分享
DAY 7

ruby_options()

在 ruby_options() 內有對 execution context, stack 的操作。YARV 是 stack machine 架構,用來取代原始...

2023-09-20 ‧ 由 wenkbns 分享
DAY 8

ruby_process_options

從 ruby_options() 用到 TAG_NONE 在 vm_core.h 裡找到 TAG 的定義,名字都是熟悉的 ruby 操作,應該是直接對應,之後再...

2023-09-21 ‧ 由 wenkbns 分享
DAY 9

iseq & VALUE & rb_iseq_struct

在 ruby_optoins 有宣告 void *volatile iseq = 0; 比對其後使用的方式 ruby_init_stack((...

2023-09-22 ‧ 由 wenkbns 分享
DAY 10

YARV stack 上放的資料 (1)

覺得需要更明確地瞭解 stack 的內容。回到 rb_main,這裡是 stack 第一次出現的地方 static int rb_main(int argc,...

2023-09-23 ‧ 由 wenkbns 分享