Running Optcarrot

Running the Demo #

Start by installing GraalVM.

Then add GraalVM/bin in PATH (or use a Ruby manager):

export PATH="/path/to/graalvm/bin:$PATH"

You also need to install SDL2:

  • brew install sdl2 on macOS
  • sudo yum install SDL2-devel for RedHat-based Linux
  • sudo apt-get install libsdl2-dev for Debian-based Linux

Then clone the optcarrot repository:

git clone
cd optcarrot

Then you can play the Lan Master game.

On Linux:

ruby --jvm bin/optcarrot --print-fps --sdl2 --audio=none examples/Lan_Master.nes

On macOS, you need an extra flag for the GUI to appear: --vm.XstartOnFirstThread

ruby --jvm --vm.XstartOnFirstThread bin/optcarrot --print-fps --sdl2 --audio=none examples/Lan_Master.nes

(--audio=none is used since the audio it not nice at non-60FPS speeds)

To play, use keys 17 (not on numpad) to scale the screen, X for OK/turn right, S for turn left, arrows to move around, Q to quit.

More information can be found in this blog post.

Here is a recording of a talk running the demo on TruffleRuby and MRI.

Running on Other Ruby implementations #

You can also run it on MRI for comparison. You will need to install the FFI gem with:

gem install --user ffi
ruby bin/optcarrot --print-fps --sdl2 --audio=none examples/Lan_Master.nes

You can also run it on JRuby if desired:

jruby bin/optcarrot --print-fps --sdl2 --audio=none examples/Lan_Master.nes

Running as a Benchmark from the TruffleRuby Repository #

If you have a local checkout of TruffleRuby, you can also use the version of OptCarrot under bench/optcarrot. See the Benchmarking documentation for details.