Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Установка Ruby 3.4.5 с поддержкой YJIT

Перед установкой Ruby 3.4.5 с поддержкой YJIT необходимо дополнительно установить язык программирования Rust. На сайте языка программирования Rust описан процесс установки - всё очень просто, и при этом устанавливается локально (для отдельного пользователя) так же как и Ruby с использованием rbenv.

Далее устанавливаем Ruby с использованием rbenv :

RUBY_CONFIGURE_OPTS="--enable-yjit --with-jemalloc" rbenv install 3.4.5

Готово! Проверил на простейшем тесте, с опцией --yjit Ruby показал увеличение производительности примерно в 7 (!) раз.

require "benchmark"

def fib(n)
  return n if n <= 1
  fib(n - 1) + fib(n - 2)
end

Benchmark.bm do | make |
  i = 0
  5.times do
    make.report { puts fib(30 + i) }
    i += 1
  end
end


# ruby

832040
1346269
2178309
3524578
5702887
       user     system      total        real
   0.049743   0.000000   0.049743 (  0.049761)
   0.079215   0.000000   0.079215 (  0.079220)
   0.140853   0.000000   0.140853 (  0.140877)
   0.212678   0.000000   0.212678 (  0.212693)
   0.339520   0.000000   0.339520 (  0.339545)

# ruby --yjit

832040
1346269
2178309
3524578
5702887
       user     system      total        real
   0.007006   0.000000   0.007006 (  0.007047)
   0.010964   0.000000   0.010964 (  0.010965)
   0.017635   0.000040   0.017675 (  0.017693)
   0.028405   0.000039   0.028444 (  0.028446)
   0.045776   0.000000   0.045776 (  0.045778)

Естественно, что этот тест искусственный, и не стоит ожидать, что все программы на Ruby станут работать быстрее, но всё же результаты оптимизации скорости выполнения программ Ruby налицо и очень впечатляют.

Немного о Rust

Несколько разочаровал тот факт, что исполняемые файлы Rust (версия 1.88.0) получаются достаточно большого объёма - простая программа "Hello, World!" - это исполняемый файл в системе Linux объёмом аж 3.6 Мегабайт - это очень много!.. с учётом того, что Rust позиционируется как язык системного программирования, где, как известно, малый объём исполняемых файлов - это большое преимущество. Но не так всё страшно - можно воспользоваться либо командой:

strip --strip-debug <binary>

либо в проекте cargo прописать в файле Cargo.toml:

[profile.release]
strip = "debuginfo"

Тогда исполняемый файл релиза получается размером 416 Килобайт, что в принципе приемлемо, хотя тоже многовато.

На Хабр подсказали интересную статью о возможностях создания исполняемого файла Rust с минимальными размерами... но и, естественно, с максимально ограниченными возможностями.