中間コード 単語

チュウカンコード

2.5千文字の記事
  • twitter
  • facebook
  • はてな
  • LINE

中間コードとは、

のいずれか、または両方をす言葉である。

概要

機械語バイナリデータを直接記述しない限り、人間の書いたプログラム(ソースコード)をコンピュータが直接実行することはできない。従って、プログラミングではソースコードを各コンピュータで実行できる機械語に変換する必要がある。

この変換過程の中間生成物を中間コードと呼ぶことがある。インタプリタよりもコンパイルで用いられることが多い用である。

高級言語と機械語の中間の性質を持つコードとしての中間コード

高級言であるJavaC#等はそのままではコンピュータが実行できる形式ではない。これらの言に限らないが、一般的にソースコードの実体は単なるテキストファイルグループである。実行するには機械語に変換する必要があることは既に述べたが、機械語CPUアーキテクチャハードウェア構成などに依存しているので、異なるコンピュータでは実行できない等の問題が起きる。

そこで、JavaC#ではソースコードを中間コードにコンパイル(変換)して、各コンピュータに導入されている仮想マシン(実行環境)に実行させることで、仮想マシン内で中間コードが各コンピューター向けの機械語に変換されて実行されてどの環境でも同じ結果が得られるようにしている。

そのため、この形式を採用している開発環境で作成されたプログラムを実行するためには、対応する実行環境仮想マシン)が導入されている必要性がある。ものすごく大雑把にいえば、RPGツクールで作られたゲームを遊ぶにはRPGツクールの実行環境が必要、といったものと同じである。

Javaバイトコード.NET FrameworkのCIL(Common Intermediate Language: 共通中間言)が有名だが、他にはWebAssemblyもこのタイプの中間コードと言える。

プログラミング言語から実行ファイルを作成する過程で生成される中間コード

C/C++のような高級言の中でも機械語コンパイルしやすい言では、コンパイルの結果として仮想マシンを必要としない実行ファイルを得ることができる。これら言コンパイルの際に、ソースコードファイルクラス別に一時的なコンパイル結果としてのオブジェクトファイルが生成される。これをして中間コードと呼ぶ。

また、アセンブリ言語のように機械語CPUの命コード)に一対一で対応したプログラムを記述するタイプの低級言でも、コンパイル(アセンブル)を通して実行ファイル形式を得る必要があるが、これについてもC/C++等と同様の中間コードが生成されることがある。

デバイスドライバ等のハードウェア依存するコードはこれらの機械語に変換しやすい言[1]で書かれることが多い。

なお、C/C++アセンブリ言語に代表される直接実行コードを生成できる開発環境においても、ユーザーインターフェィスを伴うような実行ファイルでは、デバイスドライバハードウェアの差異を吸収するための外部ライブラリを実行時リンクするための動的リンク環境が必要となるケース[2]が多く、開発環境に応じた実行環境仮想マシンではなく、ライブラリファイル群)が必要となるケースが多い。

かつてのポケットコンピュータ等では命コード機械語コードとほぼ一対一で対応しているものがあり、BASICのように見えるが実体はアセンブリ言語に近いといった環境もあった。

LLVMビットコード仮想マシンで直接実行するのではなく、最終的に各環境にあわせてコンパイルされるので、このタイプの中間コードと言えよう。

中間コードを生成する利点

中間コードを保持しておくことで、元のソースコードが変更されていない場合(一部ファイルリライトされた場合)に、変更された部分だけをリコパイルしてリンクすることでフルコンパイルするより素く新しい実行ファイルを得ることができるといった利点がある。

中間コードを生成しない例

PythonJavaScriptRubyのようなスクリプト言語は、プログラムの実行中にプログラミング言語から機械語への変換を行っている。また、コマンドプロンプトにおけるバッチファイルなどのコマンド制御スクリプトは、シェル[3]スクリプト言語の実行環境として扱ってプログラムを実行する。

一見してどの環境でも実行可に思えるが、実際には「プログラミング言語から機械語への変換」を行うための実行環境Pythonライブラリ群やRubyライブラリ群などが必要である。バッチファイルでもシェル実装が違えば(Linux等では複数のシェル提供されている)実行結果も異なる。言ってみれば「ソースコードとなるバッチファイルを逐次コンピュータが理解できる形式にして実行している」わけである。

一部のスクリプト言語コンパイルを行い実行ファイルを生成することができる。また、スクリプトが変更されていない場合に限り、一度逐次コンパイルした結果をキャッシュしておいて実行速度を上げるといった処理が行われることがある。

しかし、通例としてこのキャッシュされたコンパイル済みコードは中間コードとは呼ばれていない。

関連項目

脚注

  1. *外部ライブラリ仮想マシンを必要としない実行環境を想定するため。
  2. *GCCにおけるライブラリ群や、.NET Frameworkのようなライブラリ群が該当する。
  3. *OSの根幹部分であるカーネルのすぐ上にある階層の基本的なコマンド実行システムWindowsであればcmd.exePower ShellLinuxであればBashやsh、csh等。
この記事を編集する

掲示板

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
もっと見る

急上昇ワード改

最終更新:2024/04/25(木) 06:00

ほめられた記事

最終更新:2024/04/25(木) 06:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP