バイトコード
バイトコード (bytecode) は、仮想マシンによる実行のために設計された、実行可能なプログラムのバイナリ表現である。ソフトウェアによって処理されるため、大抵は実機の機械語より抽象度の高い中間コードになっている。プログラミング言語の実装において、特定のハードウェアへの依存度を下げ、またインタプリタの実装を容易にするために用いられる。コンパイラの中間コードとして用いられることもある。
バイトコードという名前は命令の構成がバイト指向であること、すなわち命令長がバイト可変長であったり、命令中のフィールドの区切りがバイト区切りに合っているといったことから来ている。特にJavaの場合オペコードが1バイトである。しかし、仮想マシンの機械語をバイトコードと呼ぶことがJavaで広く一般的になったことから、前述のようなバイト指向でなくともバイトコードと呼んでいることも多い。バイト単位でなくビット単位の場合は、ビットコードとも呼ばれる。ワード指向のためにワードコードという語を使っている例も見られる。
バイトコードで記述されたプログラムは通常、バイトコードインタプリタによって解釈・実行される。バイトコードインタプリタは機械語を解釈・実行するCPUとの類似性からバーチャルマシンとも呼ばれる。
バイトコードを用いる方式の利点は移植性の高さである。この利点はバイトコードを用いない単純なインタプリタと共通する。しかしバイトコードのほうが抽象度の低さ、データサイズなどの点で優れており、人の手で読み書きされる用途のソースコードよりコンピュータにとって扱いやすいため、単純なインタプリタよりパフォーマンスは多くの場合で上回る。このパフォーマンス上の利点から、現在の多くのインタプリタ言語は実際にはバイトコードへコンパイルされた後、バイトコードインタプリタによって実行される。またパフォーマンス以外にも、ソースコードの中身を隠蔽する目的でバイトコードが用いられる場合がある。
バイトコードを使用した初期のコンピュータにはSystem/38があり、ソフトウェアのインストール時に機械語に変換された。またJavaのプログラムは、コンパイル済みバイトコードも利用者の環境を選ばないことから、ソースコードだけではなくバイトコードにコンパイルしたものも、標準的に配布されていることが多い。
使用例
- System/38 - TIMI(Technology Independent Machine Interface)
- Java - Javaバイトコード
- .NET Framework - 共通中間言語 (CIL)
- Perl6
- Ruby 1.9
- JavaScriptの処理系の一部