関数型言語の実装のチュートリアル
関数型言語を実装するときに参考になるウェブ上の資料
京都大学工学部専門科目「プログラミング言語処理系」講義資料
「プログラミング言語処理系テキスト」の中で、OCamlのサブセットである言語MiniMLのインタプリタとコンパイラをOCamlで作る。
目次(一部):
3章: 型無し MiniML インタプリタの実装
4章: 型推論機能付き MiniML インタプリタの実装
5章: MiniML コンパイラの実装
速攻MinCamlコンパイラ概説
プログラミング言語MLのサブセット「MinCaml」のコンパイラをOCamlで作る。
目次(一部):
字句解析
構文解析
型推論
K正規化
α変換
β簡約
ネストしたletの簡約
インライン展開
定数畳み込み
不要定義削除
クロージャ変換
仮想マシンコード生成
13 bit即値最適化
レジスタ割り当て
アセンブリ生成
Essentials of Compilation
RacketかPythonで小さな言語のコンパイラを実装し、最終的に第一級関数、漸進的型付け、パラメトリック多相を備えた言語に発展させる。詳しくはEssentials of Compilationを参照。
Implementing Functional Languages: a tutorial
Coreという小さな関数型言語をHaskell(オリジナルのPrentice Hall版ではMiranda nobsun.icon)で作る。
目次:
1 The Core language
2 Template instantiation
3 The G-machine
4 TIM: the three instruction machine
5 A Parallel G-machine
6 Lambda Lifting
LispKit Lisp処理系の実装
純粋関数型Lisp方言であるLispKit LispのインタプリタとSECD抽象機械の機械語へのコンパイラを作成する。
タネ本はHendersonの「Functional Programming - Application & Interpretation」で、この本に載っているISWIMやPascalのコードを大体なぞるようにPythonで書いていく。
Programming Languages: Application and Interpretation (PLAI)
Racket上に実装された独自言語plaitでプログラミング言語SMoL(Standard Model of Languages)を作り、それに様々な機能を追加していく。
Structure and Interpretation of Computer Programs (SICP)
Scheme のサブセットのインタープリタとコンパイラを Scheme で作る。4章と5章。SICPも参照。
4 Metalinguistic Abstraction
4.1 The Metacircular Evaluator
4.2 Variations on a Scheme -- Lazy Evaluation
4.3 Variations on a Scheme -- Nondeterministic Computing
4.4 Logic Programming
5 Computing with Register Machines
5.1 Designing Register Machines
5.2 A Register-Machine Simulator
5.3 Storage Allocation and Garbage Collection
5.4 The Explicit-Control Evaluator
5.5 Compilation
Write You a Haskell
Haskell のサブセット「Fun」を Haskell で作る。未完。詳しくはWrite You a Haskellを参照。
Write Yourself a Scheme in 48 Hours
SchemeのサブセットのインタプリタをHaskellで作る。
目次:
First Steps: Compiling and running
Parsing
Evaluation, Part 1
Error Checking and Exceptions
Evaluation, Part 2
Building a REPL: Basic I/O
Adding Variables and Assignment: Mutable State in Haskell
Defining Scheme Functions: Closures and Environments
Creating IO Primitives: File I/O
Towards a Standard Library: Fold and Unfold
Conclusion & Further Resources
Answers to Exercises