学習計画

コンピューターを理解する道として。

1)簡単なスタックマシン
1-1)簡単な計算をするためのスタックマシン(vm1)を Common Lisp で書く。
1-2)直接vm1の命令を実行させて動作確認。
2)簡単なコンパイラ
2-1)S-式(例: (+ 1 (+ 3 4)))をvm1用にコンパイルするコンパイラCommon Lisp で書く。
2-2)コンパイル結果を vm1 で実行させて動作確認。
3)少しちゃんとしたスタックマシン
3-1)命令セットを多くしたスタックマシン(vm2) を Common Lisp で書く。
3-2)直接vm2の命令を実行させて動作確認。
4)少しちゃんとしたコンパイラ
4-1)vm2 用コンパイラを書く。
4-2)コンパイル結果を vm2 で実行させて動作確認。
5)ネイティブコンパイラ
5-1)PowerPC の命令セットを調べる
5-2)コンパイラを作成

現在、 3-1,3-2 あたりで詰まっている。何故詰まっているかというと、せっかくの完成度の高い講義資料を変に斜め読みして進んでいるからだ。勿論このような読み方はお勧めしない。
しかし、情報系の学習をおろそかにしたままおっさんになった自分は、ゴツゴツした変な癖があちこちについており、まっとうな学び方では時間もモチベーションも維持できない。となれば、自分なりの勉強の仕方を編みだしていくしかない。つるりと丸くまっとうに育った若者を見るとうらやましいが、いや、うらやんでも仕方がない。中島敦「弟子」。南山の竹の例えを思い出す。


vm2 は Tiny-C 用のスタックマシンなのだが、試すためには Tiny-C の仕様を把握しなくてはならない。
関数呼び出しの部分がいまひとつ理解できないなぁ。理解できないというよりも、いろいろ実装して始めて動くようになる、という感じ。こういったものはなかなか試し難い。最悪写経するが、理解しながらにしたい。


目標が曖昧だった。大分遠いが目標を立てると、最小の演算子を持っただけのミニLisp を作ろう。ただし、

勿論、既に優れたネイティブコンパイラ(SBCL, AllegroCL)が存在するので、あくまで学習用。


終わったときには、ようやく、 SICP(計算機プログラムの構造と解釈)第5章「レジスタ計算機での計算」が分かるようになる、か?いや、背伸びしすぎかもしれないが、一緒に読んでもいいかもしれない。パラパラSICPを眺めてみる、ああ、確かにこれは良い本だが、これでもまだまだ基本なのだ…。