コンパイル技法: パターンマッチ
無料で読める本
本書では関数型言語をはじめとして多くの言語にあるパターンマッチをコンパイルする方法を紹介します。パターンマッチはシンプルに条件分岐の連鎖にコンパイルすることもできますが、よく研究された手法を使えば驚くほど効率的なコードを生成できるようになります。そのような手法を2種類紹介します。 パターンマッチはデータ型に照合しそのデータを取り出すものです。例えばRustであれば match opt { Some(x) => f(x), None => g()} のように Option 型への照合などに使えます。本書の前半ではパターンマッチの挙動や使い方などを学びます。挙動の確認にはプログラミング言語Standard MLを使い、一部Cのコードも使います。その後Common LispやJavaなどの他の言語でのパターンマッチの状況を確認します。後半ではパターンマッチのコンパイル技法について紹介します。パターンマッチのコンパイルはコンパイラという巨大なソフトウェアの一部で行なわれるものなのである程度コンパイラが何をやっているのかを知っておく必要があるのでその解説も含みます。 本書の内容の前半部分は「 n月刊ラムダノート Vol.1, No.3」(ラムダノート社 2019)で刊行されたものになります。n月刊ラムダノートのCC BY-NC-SAライセンスに基き公開します。ラムダノート社のライセンス設定のおかげで公開することができました。ありがとうございます。後半部分は未公開原稿をベースとしており、こちらもCC BY-NC-SAライセンスで公開します。そのうちn月刊ラムダノートあるいは他の媒体にて刊行されるかもしれません。
Chapters
前半まえがき
動作環境
SML♯のREPLで速習SML
代数的データ型とパターンマッチ入門
パターンマッチの意味
パターンマッチのC言語へのコンパイル
発展的なパターン
代数的データ型がない言語とパターンマッチ
前半まとめと次回予告
後半まえがき
パターンマッチのインタプリタ実装
コンパイラの全景
パターンマッチのコンパイル作戦会議
シンプルなパターンからC風言語へのコンパイル
case言語からsimple_case言語へのコンパイル
パターンマッチのコンパイル:バックトラック法
パターンマッチのコンパイル:決定木法
発展的話題
コンパイルの動作例
後半まとめ
Author
Topics