iT邦幫忙

鐵人檔案

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

C again 系列

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

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

用 Ripper 看 tokens, AST (3)

前面的例子雖然只用了 puts 但覺得還是複雜。 用更簡單的,什麼都沒有的情況,仍然會看到 Ruby program 的 root program,另多出一個...

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

Bison

要看懂 parse.c 需要對 Bison 有一定瞭解,可是 https://www.gnu.org/software/bison/manual/bison.h...

2023-10-05 ‧ 由 wenkbns 分享
DAY 23

Bison (2)

看 none 對應的 C code # define Qnull 0 case 782: /* none: %empty */ #line 6127 &...

2023-10-06 ‧ 由 wenkbns 分享
DAY 24

Bison (3)

前面提到 AST tree node 生成順序與 bison grammar match 順序的理解不太精確。 從 parse.y 看,program 會是 %...

2023-10-07 ‧ 由 wenkbns 分享
DAY 25

yycompile0

Bison 和 AST 的研究也到此,跳出來看 yycompile0。從 yyparse 最後會 match 到的 program 程式裡面,看到關鍵字 p-&...

2023-10-08 ‧ 由 wenkbns 分享
DAY 26

rb_iseq_compile_node

想先找到這個 function 如何回傳結果,推測是存到傳入的 const NODE *node。經過 macro COMPILE 可以找到 iseq_comp...

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

node.h

struct RNode (NODE) 結構的使用方式可以從 node.h 定義的 macro 裡面猜一下,一組一組的應該對應到不同 node_type,只是沒...

2023-10-10 ‧ 由 wenkbns 分享
DAY 28

整理 parse AST 與 compile iseq 的流程

單純地執行 ruby someprogram.rb 時的 call stack: main rb_main void * ruby_options(int...

2023-10-11 ‧ 由 wenkbns 分享
DAY 29

ruby_run_node

看過 parse.c 一路,只考慮執行一段最簡單的 Ruby code,跳過各種細節,知道 ruby_options 會產生 iseq,然後 ruby_run_...

2023-10-12 ‧ 由 wenkbns 分享
DAY 30

YARV instructions

雖然前後沒有連貫,但想先看一下。找 code 的方法是用 Ruby 內的工具印出 YARV instruction,挑一個 instruction 當關鍵字找...

2023-10-13 ‧ 由 wenkbns 分享