ユユユユユ

webエンジニアです

K&R を読みはじめた

 The C Programming Language を読み始めた。著者が Kernighan and Ritchie の二人組であることより K&R という愛称で呼ばれるようである。

f:id:jnsato:20210809190137j:plain

 学生の頃に無料で落ちていた PDF 版を手に入れて冒頭を眺めたことを覚えている。そのころは古典を所有するという以上の欲望はなにもなかったので、特に誠実に学ぼうともせずに放置していた。

 いま、世の中が Rust 熱に浮かされている様子なのを眺めて、僕も興味はあるクチであるが、それより先に C の足固めをしようとおもった。 CS:APP が C で記述されていたことに触発されたところもある。そもそも Linux カーネルを題材にシステムプログラミングを学ぼうとするときに、 C 以外のなにを使えるだろうか?

 付録を含めてもたかだか 200 ページばかりの、薄い本である。仕様の小さな言語であるから、この薄さのなかにすべてが書かれていると、前書きでも誇らしく書かれている。

 実際にその「小さな仕様」で練習問題を解くと、あらゆる小さなルーチンを書くことになる。そしてそのいちいちについて、「はたしてこれで正しくできているだろうか」と疑い深くなる。いかに普段、便利なライブラリに守られているかを痛感させられるし、それを再実装する自分の腕のおぼつかなさに愕然とする。しかし、やってできないわけではない。じっくり取り組めば、時間はかかるが書ききることはできる。

 どうにも自信がなければ、参考書として Answer Book も用意している。こちらももちろん C で書かれているし、悪魔的に難しいことはやっていないので、読めないことはない。加えて、標準ライブラリの実装をみたければ、みればいいだけのこと。 glibc をクローンして、適当なヘッダやら実装を眺めていると、よくわからないマクロに囲まれてはいても、これこそが battle-tested なソースそのものであるという安心感を与えられる。実に、僕の生まれたころに積まれたコミットをみると、崇高な思いがする。

 という調子で、しばらくは C の世界で遊んでみようとおもう。終盤には UNIX システムプログラミングの話にも接続するようなので、最後まで飽きずに取り組んでゆきたい。