iT邦幫忙

鐵人檔案

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

C again 系列

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

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

YARV stack 上放的資料 (2) - 每個 thread 有自己的 stack

一進入 ruby_init_stack() 就先設定 native_main_thread.id,推測每個 thread 都會有自己的 stack。因為 thr...

2023-09-24 ‧ 由 wenkbns 分享
DAY 12

YARV stack 上放的資料 (3) - ruby_setup

目前看到的兩個 global variable ruby_current_vm_ptr: global in vm.c native_main_thread:...

2023-09-25 ‧ 由 wenkbns 分享
DAY 13

有點卡住先整理一下

原本目標之一是要瞭解 ruby code 如何變成 CPU instruction,直覺想法是從 YARV 的 main() 開始看程式碼。目前確認到: ru...

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

rb_ast_t

在 node.h 內可以看到 struct 定義。第一個問題是要知道如何解讀 flags。 typedef struct RNode { VALUE f...

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

load_file_internal

先從 ast = load_file(parser, opt->script_name, f, 1, opt); 往下看,應該是從 ruby file 產...

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

VALUE

稍微理解一下 VALUE,參考 https://docs.ruby-lang.org/en/3.2/extension_rdoc.html : The typ...

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

VALUE (2)

認為 VALUE 在 function 傳遞參數時大量使用是 YARV 程式不易理解的原因之一。例如 load_file_internal: static VA...

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

Ruby code to YARV C code

從 VALUE 的設計衍生出疑問為什麼要這樣子做,再看一下 code 後有一個想法: 在 Ruby 程式裡可以存取很多內建的變數或常數,它們有些是在 YARV...

2023-10-01 ‧ 由 wenkbns 分享
DAY 19

用 Ripper 看 tokens, AST

parse.y parse.c 負責兩個工作,將 Ruby code 變成 token 後比對 grammar 建立 AST 用 Ripper 看產生的 tok...

2023-10-02 ‧ 由 wenkbns 分享
DAY 20

用 Ripper 看 tokens, AST (2)

用 Ripper.sexp 看 AST 內容 require 'ripper' require 'pp' pp Ripper.sexp <<~RUB...

2023-10-03 ‧ 由 wenkbns 分享