ひとり勉強会

ひとり楽しく勉強会

2006-10-27から1日間の記事一覧

まとめ

というところで、今週のYARVソースコード勉強会はお開きとなります。(^^) 来週は、compile側とeval側のどっちに進んだ方がいいんだろ?データ構造のチェックとかが先かなあ。。。 あとで読む PUSH_TAG, EXEC_TAG 等のタグジャンプの実装 th_init2 : Rubyのス…

ruby_run @ eval.c

最後に、main から ruby_run が呼ばれます。その中では何段にも関数が呼ばれますが、メインの流れは一列です。 main ruby_run ruby_exec ruby_exec_internal yarvcore_eval_parsed @ yarvcore.c yarvcoreにたどり着きました! VALUE yarvcore_eval_parsed(NO…

ruby_option @ eval.c

初期化が終わって、次にmainから呼ばれる処理はコマンドラインのオプションの解析です。 おもしろそうなところは特になかったので、スキップ。

Init_yarvcore @ yarvcore.c

この関数は、基本的には、YARVをRubyスクリプトからさわれるようにするための、Rubyライブラリを提供するものです。 mYarvCore = rb_define_module("YARVCore"); rb_define_const(mYarvCore, "VERSION", rb_str_new2(yarv_version)); ... 略 ... こんなのが…

Init_yarv @ yarvcore.c

一個目の初期化ルーチン Init_yarv はこんなんでした。 void Init_yarv(void) { /* initialize main thread */ yarv_vm_t *vm = ALLOC(yarv_vm_t); yarv_thread_t *th = ALLOC(yarv_thread_t); vm_init2(vm); theYarvVM = vm; th_init2(th); th->vm = vm; ya…

ruby_init @ eval.c

初期化関数、ruby_init のメインな部分を抜き出してみました。 void ruby_init() { ... 略 ... Init_yarv(); Init_stack((void *)&state); Init_heap(); PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { rb_call_inits(); ruby_prog_init(); ALLOW_I…

main @ main.c

今日は、mainから初期化が済んで、スクリプトの実行がいよいよ始まる!その手前までの流れを読んでいきます。まずはmain関数から行ってみましょう。ここからRuby/YARVの実行がはじまります。環境依存の#ifdefを取っ払うと、こんな感じのシンプルなmainです。…

資料

現時点での最新リリース 0.4.1 (revision 522) を読みます。なぜレポジトリの最新版を追いかけないかというと、手元の環境にbisonがなかったのでビルドが手間だったからです。ちょう手抜きです。参考にしようと思ってるサイト: YARV: Yet Another Ruby VM …

YARVソースコード勉強会 (1)

金曜日は YARV: Yet Another Ruby VM のソースコード勉強会をやります。YARVというのは、オブジェクト指向スクリプト言語 Ruby の実装のひとつです。ふつうのRubyと違って、いったんスクリプトを仮想マシンのバイトコードに変換して、高速実行するのが特徴ら…