自作で学ぶ
自作で学ぶ(Build Your Own)
HTTPサーバー・シェル・データベース・git・正規表現エンジン… 使う道具を最小実装で自作し、原理を芯から理解する。
解説記事
自作ハンズオン
何を作るか→最小実装の全体像→段階を追って作る→本物との違い。動く最小実装で、原理を芯から。
gitを自作する
gitの中身がただのファイルシステムだと腑に落ちる。blob・tree・commitの3種をハッシュして圧縮保存するだけの最小実装を手を動かして作り、内容アドレス方式や差分の正体まで一気に理解できる。
HTTPサーバーを自作する
TCPソケットをlistenして生のHTTPを手でパースする最小サーバーを作れば、リクエスト行・ヘッダ・Content-Length・keep-aliveの正体が腑に落ち、フレームワークが何を肩代わりしているかが一目で分かる。
JSONパーサを自作する
既製ライブラリに頼らずJSONパーサを200行強で自作し、字句解析と再帰下降という言語処理の基本骨格を手を動かして理解でき、エラー位置報告や数値・エスケープ処理の勘所まで掴める。
コンテナを自作する
Dockerに頼らずnamespaceとchrootとcgroupを直に組み、プロセスを隔離する最小コンテナを数十行で作れる。なぜコンテナがVMより軽いのかを、カーネル機能の実物から腹落ちさせる。
シェルを自作する
bashが毎回やっている「入力を読んでコマンドを起動する」正体を、200行のREPLループで自分の手で再現し、fork/exec・パイプ・cdがなぜあの挙動になるのかを腹落ちで理解できる。
ロードバランサを自作する
TCP接続をバックエンドへ振り分けるL4ロードバランサを100行規模で自作し、ラウンドロビン・ヘルスチェック・least-connまでを手を動かして理解でき、NginxやHAProxyの中身が読めるようになる。
簡易データベースを自作する
追記専用ログと索引だけでkey-value DBを自作。永続化・クラッシュ回復・コンパクション・fsyncが腑に落ち、B木やLSMの狙いまで見通せる。
正規表現エンジンを自作する
壊れた正規表現がなぜサーバーを固めるのか、そのReDoSの正体を手を動かして理解できる。ThompsonのNFA構成で入力長に線形なマッチャを自作し、バックトラッキングとの決定的な違いを掴む記事。