The Elements of Computing Systems を読んだ

約1ヶ月かけて The Elements of Computing Systems (通称 nand2teris) を読む & 演習のすべてを完遂しました。 約130時間費やしましたが、実に有意義な時間を過ごすことができました。今まで読んだ本の中でトップ10には入る良書と断言できます。

日本語訳はO'Reillyから出版されています。

この本自体は去年末に購入したきりずっと積ん読にしていたのですが、来年の1月に第2版が出ると知り慌てて読み切りました。 無事に第2版が出る前に完遂することができてよかったです。

この本はコンピュータを NAND gate から出発して作っていくという他に類を見ない内容になっていると思います。 この本1冊で

を自分で作るという体験を一気にできるのでこの辺のことに興味がある方にはおすすめできる1冊です。 ただ前半のハードウェアの章に比べて後半のソフトウェア(アセンブラ以降)の章は本に書いてある内容だけをもとに演習をこなしていくのは辛いものがあるかなぁと思いました。 context free grammer や LL(1) parser とかの話はこの本とは別で言語処理系について学んだことがないと理解が難しそうと思いました。

私の場合はこの本で実装する Jack 言語よりも複雑な文法の言語のコンパイラを書いたことがあったので実装の方針が全く立たないということはなかったのですが、そういった言語処理系を書いたことない人にとって後半のソフトウェアの章は難しいと感じると思います。 また本の趣旨として Lex や Yacc のような Lexer Generator や Parser Generator を使わないようにということも書かれているので、なおのこと言語処理系を書いたことない人にとってはハードモードだと思います。 私も Lexer は書いたことありましたが、Parser は自作したことなかったのでなかなか難儀しました。

goropikari.hatenablog.com

著者の方々が coursera に講義を上げておられるので、本を読んでイマイチ理解しきれないなぁというところがあったら講義を視聴して理解を深めました。

www.coursera.org

www.coursera.org

この本を読んだおかげであとは FPGA の使い方を覚えればリアルでコンピュータを自作できるかもという自信がつきました。 以前から東大のCPU実験を私もやってみたいなぁと思っていたのでその目標にまた一歩近づいた気がします。

github.com

アセンブラVMコンパイラは Julia で書きましたが Coursera の講義の課題採点システムでは Julia はサポートされていないので修了証を取りたい場合は C とか Python などのメジャーな言語を使いましょう。 私の場合は修了証には特に興味なかったので一番使い慣れている Julia で書きました。 ぱっと調べた感じだと Julia で書いている人が見当たらなかったのでもしや nand2tetris を Julia でやったのは世界初かも???