独習mrubyバイトコード[GETSPECIAL][SETSPECIAL]
GETSPECIAL,SETSPECIAL
Arguments
(現在使用されていない命令)
How it works?
(現在使用されていない命令)
When used?
(現在使用されていない命令)
Note
@miura1729さんのコメントによると、
実はこの2つの命令は今は使われていないのでした。
とあるけれど、もともとなんのためにあったのか?
検索してみるとYARV1のバイトコードにその名前があった。
これは、普通のグローバル変数ではなくて、特殊変数2を扱うために存在するらしい。
確かにmrubyはそのような変数を持っていないので、バイトコード命令が不要というのも理解できた。
命令が予約されているのは、何かmrubyでも元々使うユースケースがあったのだろうか?
githubのissueを検索してみると、まさにその質問があった。
“What are “special” variables? #2735”
まつもとさんの返答は下記の通り。
special variables are variables that look like global variables but have different semantics e.g. $1 or $~ etc.
And currently mruby does not support any special variables (yet).
(yet)というのがどういうニュアンスなのか難しいところだけど、もしかすると将来サポートされる可能性も無くは無い、のかもしれない。
しかし、@miura1729さんのコメントのニュアンスだと、過去には対応していたように読める。
試しに、mruby ver1.0.0を開いてみると、確かにこのときには存在していたようだ。
https://github.com/mruby/mruby/blob/1.0.0/src/vm.c
CASE(OP_GETSPECIAL) {
/* A Bx R(A) := Special[Bx] */
regs[GETARG_A(i)] = mrb_vm_special_get(mrb, GETARG_Bx(i));
NEXT;
}
CASE(OP_SETSPECIAL) {
/* A Bx Special[Bx] := R(A) */
mrb_vm_special_set(mrb, GETARG_Bx(i), regs[GETARG_A(i)]);
NEXT;
}
Reference
https://qiita.com/miura1729/items/256d205bc2a464bfb3c6
http://www.atdot.net/yarv/yarvarch.ja.html
https://docs.ruby-lang.org/ja/latest/doc/spec=2fvariables.html#global
- YARVとは ↩
-
https://docs.ruby-lang.org/ja/latest/doc/spec=2fvariables.html#global
特殊変数とは$&、$1のような変数のこと。Perlから受け継いだそうです。 ↩
Recent Comments