Yukihiro "Matz" Matsumoto's RubyConf 2022 keynote title, "Performance does (not) Matter," is useful because it refuses the easiest open-source argument. A language can always say it wants to be faster. Ruby's harder claim is that performance work has to preserve the thing users came for in the first place: an object model that feels regular, blocks that make iteration and internal DSLs pleasant, and syntax that lets programmers express intent without turning every line into ceremony.[1][2]
That does not make speed cosmetic. Ruby has always lived inside a real operations budget: web request latency, background job throughput, memory pressure in long-running processes, gem compatibility, deployment footprint, and the human cost of debugging code that is clever for the VM but opaque to maintainers. The video is worth watching with that tension in mind. Matz is not giving a benchmark talk in disguise. He is defending a product constraint: Ruby should get faster by protecting the language's human-facing API, not by making Ruby programmers write around the implementation.[1]
The later Ruby 3.4.0 release notes show how that stance turns into engineering work. Ruby 3.4 made Prism the default parser, improved YJIT, added Modular GC, and introduced the it block parameter reference, among many other changes.[3] Those are not the same kind of feature, but they share a pattern. Some work lives below the language surface. Some work slightly changes expression at the source level. The success condition is whether Ruby remains recognizable while the implementation gets more room to improve.
The title is a boundary marker
The first thing to annotate is the keynote title itself. "Performance does (not) Matter" works because both halves are true. Performance matters whenever Ruby is used for production systems that pay for CPU time, memory, boot time, queue lag, and programmer attention. It does not matter as an isolated virtue if the price is a language that becomes less readable, less compatible, or less fun to shape into domain code.[1][2]
The official Ruby FAQ still gives the best short description of the surface being protected: Ruby is a simple and powerful object-oriented language with blocks, iterators, metaclasses, and text-processing strengths.[2] The interesting word is not only "object-oriented." It is the combination of object orientation with blocks and metaprogramming. Ruby's daily ergonomics come from letting ordinary library code read like a small language: each takes a block, Rails routes read declaratively, RSpec examples read like specifications, and Enumerable methods let a collection pipeline stay close to the domain being described.
That is why a pure benchmark lens underreads the talk. If a language makes a hot path faster by pushing common code toward obscure patterns, the win can disappear into maintenance cost. If the VM and parser improve while user code stays clear, the win compounds. In that sense, Ruby's performance question is not "Can we make this instruction sequence run faster?" It is "Can the implementation absorb more work so application code can stay humane?"
Objects and blocks are the social contract
Ruby's object model is not just a runtime detail. It is the social contract that lets Rubyists assume a broad regularity in the language. Almost everything behaves like an object. Methods, message sending, blocks, iterators, modules, and open classes create a surface where libraries can be expressive without leaving Ruby.[2] That expressiveness is powerful, but it also gives the implementation fewer easy shortcuts than a smaller, stricter language might enjoy.
The video is therefore best read as a maintainer's prioritization exercise. Ruby cannot chase every optimization if the optimization breaks the ordinary way people write Ruby. A web team should not need to remove blocks from natural iteration just because a VM prefers one mechanical pattern. A gem author should not need to abandon a clear API only because the dispatch path is more dynamic than a compiler likes. The implementation can ask users for some discipline, especially around allocation-heavy code and hot loops, but the language should not turn performance into a personality test.[1][2]
This is also why Ruby syntax changes tend to matter more than they first appear. Pattern matching, as documented in Ruby's syntax guide, lets a case expression match structured values and bind parts of them.[5] The it block parameter in Ruby 3.4 offers a lightweight name for common single-argument blocks.[3] Neither feature is "performance" in the narrow sense. Both are about preserving local reasoning: let programmers express shape, flow, and small transformations in the source code without excessive scaffolding. A language that cares about human time has to treat that as part of the same budget as CPU time.
VM work should be invisible until it has to be measured
YJIT is the cleanest example of performance work serving the human API. The Ruby 3.4 YJIT documentation describes it as a lightweight JIT inside CRuby that lazily compiles code with Basic Block Versioning, with support on common macOS, Linux, BSD, x86-64, and arm64/aarch64 targets.[4] That description is deliberately implementation-heavy, but the user-facing hope is simple: more real Ruby code should run faster without being rewritten into a different language style.
The release notes' pairing of YJIT improvement with Prism becoming the default parser is also important.[3] A faster JIT is only one part of the runtime story. A parser that can become a stable shared foundation affects tooling, syntax evolution, diagnostics, and implementation consistency. Modular GC points in another direction: garbage collection can become a cleaner experimentation surface instead of one monolithic bet.[3] Together, these projects move the performance frontier downward into the engine room, where language users benefit without being asked to memorize VM internals for ordinary work.
There is still an operations boundary. YJIT's own documentation discusses memory usage and production tuning, which is a reminder that performance features are not magic switches.[4] A team running Ruby services should still test under real workloads, observe memory headroom, compare tail latency, and decide whether the improvement is worth the deployment shape. The mature reading is not "turn on every speed feature." It is "measure whether the VM can give you speed while your code remains idiomatic."
Compatibility is a performance feature
Open-source language performance is constrained by ecosystem trust. Ruby's value is not only the interpreter. It is the gems, C extensions, Rails applications, test suites, deployment conventions, and accumulated human habits around the language. A breaking optimization that looks good in isolation can be a net loss if it fractures that ecosystem or makes upgrades feel risky.
That is why Ruby 3.4's release-note mix is revealing. Prism as default parser, YJIT work, Modular GC, socket improvements, and block syntax changes are all framed as part of a normal release rather than a separate "new Ruby" fork.[3] The project keeps trying to move the floor under existing users. That is a quieter form of ambition than a clean-slate language, but it is often more valuable in production because it lets teams adopt improvements through regular upgrades.
The same logic applies to pattern matching. It adds a way to make structured data handling clearer, but it sits inside Ruby's existing case expression rather than creating a foreign sublanguage.[5] That is the Ruby pattern at its best: extend expressiveness, keep the surface familiar, and let implementation work continue underneath. Compatibility is not only a brake on progress. It is a performance feature for organizations, because upgrades that preserve mental models are cheaper to test, teach, and roll out.
What an engineering team should take from the talk
The practical takeaway is not that Ruby is always the fastest choice. It is that Ruby's speed story should be evaluated in the unit Ruby actually optimizes for: a long-lived codebase written by humans. If a team needs extreme numeric throughput, hard real-time guarantees, or tiny memory footprints, Ruby may not be the right layer. If a team needs expressive application code, a deep web ecosystem, approachable tests, and enough VM progress to keep production costs reasonable, Ruby remains a serious open-source platform.[1][2][3][4]
That makes the adoption question concrete. Use current Ruby releases because the implementation work is where much of the payoff arrives. Benchmark YJIT against your own workloads rather than against slogans. Keep hot paths readable before making them clever. Treat pattern matching and newer block conveniences as tools for making intent clearer, not as mandatory style churn. Most of all, keep Matz's title in its full contradiction: performance matters, but only when it serves the code people can still understand next year.[1][3][4][5]
Sources
- Ruby Central, "RubyConf 2022: Performance does (not) Matter by Yukihiro Matsumoto (Matz)," YouTube video.
- Ruby, "Official Ruby FAQ" - project-maintained overview of Ruby's object model, blocks, iterators, and language character.
- Ruby, "Ruby 3.4.0 Released" - official release note covering Prism as default parser, YJIT improvements, Modular GC, and
itblock parameter reference. - Ruby documentation, "YJIT - Yet Another Ruby JIT" - official Ruby 3.4 documentation for YJIT architecture, platform support, usage, and memory guidance.
- Ruby documentation, "Pattern Matching" - official Ruby 3.4 syntax guide for
case/instructured matching and binding. - Wikimedia Commons, "File:Yukihiro Matsumoto EuRuKo 2011.jpg" - Mathias Meyer's real photograph of Matsumoto giving a keynote at EuRuKo 2011.