バイトコード
特定のOSやハードウェアに依存しない設計
プロセスVMが実行するために設計された実行可能なプログラムのバイト表現
機械語より抽象度が高く設計されているものが多い
一つ一つの命令が1byte。8bit。
高級言語と比較して
プログラムサイズがコンパクト
だが、命令列からデータを取り出すフェッチ回数が増えがち
処理速度が高速
プログラムサイズがコンパクト
Java, Smalltalkなど
VMはバイトコードを実行する
機械から見る機械語のようなもの
必ずしもバイトコードというわけはない
Opcode
Operand
エンディアン
バイトコードはopcodeとoperandの配列と考えることができる
これらはメモリ上で隣り合って配置される
バイトコードは、domain-specific machineのdomein-specific language(DSL)である
ドメイン固有のコンテキストのみで意味をなす命令を加えることができる
↓これらはx86-64とかにはない命令
すなわちこの辺も自分でデザインできるというわけかmrsekut.icon
JVMのバイトコード
invokeinterfaceがある
これは、インターフェースメソッドを呼び出すための命令
getstatic
クラスの静的フィールドを取得する
new
指定されたクラスの新しいオブジェクトを作成する
Rubyのバイトコード
putobject
スタックに自分自身をロードし、オブジェクトにメッセージを送信するために送信し、任意のオブジェクトをスタックにロードする
Luaのバイトコード
テーブルやタプルへのアクセスと操作のための専用の命令
JavaScriptのバイトコード
https://webkit.org/blog/9329/a-new-bytecode-format-for-javascriptcore/
参考
『Writing An Compiler In Go』