実行 (コンピュータ)
プログラムの実行 |
---|
一般的な概念 |
コードの種類 |
コンパイル戦略 |
有名なランタイム |
|
有名なコンパイラとツールチェーン |
|
|
ソフトウェア工学において、コンピュータで実行 (じっこう、execution / run)するとは、コンピュータまたは仮想マシンがコンピュータプログラムの命令を実行すること。プログラムの各命令は、特定の問題を解決するために実行される、特定のアクションについての説明である。命令が記述するアクションが実行中のマシンによって実行されると、実行された命令のセマンティクスに従って、特定の効果が生成される。
コンピュータ用のプログラムは、人間の介入なしにバッチ処理で実行することも、ユーザーがインタプリタの対話型セッションでコマンドを入力することもできる。この場合、「コマンド」は単にプログラム命令であり、その実行は連鎖している。
実行時環境
実行が行われる環境は非常に重要である。オペレーティングシステムやミドルウェア等を仲介しないベアメタル環境でプログラムが動作することはほとんどない。プログラムには通常、実行時に使用可能なリソースに関する暗黙的および明示的な仮定 (動作の前提条件) がある。ほとんどのプログラムは、オペレーティングシステムと、コンピュータ自体が提供しない重要なサービスを提供するランタイムライブラリのサポート環境で実行される。たとえば、このサポート環境は通常、プログラムがコンピュータ周辺機器を直接操作しなくても良いように、代わりに、より一般的で抽象的なサービスを提供する。
手順
実行する前に、まずプログラムを作成する必要がある。これは通常、ソースコードを書くことで行われ、コンパイル時にコンパイルされ(リンク時に静的にリンクされ)、実行可能ファイルにリンクされる。次に、この実行可能ファイルが、オペレーティングシステムによって呼び出される。オペレーティングシステムは、プログラムをメモリにロードし(ロード時)、動的リンクを行う、制御をプログラムのエントリポイントに移動して実行を開始する。これらの手順は、オペレーティングシステムのアプリケーションバイナリインターフェイスによって異なる。この時点で実行が開始され、プログラムは実行時の段階に入る。その後、プログラムは、正常終了またはクラッシュのいずれかで終了するまで実行される。
インタプリタ
プログラムを実行するシステムは、プログラムのインタプリタと呼ばれる。大まかに言えば、インタプリタは実行時にプログラムの命令を解釈して指示どおりに実行する。これは、プログラムをある言語から別の言語に変換するコンパイラとは対照的である。コンパイラは、ソースを人間が読める高レベルの言語から、プロセッサが直接実行できる高速な低レベルの言語(ネイティブなマシンコードなど)に変換する。プログラムは1回コンパイルするだけで、以後、何度でも低レベル言語で実行できる。これは、ソース言語を実行時に解釈するインタープリタと比較して、コンパイラに大きなメリットがある。その代わり、コンパイラの場合は開発にかかる時間が長くなる。場合によっては、変更されたファイルのみの再コンパイルで済む場合もある。その後、実行可能ファイルを再リンクする必要がある。変更の内容によっては、実行可能ファイルを最初から再構築する必要がある。コンピューターとコンパイラーが高速になるにつれて、これはそれほど課題ではなくなった。また、ユーザーにとっては開発にかかる時間よりも最終製品の実行速度が重要である。
コンパイラは通常、すぐには実行できない抽象的な結果を生成する。多くの場合、オペレーティングシステムは、プログラムの実行が開始される直前に、コンパイラのオブジェクトコードを最終的な実行可能形式に変換する。