ハクソク

世界を動かす技術を、日本語で。

インタープリタの作成

概要

  • Crafting Interpretersは、スクリプト言語実装の全知識を網羅
  • パーシングやセマンティクスなど高レベルから、バイトコードやGCなど低レベルまで解説
  • main()から始めて、言語機能を段階的に構築
  • 数千行のクリーンなコードで、ダイナミックな機能を実装
  • 書籍は4つの形式で提供

Crafting Interpretersの特徴

  • スクリプト言語の実装方法を体系的に学習
  • パーサーやセマンティクスなどの高レベル概念の解説
  • バイトコード表現やガーベジコレクションなどの詳細な実装方法
  • main()からスタートし、段階的に言語を構築するハンズオン形式
  • リッチな構文、動的型付け、ガーベジコレクションの実装
  • レキシカルスコープ、ファーストクラス関数、クロージャの導入
  • クラスや継承などオブジェクト指向機能もカバー
  • 数千行のシンプルかつ高速なコードで全機能を実現
  • 自分でコードを書くことで、深い理解を得られる体験
  • 学びながら新しい発想や気づきが得られる楽しさ

書籍の提供形式

  • ペーパーバック
  • ハードカバー
  • 電子書籍(eBook)版
  • オンライン無料公開

Hackerたちの意見

この素晴らしい本についての人気のあるディスカッションが2つあるよ。2020年のは777ポイント、2024年のは607ポイントだよ。 https://news.ycombinator.com/item?id=22788738 https://news.ycombinator.com/item?id=40950235
本当に、typedefみたいな文脈依存のものをどうやって解析するか知りたいんだ。特定のトークンで「切り替え」構文があるからね。C++の「ホイスティング」みたいなことも知りたい。関数内のコードの後でもクラスや構造体を使えるけど、厳密な形式言語や文法で説明するのが難しいんだ。PEGのためのハッキーな解決策としてコンテキストスタックを追加するのは、エントリーポイントとエグジットポイントの管理が大変だし、もっと根本的な問題は構文を「切り替え」られないことだよ。そうしないと、スタックの数に応じた全ての構文の組み合わせを追加しなきゃいけない。永続データ構造やトランザクショナルデータ構造が役立つと思うけど、そのための形式を見つけられないんだよね。
https://en.wikipedia.org/wiki/Lexer_hack パーサーがレキサーにコールバックするようにして、状態を渡せるようにする。型名のセットを利用できるようにするんだ。
C/C++は最悪のデザインの構文の一つだよね。人気のある言語ファミリーが同じ間違いをコピーしちゃったのは本当に残念。君には慰めにならないかもしれないけど、RustやGoはこの問題がないと思うし、注意深く考えれば避けられるんだ。
コンパイラ設計を学ぶための最高のリソースの一つだね。ウェブ版が無料なのは本当に太っ腹だよ。
コンパイラが本のタイトルと合ってないね。
この本は新しい言語を学ぶのに良い方法だと思う。いろんな言語の特徴やパターンについて少し読まなきゃいけないから、同等の実装を作るのに役立つんだ。Javaにない機能を持つ言語だと、似たようなパターンをどう適用するか学ぶのが難しいけど、それが楽しいところでもあるんだよね(私にとっては)。
この本の印刷版を3回も別々に買ってプレゼントしたことがあるけど、素晴らしいよ。
いい本だよ。最初に紙の版を買ったけど、サイズが大きすぎて重かったから、結局デジタル版を買った。メモや検索にはずっと実用的だし…でも、山の中で迷子になっちゃうことがあるけどね :) あと、munificentのゲームプログラミングパターンについての他の本もおすすめだよ。どちらも読むのが楽しいから。
時々、背表紙をギロチンみたいに切り落として、リングバインディングに変えてもらうことがあるんだ。どの印刷所でもやってくれるし、ちょっとした余白とガターを失うだけで済むよ。デスクで作業するには楽だし、必要なら2冊に分けることもできる。ただ、これはあまり保管したくない本に対してだけど、『Crafting Interpreters』は絶対に手元に置いておきたい本だね…
この本の後半の一部がGoに翻訳されて、BCL設定言語の骨組みになったよ。 https://github.com/wkhere/bcl
この本を読んで「表現問題」や、その解決策としてのビジターパターンについての理解が深まったよ。これがきっかけで、クラスの階層継承を使った解決策もやっと理解できた。Newspeakでは、クラスの中にネストされたクラスを含めることができるから、クラスをサブクラス化するとネストされたクラスも継承されるんだ。このブログ記事では、Free Object Algebrasについて同じ機能を論じているよ。
この本大好き!木を歩くインタープリタで使われているJavaのバージョンが更新された新しい版が出てほしいな。シールドクラスや網羅的スイッチみたいな新しい機能が追加されて、実装に役立つと思うんだ。
現在のJavaにアップグレードするのは、読者に任された楽しい小さな演習だね。彼のアドホックなコード生成ツールの必要性がほとんどなくなるよ。
冬休みの間にこの本を読み終えたばかりだよ。著者のカジュアルな文体や、ちょっとしたジョークやダジャレが大好きなんだ。「Loxに型チェッカーを追加する」続編が見られるといいな。