独習mrubyバイトコード[OP_MOVE]

LearnByteCode, Techc, Japanese, mruby

OP_MOVE

Arguments

  • A:レジスタ番号
  • B:レジスタ番号

How it works?

レジスタ[A]にレジスタ[B]のポインタを代入する
MOVEとあるが、実際はポインタのコピーを行っている。

When used?

レジスタ操作の基本。あちこちで使われる。

Note

VMが持っているレジスタはmrb_value構造体の配列であり、オブジェクトが何でも入る。
コピーで上書きされるレジスタに入っているオブジェクトの参照を減らしている。(mruby/cでは参照カウント式のGCを実装しているため)

  mrbc_release(&regs[ra]);
  mrbc_dup(&regs[rb]);
  regs[ra] = regs[rb];

mrubyでは参照の操作はなく、単にポインタをコピーしているだけ。

Reference

https://qiita.com/miura1729/items/256d205bc2a464bfb3c6