ruby/doc/rjit
Takashi Kokubun f2c367734f Introduce --enable-rjit=disasm 2023-04-27 14:27:51 -07:00
..
README.md Introduce --enable-rjit=disasm 2023-04-27 14:27:51 -07:00

README.md

RJIT: Ruby JIT

This document has some tips that might be useful when you work on RJIT.

Project purpose

This project is for experimental purposes. For production deployment, consider using YJIT instead.

Supported platforms

The following platforms are assumed to work. linux-x86_64 is tested on CI.

  • OS: Linux, macOS, BSD
  • Arch: x86_64

configure

--enable-rjit

On supported platforms, --enable-rjit is set by default. You usually don't need to specify this. You may still manually pass --enable-rjit to try RJIT on unsupported platforms.

--enable-rjit=dev

It enables --rjit-dump-disasm if libcapstone is available.

It also enables vm_insns_count and ratio_in_rjit in --rjit-stats. However, it makes the interpreter a little slower.

--enable-rjit=disasm

It enables --rjit-dump-disasm if libcapstone is available.

make

rjit-bindgen

If you see an "RJIT bindgen" GitHub Actions failure, please commit the git diff shown on the failed job.

For doing the same thing locally, run make rjit-bindgen after installing libclang. macOS seems to have libclang by default. On Ubuntu, you can install it with apt install libclang1.

ruby

--rjit-stats

This prints RJIT stats at exit. Some stats are available only with --enable-rjit=dev on configure.

--rjit-dump-disasm

This dumps all JIT code. You need to install libcapstone before configure and use --enable-rjit=dev or --enable-rjit=disasm on configure.

  • Ubuntu: sudo apt-get install -y libcapstone-dev
  • macOS: brew install capstone