Benchmarking Ruby Parsers

The new Prism parser has become the default in Ruby 3.4.0 preview 2. Let’s benchmark Ruby parsers and find out how fast they are. We run benchmarks on...

Benchmarking CRuby, MJIT, YJIT, JRuby and TruffleRuby

In this blog post we benchmark many Ruby versions and the latest Ruby Just-in-Time compilers (JITs) on the newest Ruby benchmark suite, yjit-bench. As a teaser, the geometric mean...

Review: Ruby Installers and Ruby Switchers

In this post I review the most popular Ruby installers (making it easier to install a Ruby) and Ruby switchers (to switch between different Rubies conveniently). I contributed to all...

Correct Delegation with Ruby 2.6, 2.7 and 3.0

While looking at how a few gems handle delegation on Ruby 2.7, I noticed that many of them are unfortunately incorrect. The official blog post about keyword arguments changes...

The Ruby Spec Suite Compatibility Report

Introduction For a long time I wanted to show visually the compatibility of Ruby implementations with ruby/spec. This is not as easy as it sounds. First, we would...

A Migration Path to Bundler 2+

Bundler 2 did not arrive quietly. It was noticed by almost every CI build failing when running bundle install. As a result, it seems many still avoid Bundler 2...

The Delegation Challenge of Ruby 2.7

Ruby 3.0 will introduce the separation between positional and keyword arguments. The upcoming Ruby 2.7 release aims to introduce warnings for every argument behavior that will change in Ruby...

A New Expectation Syntax for ruby/spec

ruby/spec is a test suite for the behavior of the Ruby programming language. The utility to run the test suite is called MSpec and is very similar to...

How TruffleRuby's Startup Time Became Faster Than MRI's

Introduction I want to talk about VM startup in Ruby. That is, the time it takes for a Ruby implementation to print “Hello World” with: $...