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,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...