実行モデル
From Wikipedia, the free encyclopedia
実行モデル (じっこうモデル、英: execution model)は、プログラミング言語の構成要素の一つ。
プログラミング言語は、文法/構文と実行モデルで構成される。実行モデルは、言語の要素の動作を指定する。実行モデルにより、そのプログラミング言語で書かれたプログラムの振る舞いを理解できる。たとえば、プログラマーがコードを「読んでいる」とき、頭の中でコードの各行が何をするかを考え、心の中の動作をシミュレートする。プログラマーが行っているこの作業は、実行モデルをコードに適用することである。
すべてのプログラミング言語には実行モデルがあり、作業単位(プログラム構文で示される)の実行がスケジュールされる方法を決定する。言語の実行モデルの仕様の例には、Pythonの実行モデル[1]、Unified Parallel C(UPC)プログラミング言語の実行モデル[2]、そして命令/関数型言語といったさまざまなクラスの実行モデル[3]と、リアルタイム組み込みデバイス向け実行モデル[4]などがある。
操作的意味論は、言語の実行モデルを指定する1つの方法である。実行中のプログラムの動作は、(言語の実行モデルを定義する)操作的意味論から派生した動作と一致する必要がある。
実行モデルは、分割できない作業単位とは何か、それらの作業単位が実行される順序の制約は何かなどをカバーする。たとえば、加算操作は多くの言語で分割できない作業単位であり、順次言語では、このような作業単位は次々に実行されるように制約される。
これを説明するために、書籍プログラミング言語C (K&R)で説明されているCプログラミング言語について考えてみよう[5] 。 Cにはステートメントと呼ばれる概念がある。言語仕様では、ステートメントを「;」で終了する構文のチャンクとして定義している。次に、言語仕様には、「プログラムの実行は、次々にステートメントを順番に進める」と書かれている。 「プログラムの実行は、次々とステートメントを順番に進める」という言葉は、Cの実行モデルの一部である。これらの単語は、ステートメントが分割できない作業単位であり、コード内の構文上の外観と同じ順序で進行することを示す(IFやFORなどの制御ステートメントが順序を変更する場合を除く)。 「プログラムの実行は次々とステートメントを順番に進める」と述べることにより、プログラミングモデルは作業単位を実行する順序に関する制約を述べている。
C言語には、実際には実行モデルに追加のレベルがある。これは優先順位である。優先順位は、単一のステートメント内の操作の順序の規則を示す。優先順位は、単一のステートメント内にある作業単位の実行に関する制約を示すものと見なすことができる。そう、 ";" 「IF」と「WHILE」はステートメントの順序の制約をカバーし、優先順位はステートメント内の作業の制約をカバーする。したがって、C言語仕様のこれらの部分は、C言語の実行モデルの一部でもある。
実行モデルは、プログラミング言語から独立して存在することもできる。その例としては、 POSIXスレッドライブラリやHadoopのMap-Reduceプログラミングモデルがある。実行モデルの実装は、コンパイラまたはインタープリタを介して行い、多くの場合、ランタイムシステムが含まれる。
実行モデルの実装は、実行中に作業が行われる順序を制御する。この順序は、状況によっては事前に選択することも、実行が進むにつれて動的に決定することもできる。ほとんどの実行モデルでは、両方の程度を変えることができる。たとえば、C言語は、ステートメント内の作業の順序を修正し、IFステートメントまたはループステートメントの形式を含むステートメントを除くすべてのステートメントの順序を修正する。したがって、実行順序のほとんどは、実行が開始される前に静的に選択できるが、実行が進むにつれて、ごく一部を動的に選択する必要がある。
静的な選択は、ほとんどの場合コンパイラ内で実装されます。この場合、作業の順序は、命令が実行可能バイナリに配置される順序で表される。動的な選択は、言語のランタイムシステム内に実装される。ランタイムシステムは、コンパイラによって挿入された命令によって呼び出されるライブラリにすることも、次に実行する作業を動的に選択する分岐命令を挿入するなどして、ランタイムシステムを実行可能ファイルに直接埋め込むこともできる。
ただし、インタプリタは任意の言語用に構築することもできる。その場合、実行順序に関するすべての決定は動的となる。インタプリタは、パーツトランスレータ、およびパーツ実行モデルの実装と見なすことができる。
アセンブリ言語実行モデルとマイクロアーキテクチャによる実装
アセンブリ言語にも、他の言語と同じ実行モデルがあります。このような実行モデルは、CPUマイクロアーキテクチャによって実装されます。たとえば、5ステージのインオーダーパイプラインと大規模なアウトオブオーダーCPUの両方が、同じアセンブリ言語実行モデルを実装します。実行モデルは動作の定義であるため、すべての実装は、順序どおり、順序外、インタープリター型、JIT型など、すべてまったく同じ結果をもたらす必要があり、その結果は実行モデルによって定義されます。