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