コンピュータシステムの理論と実装を読んだ
コンピュータシステムの理論と実装を読んだ。
この本は1,2年くらい前に購入したまま積読になっていたのだが昨今の外出制限もあり丁度良い機会だろうということで読み始めた。
内容はプリミティブな要素として論理ゲートのNANDを使い、ブール演算->ALU->レジスタ・メモリ->CPU->アセンブラ->VM->コンパイラ->OSという順で下から実装し組み上げていくというものだ。
詳しい内容についてはこの方のQiitaを読むと良いと思う。
この記事を読めばどういう本かは大体分かるので僕からは簡単な感想だけ。
まずこの本はとてもよく出来ている。
上述した各レイヤーの要素を程よい負荷で実装させる仕組みを整えている。
Jackというコンパイルしやすい独自言語を扱っていること、シンプルな1ワード1命令のアーキテクチャなこと、CPUエミュレータやVMエミュレータなどデバッグを支援するツールが全て提供されていることなど、言うなれば完璧な補助輪付きである。
えてしてCPUやコンパイラなんてものを学ぼうとすると座学だけで分厚い本を1冊や2冊当たり前のように読まないといけない。それを初心者に求めるのはやや酷である。脱落確定だ。
その点この本は端折り方がうまい。いい具合に難しいところを省いている。
しかしイージー過ぎる訳でも無い。初めてこの手の実装に取り掛かる人にとってはかなり骨の折れる実装になると思う。実際自分もVMの実装はかなり苦労した。
ただ何とかテストケースとにらめっこしながら取り組めば必ず出来る。
その辺りの何とか頑張って実装させるためのレールの敷き方が絶妙なのだ。
そうこれはあれだ、プラモデルを作るのに近い。ガンプラとかミニ四駆なんかにハマったことのある人はそれのコンピュータシステム版だと思ってもらえば良い。
アセンブラにしてもVMにしても自分の好きな言語で実装すれば良いので何か一つプログラミング言語が書ければ簡単に始められる。
個人的にはパタヘネなんかを読んで理論的な話をインプットした後にこの本を手を動かして進めるのがおすすめ。理解の解像度がグッと上がるはず。
ただコンパイラや特にOSは流石に要素が足りな過ぎる感があるから下記の本やサイトをやるのがいいかなと思う。
著者も書いてるけどOSなんかはプロセスやメモリ管理他ファイルシステムとか通信周りなんかもごっそり省いてる。ほぼ簡単なI/Oと抽象ライブラリ機能だけである。ちょっと物足りない。
でもまぁそれを差し引いてもこの本は良い。
十分暇つぶしになるし初心者には勉強になる。
外出出来なくて時間を持て余している人はぜひやってみてはどうだろうか。