|
本サイトは移転しました。旧アドレスからのリダイレクトは2025年03月31日(月)まで有効です。
|
🛈 | ✖ |
プログラミング言語とはコンピュータプログラムを記述するための形式言語である。
かつてプログラミング言語はインタプリタとコンパイラの2種類あると教えられた。これらはプログラミング言語の実装手段なのでプログラミング言語の属性とするのは明らかに誤用だが、古くからの慣用として本サイトも従う。
N-BASICは間違いなくインタプリタ言語であり、C++は(本サイトを含むほとんどの運用において)コンパイラ言語である。"コンパイラ"あるいは"インタプリタ"はプログラミング言語を実装する実行ファイルの総称としても使われる。本サイトで使用するC++コンパイラはmingw-w64である。
N-BASICやC++と異なり、より現代的なプログラミング言語はコンパイラでアーキテクチャに依存しないバイトコードを生成し、アーキテクチャに依存するバイトコードインタプリタ(多くは仮想マシンと呼ばれる)がバイトコードを実行する。この処理は一般に多段化できる。
CPUを最終段のインタプリタと見なすこともできる。CISCのマイクロコードはCPU内部で処理されるバイトコードであるとさえ言える。このように眺めればコンパイラ言語とインタプリタ言語は相対的な定義と言えよう。
バイトコードを生成するプログラミング言語の多くはJITコンパイラで実装され、運用上はインタプリタ言語と区別できない。本サイトはインタプリタ言語の代表例としてPythonを参照するが、JITコンパイラで出力されたバイトコードをPython仮想マシンが実行している場合が多い。
インタプリタ言語は実行時にソースコードを解釈するため動的プログラミング言語として実装可能で、例えばオブジェクト指向プログラミングの多態性を容易に実現する(ダックタイピング)。バイトコードにソースコードに記述されている名前や型をメタデータとして保存するプログラミング言語は、インタプリタ言語と同レベルで動的プログラミング言語たり得る。
コンパイラ言語も動的プログラミング言語とする事は可能とされる。しかしC言語を継承するC++は動的プログラミング言語ではなく、多態性の実現に仮想メンバ関数を発明する必要があった(Bjarne Stroustrup, The Design and Evolution of C++, Reading, Addison-Wesley, 1994; Reading, Addison-Wesley, 1998, pp.72-78)。