自分メモ

Reading Gauche な wiki でいきなり質問する前に事前準備というか自分メモ。
VMインストラクション以降のソレを眺めるに vminsn.scm で define-insn (定義??) しているインストラクション (vm な命令??) 毎に vm.c の run_loop() 関数の評価ループっぽいナニの分岐からそのインストラクションに該当する実際の処理について調査をしているように見える。
例えば CONST というインストラクションは vminsn.scm で以下のように define-insn されている

;; CONST <obj>
;;  Set <obj> to val0.
;;
(define-insn CONST 0 obj)

wiki には上記の式は出ていないな。コメントとか用例なんかが投入されている。あとは関連項目という事で vm.c の該当部分

            CASE(SCM_VM_CONST) {
                FETCH_OPERAND(VAL0);
                INCR_PC;
                NEXT1;
            }

に出ているマクロについて wiki なページを作ってどんどん掘り下げてるのかな。しかし SWITCH とか CASE なんかもマクロになってる、というのも凄い。

課題

とりあえず上記のソレがビンゴだったら良いのですが ...
まだ色々と作業するための前提というか作業環境の知識やら方法やらをきちんと理解しておく必要があるはず。

  • ページ作成スクリプト
  • とりあえず今までのコードリーディングの流れとか
  • てーか、Gauche のざっくりベースな処理の流れが全然イメージできてない
  • define-insn って何だ
  • compile.scm もざくっと見とく必要あり??

とりあえず Reading Gauche をざくっと確認してみる。

追記

見ながらポイント列挙

  • 99.作業ログ にてログとか連絡とか
  • ページ出力スクリプトで「調べるもの」な項目が自動抽出されるのだろうか
  • 今的には Scm_CompiledCodeDump のページがまだできてないソレをお手伝い、がヤレる事かなぁ
  • 関数とかマクロの書き方をきちんと見ておくためにももう少しできあがり、なコンテンツが見たい

自分メモ

やっぱ gauche-0.1 なソレはなかなか良い取り組みだった模様。なんとなく読める。で、先頭からざくざくっと見ているんですが、Scm_Repl() では

    Scm_ApplyRec(SCM_OBJ(&repl_STUB),
                 SCM_LIST4(reader, evaluator, printer, prompter));

で終了、になっている。あとは
Scm_ApplyRec() → user_eval_inner() → run_loop()
な流れなんでしょうが、ちょっとイメージしにくい。順に箇条書きしてみると

  • Scm_Repl()
    • Scm_ApplyRec に渡す最初の引数は repl_STUB のアドレスを SCM_OBJ でくるんでいる
    • repl_STUB は直上で static な定義の repl_proc を SCM_DEFINE_SUBR マクロで wrap しているように見える
    • Scm_ApplyRec に渡すもう一つの引数は Scm_Repl() の引数をリストにしたもの
  • Scm_ApplyRec()
    • code を作って user_eval_inner() に渡す
    • code に格納されているものは VM の命令列に見える
  • user_eval_loop
    • run_loop() が呼び出されている
    • compile.scm はどこで活躍??
  • repl_proc
    • Scm_VMRepl() は何か
  • Scm_VMRepl()
    • repl_main() とか Scm_VMPushCC() とか repl_loop_cc() とか
    • Scm_VMWithErrorHandler() も

Reading Gauche では repl_proc に ? が付いてるのでここまで掘り下がってないのかな。帰宅後にもう少しきちんと見てみようかな。

さらに追記

コード追い掛けるのに夢中で成果物をチェックしてない事に気がつく。ナチュラル満開。