ぼちぼちGWが終わろうとしてます。今年は予定もほとんどなく、かつ9連休という神環境だったので、引きこもってパソカタしたり、本や漫画読んだり、ゴロゴロお昼寝したり、ゼンタングルしたり、夜は毎日お酒を飲みに行ったりして過ごしていました。おうち大好き。
だいたい毎日虚無感に襲われつつ、自分が事前に計画したことをなるべく遂行しようと頑張ったので、GWにやったことを振り返ります。
GWにやったこと
思い出すためにざっくり書き出します。
NeetCode - Algorithms and Data Structures for Beginners を通しでやる
Write a Compiler That Understands Types を見つつ実装する
Simple but Powerful Pratt Parsing を実装する
acorn の実装を眺める
Martin Grabmüller - Algorithm W Step by Step を読みつつ実装する
NeetCode - Algorithms and Data Structures for Beginners
やりました。Arrays、Linked Listsあたりから始まって、BSTやグラフの探索、DPなど一通り。もっと難しいトピックはAdvanced Algorithmsのほうに入ってるようですが、NeetCode(というかLeetCode?)のEasyやMediumを解くベースとしては十分な内容でした。
動画を見る(優しい英語なので雰囲気で聞き取る)
問題を解く
半分くらいはわからん、写経する
みたいなサイクル。動画の内容でつまづくことはなかったし、問題も癖がないので学んだことがすぐ活かせてよかったです。回答読むのめんどくさいなーってときも解説動画があって、ぼーっと眺めてれば良いのが助かります。
とはいえ、ちゃんと問題が解けるようになったわけではないので、今後訓練していきたい。復習して3日後くらいに解き直すとよいとClaudeが言っていました。個人的にやりたいのは、その場で解説を読むだけじゃなくて、「読む」→「その場ですぐ白紙に実装できるか再チャレンジ」という流れ。読むだけだと頭に残らない…
想定が25時間と書いてありますが、知ってる概念も多かったので10~15時間くらいでやれたんじゃないかと思います。測ってないけど。
Write a Compiler That Understands Types を見つつ実装する
この講座めっちゃよかった。これのためだけにFrontend Mastersに課金して、見終わったら退会しました。退会するの忘れそうなので。
概要はコンパイラ周りの勉強がしたくてに書いたので割愛しますが、型DBを使ってUnification(単一化)することで、型推論や型チェックができる部分はだいぶ面白かったです。型推論という抽象的なものの実装イメージが湧きました。そういえば、WASMへのCode Generate部分はほぼ記憶ないな。
該当リポジトリには字句解析からCode Generationまで一通り揃ってるので、忘れた頃にまた眺めつつ、自分で実装できるか試したいと思っています。とても貴重な学びでした。
Simple but Powerful Pratt Parsing を実装する
かなり短いコードなのに、パーサーになってすげー!という感動がありました。めっちゃ前に眺めて何も覚えていなかったWrite a JavaScript Parser in Rustにも参考文献として書かれていて、繋がったなーと一人で驚いていました。今回それを理解できたのは素直に嬉しかったです。
メモったスクラップ
acorn の実装を眺める
眺めました。スクラップ。
TokenizerとParser合わせても数千行なので、全然読めました。ただ読むのは退屈で、雑にClaudeに解説してもらって、へえーつって終わりました。
JS syntactic quirksなどに書かれているような曖昧な文法をどうやって対処してるんだろうと思ったのですが、再帰下降だと取り回しがしやすいのか、結構素直に書かれているのは驚きでした。もっと謎のテクニックを使ってるかと思ってましたが、案外読めた。例えば/が除算か正規表現か、(がアロー関数か引数リストか、などなど。
これもいざ自分で実装しろって言われたら全然できなさそうなので、小さいサブセットから始めてやってみたいなあと思っています。やるならTypeScriptのサブセットにしたい気持ちもありますが大変だってClaudeが言ってた。
Martin Grabmüller - Algorithm W Step by Step を読みつつ実装する
Milnerの提案したAlgorithm Wを実装することで、型推論について理解しようという論文です。論文というかほぼコード片が書いてあるだけで、なぜそうなってるかはClaudeに解説してもらわないと何もわかりませんでした。スクラップ。
Write a Compiler That Understands Typesの型推論とほぼ同じようなことをしてるっぽいが、Haskellの抽象度が高いコードで再現されていてすごかったです。モナドトランスフォーマーって何だろうと思ってたので、具体例としてわかりやすかったです。
コードは抽象度が高すぎて雰囲気しかわからなかったのですが、直近で勉強していたことがつながった感じがして面白かったです。Typechecker ZooにはRust実装もあるらしいので、そのうち読みたい。
今後やりたいこと
TAPL を読む: ClaudeがひたすらTAPLを読めって言ってくるので、そろそろ読もうと思います
関数型言語に再入門: 久々に入門し直したくなってきたので、前に物理本で買って売っちゃったラムダノートの『プログラミングHaskell 第2版』を電子版で買い直しました。ちょこちょこ読み進めていきたいです
NeetCode150: ちまちまやっていきたい。Pythonは本当に楽で助かります。他の言語で勉強しようと思った時は意外と言語機能自体がノイズになって脳みそが回らない、みたいなことが多かったので、何も考えなくて適当に動く感じが気持ちいいです。コンパイラを書くにしても再帰とかバリバリ出てくるし、ビットマスクでの条件分岐の最適化とかacornの中でやってるし、そういうのシュッとわかるとかっこいい
まとめ
最近パソカタできてなかったので、まとまった時間でそれなりにいろいろできて楽しいGWでした。連休が明けても、パソカタ習慣を続けられるように頑張っていきたいです。最終日の明日は何しようかしら。
最終更新: 2026年5月9日