ruby c原始碼分析

2021-10-04 05:31:30 字數 1290 閱讀 6041

ruby.c原始碼分析

**編譯不了,但生活還是要繼續的。我今天就讀ruby.c。我快速的瀏覽了一下檔案。因為我執行時

./ruby -v

helloworld01

[hello] ruby - version 0.49 (18 jul 94)

yang@desktop-v9hs3b6:~/ruby049/ruby$

也就是說,-v引數是可以執行的。於是我去找了,並進行了修改。

static char*

proc_options(argcp, ar**p)

int *argcp;

char ***ar**p;

break;

case 'p':

}這裡,就是在處理選項。我在

case 'v'

那裡進行修改。再編譯。果然就能看到效果。

如果這樣執行

./ruby -e 'print("ok")'

的處理邏輯在這裡:

case 'e':

script_given++;

if (script == 0) script = "-e";

lex_setsrc("-e", optarg, strlen(optarg));

yyparse();

break;

可惜報錯誤。

另外,如果沒有使用-e選項,需要從檔案中讀程式,處理如下:

if (script_given == 0)

else

}沒有提供檔案,就讀標準輸入,否則從檔案中讀。

再去讀rb_load_file函式。

rb_load_file實際上也是調readin(fd,fname)

再看readin()

在readin()的最後,有:

start_read:

lex_setsrc(fname, p, pend - p);

yyparse();

這裡,就是讀進行源rb程式後,進行詞法分析,語法分析。作者的程式結構和gawk1.01確實很像。

最後作者有如下主程式。

void

rb_main(argc, ar**)        /* real main() is in eval.c */

int argc;

char **ar**;

exit(nerrs);

}可以c語言的是main呀。那ruby0.49的main在**呢,我

grep 'main' *.c

發現很多檔案中有main,當然,有些檔案中的測試程式的。但真正的入口在哪兒呢?這是個問題。

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...