class RubyVM
Das Modul RubyVM existiert nur unter MRI. RubyVM ist in anderen Ruby-Implementierungen wie JRuby und TruffleRuby nicht definiert.
Das Modul RubyVM bietet eingeschränkten Zugriff auf die MRI-Interna. Dieses Modul ist für sehr begrenzte Zwecke gedacht, wie z. B. Debugging, Prototyping und Forschung. Normale Benutzer sollten es nicht verwenden. Dieses Modul ist nicht portierbar zwischen Ruby-Implementierungen.
Constants
- DEFAULT_PARAMS
-
::RubyVM::DEFAULT_PARAMS Diese Konstante gibt die Standardparameter der VM preis. Beachten Sie, dass die Änderung dieser Werte die VM-Ausführung nicht beeinflusst. Die Spezifikation ist nicht stabil und Sie sollten sich nicht auf diesen Wert verlassen. Selbstverständlich ist diese Konstante MRI-spezifisch.
- INSTRUCTION_NAMES
-
::RubyVM::INSTRUCTION_NAMES Eine Liste von Bytecode-Instruktionsnamen in MRI. Diese Konstante ist MRI-spezifisch.
- OPTS
-
::RubyVM::OPTS Ein
Arrayvon VM-Build-Optionen. Diese Konstante ist MRI-spezifisch.
Öffentliche Klassenmethoden
Source
static VALUE
vm_keep_script_lines(VALUE self)
{
return RBOOL(ruby_vm_keep_script_lines);
}
Gibt den aktuellen Status von keep_script_lines zurück. Derzeit gibt sie nur true oder false zurück, aber in Zukunft kann sie auch andere Objekte zurückgeben.
Beachten Sie, dass dies eine API für die interne Verwendung von Ruby, für Debugging und Forschung ist. Verwenden Sie dies nicht für andere Zwecke. Die Kompatibilität ist nicht garantiert.
Source
static VALUE
vm_keep_script_lines_set(VALUE self, VALUE flags)
{
ruby_vm_keep_script_lines = RTEST(flags);
return flags;
}
Setzt das Flag keep_script_lines. Wenn das Flag gesetzt ist, werden alle geladenen Skripte in einem Interpreterprozess aufgezeichnet.
Beachten Sie, dass dies eine API für die interne Verwendung von Ruby, für Debugging und Forschung ist. Verwenden Sie dies nicht für andere Zwecke. Die Kompatibilität ist nicht garantiert.
Source
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)rb_shapes_count());
SET(shape_cache_size, (rb_serial_t)rb_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;
}
Gibt eine Hash zurück, die implementierungsabhängige Zähler innerhalb der VM enthält.
Diese Hash enthält Informationen über Methoden-/Konstantencaches.
{
:constant_cache_invalidations=>2,
:constant_cache_misses=>14,
:global_cvar_state=>27
}
Wenn USE_DEBUG_COUNTER aktiviert ist, werden Debug-Zähler einbezogen.
Der Inhalt der Hash ist implementierungsspezifisch und kann sich in Zukunft ändern.
Diese Methode funktioniert voraussichtlich nur auf C Ruby.