Spec-Zone.ru › Ruby 3.4
  1. RubyVM::
  2. YJIT

module RubyVM::YJIT

Этот модуль позволяет выполнять интроспекцию YJIT — JIT-компилятора CRuby. Всё в модуле в значительной степени зависит от конкретной реализации, и API может быть менее стабильным по сравнению со стандартной библиотекой.

Этот модуль может отсутствовать, если YJIT не поддерживает платформу, для которой собран CRuby.

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

code_gc () Показать исходный код
# File yjit.rb, line 237
def self.code_gc
  Primitive.rb_yjit_code_gc
end

Отбрасывает существующий скомпилированный код, чтобы освободить память и обеспечить возможность повторной компиляции в будущем.

dump_exit_locations (filename) Показать исходный код
# File yjit.rb, line 160
def self.dump_exit_locations(filename)
  unless trace_exit_locations_enabled?
    raise ArgumentError, "--yjit-trace-exits must be enabled to use dump_exit_locations."
  end

  File.binwrite(filename, Marshal.dump(RubyVM::YJIT.exit_locations))
end

Marshal записывает места выхода в указанный файл.

Использование:

Если передан --yjit-exit-locations, будет автоматически создан файл с именем «yjit_exit_locations.dump».

Чтобы собирать трассировки вручную, вызовите напрямую dump_exit_locations.

Обратите внимание: при вызове из скрипта статистика будет собрана после создания дампа, поэтому данные статистики могут включать выходы, возникшие при создании самого дампа.

Вызовите в скрипте:

at_exit do
  RubyVM::YJIT.dump_exit_locations("my_file.dump")
end

Затем запустите файл со следующими параметрами:

ruby --yjit --yjit-trace-exits test.rb

После завершения выполнения кода используйте Stackprof, чтобы прочитать файл дампа. Описание параметров см. в документации Stackprof.

enable (stats: false, log: false) Показать исходный код
# File yjit.rb, line 47
def self.enable(stats: false, log: false)
  return false if enabled?
  at_exit { print_and_dump_stats } if stats
  call_yjit_hooks
  Primitive.rb_yjit_enable(stats, stats != :quiet, log, log != :quiet)
end

Включает компиляцию YJIT. Параметр stats определяет, включать ли статистику YJIT. Параметр log определяет, включать ли журнал компиляции YJIT.

  • stats:

    • false: не включать статистику.

    • true: включить статистику. Вывести статистику при завершении.

    • :quiet: включить статистику. Не выводить статистику при завершении.

  • log:

    • false: не включать журнал.

    • true: включить журнал. Вывести журнал при завершении.

    • :quiet: включить журнал. Не выводить журнал при завершении.

enabled? () Показать исходный код
# File yjit.rb, line 12
def self.enabled?
  Primitive.cexpr! 'RBOOL(rb_yjit_enabled_p)'
end

Проверяет, включён ли YJIT.

log () Показать исходный код
# File yjit.rb, line 190
def self.log
  return nil unless log_enabled?

  Primitive.rb_yjit_get_log.map do |timestamp, path|
    [Time.at(timestamp), path]
  end
end

Возвращает массив записей журнала. Возвращает nil, если параметр не передан или недоступен.

log_enabled? () Показать исходный код
# File yjit.rb, line 22
def self.log_enabled?
  Primitive.rb_yjit_log_enabled_p
end

Проверяет, используется ли --yjit-log.

reset_stats! () Показать исходный код
# File yjit.rb, line 32
def self.reset_stats!
  Primitive.rb_yjit_reset_stats_bang
end

Удаляет статистику, собранную для --yjit-stats.

runtime_stats (key = nil) Показать исходный код
# File yjit.rb, line 172
def self.runtime_stats(key = nil)
  raise TypeError, "non-symbol given" unless key.nil? || Symbol === key

  Primitive.rb_yjit_get_stats(key)
end

Возвращает хеш со статистикой, собранной для параметра командной строки --yjit-stats. Возвращает nil, если параметр не передан или недоступен. Если передан аргумент-символ, возвращает только значение указанного параметра статистики. Если передан аргумент любого другого типа, возбуждает исключение TypeError.

stats_enabled? () Показать исходный код
# File yjit.rb, line 17
def self.stats_enabled?
  Primitive.rb_yjit_stats_enabled_p
end

Проверяет, используется ли --yjit-stats.

stats_string () Показать исходный код
# File yjit.rb, line 180
def self.stats_string
  # Lazily require StringIO to avoid breaking miniruby
  require 'stringio'
  strio = StringIO.new
  _print_stats(out: strio)
  strio.string
end

Форматирует счётчики и выводит их в виде String. Возвращает непустое содержимое только в том случае, если включён --yjit-stats.

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