ひとり勉強会

ひとり楽しく勉強会

2006-11-01から1ヶ月間の記事一覧

まとめ

というところで、今週のYARVソースコード勉強会はお開きとなります。(^^) また来週!

データ構造・命令列

最終的に生成される命令列は、YARVCore::InstructionSequenceクラスのオブジェクトという形で返されます。このクラスは、C言語レベルではyarv_iseq_structという構造体です。 struct yarv_iseq_struct { /* instruction sequence type */ VALUE type; VALUE …

データ構造・リスト

構文木は、いったんYARV命令の連結リストに変換されます。その状態で最適化をやって、最後にもう一段、命令語の配列への変換処理が入ります。たぶん、最適化で命令の削除・挿入・並べ替えをよくやるので、全部配列でやるよりもリストにした方が効率がよいと…

データ構造・構文木のノード

Rubyプログラムはいったん構文木に変換されます。YARVのコアではRubyプログラムを文字列として扱うのではなく、常にこの構文木になった状態を使います。構文木は、以下のような構造体で表現されます。 typedef struct RNode { unsigned long flags; char *nd…

データ構造

コンパイルは、「構文木」というツリー構造を「YARV命令列」というバイナリ配列に変換するステップです。これに加えて、先ほど調べたときにでてきた連結リストの構造も、変換の途中で使われてるみたいです。この辺りのデータ構造や、それを操作する関数がこ…

コンパイル処理の流れ・まとめ

とりあえず流れはこんなところでした。まとめときます。 th_compile_from_node→yarv_iseq_new→yarv_iseq_new_with_opt YARVCore::InstructionSequenceオブジェクト作成 prepare_iseq_build iseq_compile [compile step 1 (traverse each node)] COMPILE iseq…

コンパイル処理の流れ

iseq = th_compile_from_node(thread, node, file) @ yarvcore.c 解析済みの構文木(node)を受け取って、YARVのマシン語列(iseq)に変換する「コンパイル」処理の関数です。 トップレベルのスクリプトをコンパイルする場合と、evalで文字列をコンパイルする場…

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

第2回です。前回は、rubyコマンドの起動から、yarvの評価器の入り口: VALUE iseq = th_compile_from_node(GET_THREAD(), node, file); return yarvcore_eval_iseq(iseq); にたどりつく所までを読みました。今回は、この関数の前半側、th_compile_from_node…