一般にプログラムの実行手法には、「コンパイラ (Compiler)」と「インタプリタ (Interpreter)」と呼ばれる二つがあります。Python はインタプリタと呼ばれるタイプの言語処理系です。
ここでは簡単にそれぞれの実行手法の仕組みを(とても簡単に)説明します。なお、このあたりの詳細については「コンピュータ概論」や「プログラミング演習C」「プログラミング言語」「応用プログラミング(C, Python)」あたりで学べます。
ところで教科書の p.3 には問題が(再掲) |
---|
ところで教科書 p.3
のインタプリタに関する説明は一箇所だけ誤りがあります。(「やさしいC」もそうでしたが、このシリーズはところどころに誤った説明があります。) ページ中ほどに「入力されたプログラムを1行ずつ機械語に翻訳するプログラムによって実行される」とありますが、これは誤りです。翻訳過程は経ますが、元のPythonのプログラムが最終的に等価な機械語に変換されることはありません。 |
まず仕組みとして簡単なコンパイラから、どうやって人間が書いたプログラムが実行されるのか(簡単に)説明します。例えば C 言語が典型的なコンパイラを用いる言語処理系です。
以下にこの手続きを図示します。
次にインタプリタによってプログラムが実行される仕組みを(やはり簡単に)説明します。Python 言語はインタプリタを用いる言語処理系です。
以下にPythonのプログラムが実行される流れを図示します。
違いは、実行主体がハードウェア、つまり本物の電子回路である CPU か、それとそっくり同じ動作をするソフトウェア(プログラム)である「仮想CPU」か、です。
つまり「仮想CPU」もプログラムなのですから、最終的にはそれは CPU 、つまり物理的なハードウェアが実行します。この状況を加味して描いた図を示します。
結局のところはハードウェアであるCPUが実行することになるのですから、「仮想CPU」を中間に配した構造は意味が無いように思うかも知れません。現在ではモダンな言語処理系の多くはこの形式を取っており、中間コード(バイトコードと呼ばれる形式の場合が多い)を用いて実行する構造のメリットはそれなりに多いのですが、この科目ではこれ以上説明しません。
それより、上の図の赤線で囲った範囲、つまりソフトウェアで仮想CPUを前提としてプログラムを解釈実行する仕組みのことを「インタプリタ」と呼ぶんだ、ということだけ意識しておいててください。
「仮想CPU」ってなに? |
---|
「仮想CPU」というのは、ストレートに説明すると「そこにあたかもCPUが実在すると見なせる状況を提供するもの」です。実際にはCPUは存在せず、データの入力に対して「あたかも実際のCPUが返すのと同じ結果を返す」プログラムがあるだけなのです。 ここ最近「仮想現実」などの文脈で「仮想**」がよく登場します。英語の「 virtual 」の直訳として「仮想」が使われるようになっていますが、英単語 virtual を辞書で引くと “実質上の、事実上の、実際上の、実質的な。実体・事実ではないが「本質」を示すもの。” あたりの説明が出てくると思います。つまり「仮の」ではなく「実際にそこにある」ように見えることが重要です。 コンピュータは入力されたデータに対して何らかの処理をした結果をデータとして出力するものです。データを食べてデータを吐くのです。その中心的な存在がCPUですから、つまり「仮想CPU」とは、「本来CPUに与えられるはずのデータを入力として与えると、まるで本物のCPUと同じ結果をデータとして返すプログラム」のことを指します。 |