Ruby 3.3 Introduces the Prism Parser and Faster YJIT
Ruby 3.3.0 added a new error-tolerant Prism parser, replaced Bison with Lrama, shipped the pure-Ruby RJIT, and made YJIT more than three times faster than the interpreter on Optcarrot.
Historical Archive. This article documents an event from 2023 and is preserved with its original date for reference. It is not current news, and details may have changed since publication.
Ruby 3.3 keeps the Christmas cadence
Ruby 3.3.0 was released on December 25, 2023. The core team summarized it as adding a new parser named Prism, using Lrama as the parser generator, adding a new pure-Ruby JIT compiler named RJIT, and delivering many performance improvements, especially in YJIT. The release counted 5,532 files changed with more than 326,000 insertions since Ruby 3.2.0.
Prism: a portable, error-tolerant parser
Prism was introduced as a default gem: a portable, error-tolerant and maintainable recursive-descent parser for Ruby. It is both a C library used internally by CRuby and a Ruby gem any tooling can use in place of Ripper, exposing methods like Prism.parse and Prism.parse_success?. Alongside it, Ruby replaced the Bison parser generator with Lrama, an LALR generator whose internals are themselves generated by Racc, part of a longer-term plan for the Ruby parser.
Two JITs: faster YJIT and new RJIT
YJIT saw major gains over 3.2, becoming more than three times faster than the interpreter on Optcarrot while significantly cutting memory use, and it added RubyVM::YJIT.enable to turn the compiler on at runtime, an approach Rails 7.2 uses to enable YJIT by default. Ruby 3.3 also introduced RJIT, a pure-Ruby JIT that replaced MJIT and, unlike its predecessor, needs no C compiler at runtime. RJIT supports only x86-64 on Unix and exists purely for experimentation, with YJIT still recommended for production.
Threads, GC and IRB
Ruby 3.3 added an M:N thread scheduler, where M Ruby threads are managed by N native threads to reduce creation and management cost; it is disabled on the main Ractor by default for C-extension compatibility. The garbage collector gained write barriers for many core types and wider use of Variable Width Allocation, reducing collection frequency and time, while IRB picked up better irb:rdbg integration, pager support and experimental type-based autocompletion.
Related on Skillo
See also: Ruby 3.2 and production-ready YJIT, Rails 8.0's Solid adapters and Kamal.
Sources
Published date reflects the original event date (2023-12-25). This article is original Skillo editorial written from the sources above; facts were verified in September 2026.
Written by
Skillo Staff
0 Comments
Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.