FFI をもつ Scheme インタプリタのための部分コンパイル方式コンパイラの構成法 (2018年度 修士論文)

氏名:寺澤 哉門

概要:

  高級言語の実装方法は主にインタプリタとコンパイラの 2 つがある.対話的に実行するインタプリタはデバッグが容易で,実装もしやすく移植性が高いが,式を逐次的に解釈して実行する ため実行速度は遅い.コンパイラは式の解釈と分類をコンパイル時に行うためプログラムをより効率的に実行できる.コンパイルのターゲットを機械語とする方法もあるが,比較的低級な他のプログラミング言語,例えば C にコンパイルする方法もある.C は多くのマシンで実行可能であり,移植性が高く,通常は優れた最適化を持っているためである.
  プログラミング言語 Scheme の処理系の中には Scheme-to-C コンパイラを持つものもある. Scheme と C は実行モデルが異なるため,Scheme プログラムを C にコンパイルするには Scheme の実行モデルを C で模倣するための仕組みを設計しなければならない.C と C にコンパイルされた Scheme の間にこのような仕組みが入ることで実行速度は低下する.Scheme のコード辺のなかには C の素直なコードで表現できるものもあり,これらを C の素直なコードに変換する最適化が可能である.Scheme-to-C コンパイラの中にはこのような最適化器を備えるものもあるが,模倣する仕組みや最適化器の作成には高度な技術が必要とされる.
  本研究では作成が比較的容易でありながら比較的高性能なコンパイラを実現するために, Scheme プログラムのうち,比較的容易に見つけ出せる C の素直なコードで表現できる Scheme コード辺のみをコンパイル対象とするコンパイラを提案する.コンパイル対象とならない Scheme コードの実行はインタプリタに任せる.これらのコードはインタプリタの FFI (Foreign Function Interface)を使って組み合わせる.FFI とは,あるプログラミング言語から他のプログラミング言語の関数にアクセスする機能である.性能評価では優れた最適化器をもつ Scheme-to-C コンパイラには及ばないものの,バイトコード方式の Scheme 処理系より高速となった.


[研究室内部向け情報]