8-1. 高級言語と仮想機械の話
本実験の仕上げとして、簡単なコンパイラを作成する。コンパイラは、通常、高級言語から何らかの機械語への変換し、それに伴い、実行速度向上のための種々の効率化(最適化と言う)を適用する。
関数型プログラム言語は、インタープリタを書くことだけが得意なのではなく、構造をもったデータ(不定長のデータ、数式、論理式、XMLデータ、プログラムなど)の処理全般が得意であり、コンパイラの記述も(他言語に比べて)比較的容易に行なうことができる。
- 既に作ったインタープリタ:高級言語(ミニOCaml言語、または、それの拡張)のプログラムを与えられた時、それを実行し、結果を返すプログラムである。高級言語の意味を理解するためには非常に適している。与えられた式のうち、「次に計算する部分」を探して逐一解釈して(match文により、どの種類の式かを判別して)、処理を行なうので、特に、再帰呼び出しを1000回繰返すような処理では、実行速度が遅い。
- これから作るコンパイラ:高級言語(ミニOCaml言語、または、それの拡張)のプログラムを与えられた時、それを別の言語(ターゲット言語)のプログラムに変換するプログラムである。得られたプログラムは、別途、実行される。ターゲット言語は、機械語、仮想的な機械語、他の高級言語など様々である。
- 最適化コンパイラ: 多くのコンパイラは、言語間の変換をするだけでなく、静的情報を利用して実行速度の向上を図るための様々な工夫を行っており、これを最適化と言う。最適化するコンパイラを特に「最適化コンパイラ」と呼ぶこともある。
- コンパイラのターゲット言語:高速な実行を意図したコンパイラは、ターゲット言語が機械語(CPUで直接実行できるもの)であることが多いが、本実験では、特定のCPUに依存させないため、「仮想的な機械」の上で走る機械語をターゲット言語とする。この仮想的な機械は、直接、IntelなどのCPUでは動かないので、「仮想的な機械語」を実行するためのインタープリタが必要である。若干、話がこみいってきたが、ここでの話は、Javaのコンパイラによく似ている。
- javac: Javaプログラムを JVM(Java仮想機械)の機械語のプログラムに変換する。
- java: JVM(Java仮想機械)の機械語で書かれたプログラムを実行する。
本実験では、javac に相当する部分とjava に相当する部分を両方とも学生が作成する。
トップ,
前へ,
次へ.
亀山幸義