класс RubyVM
Модуль RubyVM существует только в MRI. RubyVM не определен в других реализациях Ruby, таких как JRuby и TruffleRuby.
Модуль RubyVM предоставляет доступ к внутренним компонентам MRI. Этот модуль предназначен для узких целей, таких как отладка, прототипирование и исследования. Обычным пользователям он не нужен. Этот модуль не переносим между реализациями Ruby.
Константы
- DEFAULT_PARAMS
-
::RubyVM::DEFAULT_PARAMS Эта константа предоставляет значения параметров по умолчанию для виртуальной машины. Обратите внимание, что изменение этих значений не влияет на выполнение виртуальной машины. Описание нестабильно, и вы не должны полагаться на это значение. Конечно, эта константа специфична для MRI.
- INSTRUCTION_NAMES
-
::RubyVM::INSTRUCTION_NAMES Список имен команд байткода в MRI. Эта константа специфична для MRI.
- OPTS
-
::RubyVM::OPTS
Arrayпараметров сборки виртуальной машины. Эта константа специфична для MRI.
Общедоступные методы класса
static VALUE
vm_keep_script_lines(VALUE self)
{
return RBOOL(ruby_vm_keep_script_lines);
} Возвращает текущий статус keep_script_lines. Сейчас он возвращает только true от false, но в будущем может возвращать другие объекты.
Обратите внимание, что это API предназначен для внутреннего использования Ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
static VALUE
vm_keep_script_lines_set(VALUE self, VALUE flags)
{
ruby_vm_keep_script_lines = RTEST(flags);
return flags;
} Устанавливает флаг keep_script_lines. Если флаг установлен, все загруженные скрипты записываются в процессе интерпретатора.
Обратите внимание, что это API предназначен для внутреннего использования Ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
static VALUE
vm_stat(int argc, VALUE *argv, VALUE self)
{
static VALUE sym_constant_cache_invalidations, sym_constant_cache_misses, sym_global_cvar_state, sym_next_shape_id;
static VALUE sym_shape_cache_size;
VALUE arg = Qnil;
VALUE hash = Qnil, key = Qnil;
if (rb_check_arity(argc, 0, 1) == 1) {
arg = argv[0];
if (SYMBOL_P(arg))
key = arg;
else if (RB_TYPE_P(arg, T_HASH))
hash = arg;
else
rb_raise(rb_eTypeError, "non-hash or symbol given");
}
else {
hash = rb_hash_new();
}
#define S(s) sym_##s = ID2SYM(rb_intern_const(#s))
S(constant_cache_invalidations);
S(constant_cache_misses);
S(global_cvar_state);
S(next_shape_id);
S(shape_cache_size);
#undef S
#define SET(name, attr) \
if (key == sym_##name) \
return SERIALT2NUM(attr); \
else if (hash != Qnil) \
rb_hash_aset(hash, sym_##name, SERIALT2NUM(attr));
SET(constant_cache_invalidations, ruby_vm_constant_cache_invalidations);
SET(constant_cache_misses, ruby_vm_constant_cache_misses);
SET(global_cvar_state, ruby_vm_global_cvar_state);
SET(next_shape_id, (rb_serial_t)GET_SHAPE_TREE()->next_shape_id);
SET(shape_cache_size, (rb_serial_t)GET_SHAPE_TREE()->cache_size);
#undef SET
#if USE_DEBUG_COUNTER
ruby_debug_counter_show_at_exit(FALSE);
for (size_t i = 0; i < RB_DEBUG_COUNTER_MAX; i++) {
const VALUE name = rb_sym_intern_ascii_cstr(rb_debug_counter_names[i]);
const VALUE boxed_value = SIZET2NUM(rb_debug_counter[i]);
if (key == name) {
return boxed_value;
}
else if (hash != Qnil) {
rb_hash_aset(hash, name, boxed_value);
}
}
#endif
if (!NIL_P(key)) { /* matched key should return above */
rb_raise(rb_eArgError, "unknown key: %"PRIsVALUE, rb_sym2str(key));
}
return hash;
} Возвращает Hash, содержащий зависящие от реализации счетчики внутри виртуальной машины.
Этот хэш включает информацию о кэшах методов/констант:
{
:constant_cache_invalidations=>2,
:constant_cache_misses=>14,
:global_cvar_state=>27
}
Если USE_DEBUG_COUNTER включено, счетчики отладки будут включены.
Содержимое хэша зависит от реализации и может быть изменено в будущем.
Этот метод ожидается, что будет работать только на C Ruby.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.