バイトコード 【bytecode】
概要
バイトコード(bytecode)とは、ソフトウェアによって実装される仮想的なコンピュータ(VM:Virtual Machine/仮想マシン)のために設計された、命令長が1バイトの命令コードの体系。また、そのようなコードによって記述された実行可能形式のプログラム。現実のCPUは機械語(マシン語)という命令体系に従って記述されたプログラムで動作するが、バイトコードは架空のCPU向けに開発された機械語であり、ソフトウェアによって構成された仮想的なCPUによって解釈・実行される。
命令の種類を示す命令コード(opcode:オペコード)は1バイト固定で、その後に続くパラメータ(オペランド)はバイト単位の可変長になっていることが多い。コードやデータをバイト単位で取り扱うことからバイトコードと呼ばれるが、そのような特徴の有無に関わらず仮想マシン向けの命令コード体系一般を表す語として用いられることもある。
バイトコードの実行環境
バイトコードを利用するプログラミング言語やその実行環境は、人間がプログラミング言語で記述したソースコードをコンパイラなどでバイトコードによるプログラムに変換し、実行時にこれを仮想マシンによってそのコンピュータのCPU固有のネイティブコードに変換して実行する。
バイトコードはソースコードそのものよりも高速に解釈・実行できる一方、特定のCPUの仕様や実装からは独立しており、様々な環境に容易に適応させることができる。このようにソースコードとネイティブコードの中間的な性質を持ち、両者の橋渡しに用いられる言語やコードを「中間言語」(intermediate language)、「中間コード」(intermediate code)という。
バイトコードによるプログラム配布
バイトコードを採用する言語や処理系の多くでは、開発者はバイトコードのプログラムを利用者に提供する。これにより、機種やオペレーティングシステム(OS)ごとに異なる実行プログラムを収録した配布パッケージを用意する必要がなく、仮想マシンが存在する環境ならどこでも同じようにプログラムを動作させることができる。
また、利用者も通常の実行可能形式のプログラムと同じように導入・実行することができ、ソースコードによる配布で必要となる実行可能コードを組み立てる手間が不要となる。副次的な利点として、ソースコードよりもコードサイズが小さくなる点や、ソースコードを利用者に手渡さず隠蔽できる点もある。
利用例
バイトコードを用いる言語として「SmallTalk」や「Java」が有名で、いわゆる.NET言語も.NET Frameworkを実行環境とするバイトコードを生成する。Java言語のために開発されたバイトコードである「Javaバイトコード」が特に有名で、ScalaやClojureのように、ソースコードからJavaバイトコードにコンパイルして、Java仮想マシンを実行環境とする言語(JVM言語)もある。