Spec-Zone.ru › Ruby 3.4

класс RubyVM

Родительский класс:
Object

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

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

Константы

DEFAULT_PARAMS

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

INSTRUCTION_NAMES

::RubyVM::INSTRUCTION_NAMES Список имён инструкций байт-кода в MRI. Эта константа относится только к MRI.

OPTS

::RubyVM::OPTS Массив Array параметров сборки VM. Эта константа относится только к MRI.

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

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

stat → Hash Показать исходный код
stat(hsh) → hsh
stat(Symbol) → Numeric
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, содержащий зависящие от реализации счётчики внутри VM.

Этот хеш содержит сведения о кэшах методов и констант:

{
  :constant_cache_invalidations=>2,
  :constant_cache_misses=>14,
  :global_cvar_state=>27
}

Если включён USE_DEBUG_COUNTER, в хеш будут добавлены счётчики отладки.

Содержимое хеша зависит от реализации и может измениться в будущем.

Ожидается, что этот метод будет работать только в C Ruby.

Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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