KDOC 287: バイトコードにメモリサイズが書かれていないことを確認する
この文書のステータス
- 作成
- 2024-11-15 貴島
- レビュー
- 2024-11-19 貴島
概要
仮想マシンの機械語をバイトコードと呼ぶ。バイトコードは抽象的なマシンなので、メモリを番地レベルで考えない。メモリサイズが書かれてないのを実際のバイトコードを見て確認する。
puts RubyVM::InstructionSequence.compile('[1, 2, 3, "a", "b"]').disasm
== disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(1,19)> (catch: FALSE)
0000 putobject_INT2FIX_1_ ( 1)[Li]
0001 putobject 2
0003 putobject 3
0005 putstring "a"
0007 putstring "b"
0009 newarray 5
0011 leave
単純にスタックに積むことだけが書かれているのを確認できた。
関連
抽象。
- 細部を実行する側が引き受ける形式では、命令にデータの大きさを書かずに済む
関連。
- 参照: バイトコード - Wikipedia
- 動機: KDOC 272: バイトコード変換は型情報が必須ではない。これを確かめた
- 対比: KDOC 271: 動的型付け言語が機械語に変換しにくい理由を考える。機械語の側では、データのサイズを明確に決めないといけないという逆の面
- 補足: KDOC 144: データ型によるサイズの違いを確かめる。機械語の層ではデータ型ごとにサイズが具体的に決まっている例