Spec-Zone.ru › Ruby 3.2

класс RubyVM

Родитель:
Объект

Модуль RubyVM существует только в MRI. RubyVM не определен в других реализациях Ruby, таких как JRuby и TruffleRuby.

Модуль RubyVM предоставляет некоторый доступ к внутренностям MRI. Этот модуль предназначен для очень ограниченных целей, таких как отладка, прототипирование и исследования. Обычные пользователи не должны его использовать. Этот модуль не переносится между реализациями Ruby.

Константы

DEFAULT_PARAMS

DEFAULT_PARAMS Эта константа раскрывает параметры по умолчанию ВМ. Обратите внимание, что изменение этих значений не влияет на выполнение ВМ. Спецификация не стабильна, и вы не должны полагаться на это значение. Конечно, эта константа специфична для MRI.

INSTRUCTION_NAMES

INSTRUCTION_NAMES Список имен инструкций байткода в MRI. Эта константа специфична для MRI.

OPTS

OPTS Array параметров сборки ВМ. Эта константа специфична для MRI.

Открытые методы класса

each_builtin() Показать исходный код
static VALUE
each_builtin(VALUE self)
{
    st_foreach(loaded_builtin_table, each_builtin_i, 0);
    return Qnil;
}
keep_script_lines → true или false Показать исходный код
static VALUE
vm_keep_script_lines(VALUE self)
{
    return RBOOL(ruby_vm_keep_script_lines);
}

Возвращает текущий статус keep_script_lines. Сейчас он возвращает только true false, но в будущем может возвращать другие объекты.

Обратите внимание, что это API для внутреннего использования ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.

keep_script_lines = true / false Показать исходный код
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, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.

mtbl(p1, p2) Показать исходный код
static VALUE
vm_mtbl(VALUE self, VALUE obj, VALUE sym)
{
    vm_mtbl_dump(CLASS_OF(obj), RTEST(sym) ? SYM2ID(sym) : 0);
    return Qnil;
}
mtbl2(p1, p2) Показать исходный код
static VALUE
vm_mtbl2(VALUE self, VALUE obj, VALUE sym)
{
    vm_mtbl_dump(obj, RTEST(sym) ? SYM2ID(sym) : 0);
    return Qnil;
}
stat → Хэш Показать исходный код
stat(hsh) → hsh
stat(Символ) → Числовое
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;
    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);
#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_VM()->next_shape_id);
#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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API