この実験ではML言語のサブセットであるMiniML言語のコンパイラを作成する.MiniMLの言語仕様の詳細については改めて言語仕様で説明するが,基本的には,講義「プログラミング言語処理系」および「計算機科学実験及び演習3 ソフトウェア」の中で扱ったML言語に対し少しばかりの機能を追加したものである.たとえば,次は正しいMiniMLのプログラムである.

let multiplicand = 8 in
let rec multiply8 = fun n ->
  if n < 1 then
    0
  else
    multiplicand + multiply8 (n+-1)
in
let apply = fun f -> fun x -> f x in
apply multiply8 9;;

この(かなり作為的な)プログラムでは,関数を値として扱い(multiply8),また,関数本体からはその外側の環境で宣言されている変数を参照している(multiplicandf).関数型言語の高水準な機能を使っているこのようなプログラムを,より単純で低水準な機能しか持ち合わせていない機械語へ変換するコンパイラを実現することが,この実験の目標である.

また,コンパイラが生成する機械語コードの実行性能を実感し,性能向上のための種々のコード最適化手法を学ぶのも実験の目的である.そのため,MiniMLコンパイラが出力する実行ファイルの動作確認には,ハードウェア・シミュレータなどではなく実機のRaspberry Pi 3を使用することにする.