2009年1月3日土曜日

【PAIP】23 Compiling Lisp (その3)


  • 23.2 Introducing Call/cc

    • call/ccは、普通の関数であり、スペシャルフォームじゃないよ。
    • だけど、call/ccはcurrent continuationを取扱うためにrun-time stackが見れないといけないよ。
    • なので、call/ccを装備する方法として、アセンブリでそれを書いちゃう、という選択肢があるよ。
    • その選択肢でいくならアセンブリに追加が必要よ。その中心になるのはCCだよ。
    • CC: スタックに関数(アセンブリで書くといっているもの)を配置する。その関数はthe current continuation(スタックのこと)をその環境に配置する。その関数は、呼ばれるとそのcontinuationを再配置するよ。

  • 23.3 The Abstract Machine

    • 今までは、架空の抽象的マシンに対するアセンブリコードを生成してきたよ。
    • ここで、それらを本当に実行できるようにするよ。
    • 実現方法にはいくつかの選択肢があるよ。

      • ハードウエア

        • ハードウエアで実装する。(CPU(コンピュータアーキテクチャ)を開発するということだろう)

      • マクロ・アセンブラ

        • 既存のコンピュータ(ハードウエア)のマシン語に翻訳する。

      • マイクロコード

        • パタヘネにおけるマイクロコードは、IAのようなもののことだった。IAは、コアがRISCで、ユーザがアクセスできるのはCISCで、その間をつないでいるのがmicrocodeだった。なので、ハードウエアで実装された中間層みたいなものだった。Norvigがいうmicrocodeが同じものを指しているのかがわからない。
        • The MIT Lisp machineの方式、だそうだ。
        • ちょこちょこ調べてみると、パタヘネのマイクロコードとそんなに違う概念ではなさそうだ。
        • 深掘りはしない。

      • ソフトウエア

        • バイトコードアセンブリのこと。
        • アセンブリをバイト列に変換して、そのバイト列のインタプリタが実行する、という方式。


    • ここでは、バイトコードとアセンブリ言語のまぜこぜというか妥協というかでいくようだ。

    • アセンブラを書く。なるほど2passなんだ。
    • マシンを書く。
    • REPLを書く。

  • 23.4 A Peephole Optimizer

    • 生成したアセンブリを眺めて最適化をするオプティマイザをつくるよ。これはデータドリブンだよ。
    • なるほど〜。オプティマイザ、おもしろい。


  • 23.5 Languages with Different Lexical Conventions

    • 今までは、REPLでEだけ変更するお話。
    • この節はRを変更して構文規則が違うものを取扱うお話。そうか、ここでreader macroをやるのか。


こつこつ。

0 件のコメント: