ユユユユユ

webエンジニアです

CS:APP を読み終えた

f:id:jnsato:20210806222526j:plain

CS:APP を読みはじめる」という記事を書いてから足掛け3ヶ月にして、読了に漕ぎつけた。案外ペースとしては悪くない。各章末に配された練習問題はスキップする方針で読んだ。平日には長くても1時間、週末には気が向く範囲で数時間といったくらいの時間を割り当てて、読み通した。少なくとも数十時間はつぎこんでいる。まあ大作ビデオゲームをそこそこ楽しく遊んだくらいのものとおもうと、そうたいしたものでもないか。読みながら「ここは」とおもった折にメモを残していたので、それを書き写そう。


 第4章、パイプラインプロセッサの設計のところがまず難関であった。途中から完全に(なにもわからない)という状態になり、とりあえず話を目でなぞってお茶を濁すことにした。それまでの議論はそれなりに追従できていたはずなのだが、にわかに力技の議論で押し通されるようになったゆえに置いてきぼりにされてしまったのかもと疑ってはいる。論の運びがパワフルなところが美点でも欠点でもある、とは訳者序文にても指摘されていた。まあ、 CPU はパイプライン化により高速化を図っており、それを補助するためにストールとかフォワーディングといった実装がある、というところを知識として持てただけでよしとしよう。実装の詳細については、また機会があったときに再訪すればよい。


 第9章、仮想メモリの話もタフだった。とりわけ、アロケータの実装を「簡単に」といいつつ詳解していく手際には置いていかれるよりなかった。もっとも、実装レベルで学ぶことを目的とせずに読んでいたこちらの怠惰が跳ね返されただけともいえる。仮想アドレシングの手続きはハードウェア層から OS までが相互に協調して最適化を与えているというあたり、「すごい技術だ...」と呆然とするほかなかった。「システムはモジュラーであるべき」というドグマがいっぽうにありつつ、ここぞというところでは結合を密にすることで速度をあがなうということは理解はできる。しかしアドレス参照というスーパークリティカルなシステムを動かすにあたってハードウェアと OS が共依存関係を構成していること、そしてそれがメモリ階層のシステムや追加のキャッシュもあわせて素晴らしいコレオグラフを描き出していることに感動した。ほんのすこしだけ表面をなぞったにすぎないわけではあるが、強く印象に刻まれた。


 など、困難を感じたところのメモから書き起こした。相対的に、残りの章については印象が薄かったかのような誤解を与えかねない。ところが事実は、すべての章がいちいち素晴らしい学びに満ちていて、とても整理しきれないのである。二進数表現のありきたりな話からはじまって、「そんなことは知ってるよ...」とこちらを飽きさせる暇もなく、浮動小数点のエンコード方式のような、いままでわかったようで実はわかっていなかったトピックを叩きこまれた。さらにそれらの演算命令がどのように機械語エンコードされるかをみたかとおもうと、最適化コンパイラの設計思想とその最適化の限界を暴き出してみせ、キャッシュメモリの階層化の説明を付け加えることによって、「プログラマの視点から」どのようにハードウェアをコントロールして最高のパフォーマンスをチューニングするかを鮮やかに描きだす。凄まじい熱量をもって議論が展開していくのを眺めるのは実に気持ちがいい。

 さらに高レベルに議論は進み、リンカの話、カーネルの例外制御の話がはじまる。仮想メモリやシステムレベルI/Oの話題となると、ハードウェアとソフトウェアの相互作用が語られるようになり、これも描写しがたいおもしろさだ。「ネットワークはデバイスである」という表現の意味がわかっていなかったのだが、ファイルデスクリプタという概念をおよそ理解できたことで、それも乗り越えられたようにおもう。初学者のころにソケットというものの意味がなにもわからずに退けていたことを思い出しながら読んだ。

 ひとつひとつ数え上げては感想を述べても飽きないが、それでもなお未知の部分が残っていることに疑いはない。わかった気になれているのは、僕の想像力が足りずに、わかったようになっているだけともいえる。 Nand2Tetris を読んだうえで CS:APP に進んできて、ハードウェアの世界とソフトウェアの世界の接合部についてはかなり手応えをもって知ることができたようにおもう。しかしそれでもなお、せいぜい学びの第一歩を踏み出したにすぎないこともはっきりと理解している。「なにがわからないかわからない」という状態であったところをひとまず脱して、コンピュータアーキテクチャの概略をおおむねマッピングできた、というあたりに自分を位置付けている。

 各章末に配された「書誌ノート」も卓越している。トピックごとに、読むべき古典を提示してくれている。正しくアカデミックな手続きで書かれており、いつでもここに立ち返って再読し、関連文献をあらためて逍遥することができる。

 一生読める一冊であるから、値段が 16k もしようが、あきらかにその価値はある。翻訳については、いくらかミスも見受けられるが、読める訳文である。こちらに前提知識が欠落しているため、はじめから原著で読むことは、不可能ではないとはいえかなりの時間を要したろう。しかしこの訳書で羅針盤を得たので、後続の学習は英語でも恐れずに進められるようにおもう。