JRuby 9.4.0.0 Released

Wednesday, November 23 2022

The JRuby community is pleased to announce the release of JRuby 9.4.0.0.

The release of JRuby 9.4 represents a leap forward to Ruby 3.1 compatibility, which would not have been possible without help from the excellent contributors in our JRuby community: @k77ch7, @PurityLake, @ahorek, @byteit101, @mrnoname1000, @edipofederle, @chadlwilson, @philr, @gtback.

A special shout out goes to Kiichi Hiromasa (@k77ch7) for submitting dozens of feature and fix PRs and to Patrick Plenefisch (@byteit101) for his work on the libfixposix-powered subspawn gem.

We plan to put out several maintenance updates in the next few months. To help us improve compatibility and performance, we encourage you to try your apps and libraries on JRuby 9.4 and report any issues you find.

Ruby Compatibility

  • Compatibility is updated to Ruby 3.1 level. This includes all Ruby 2.7, 3.0, and 3.1 features except where noted below. (#6464, #6878, #7015)
    • Ractor is not yet supported. JRuby users can achieve better parallelism by using threaded libraries and frameworks.
    • The scheduler interface for IO, locks, and fibers is not yet supported. It will be added in an update release.
  • Nearly all features from CRuby’s NEWS file have been implemented. Most new tests and specs pass.
  • Remaining 3.0 and 3.1 features will be implemented in an update release. See #7459 and #7460.

Standard Library

  • Much of the standard library has moved out to gems, and JRuby supports a large subset of these gems. See lib/pom.rb for the complete list of default and bundled gems.
  • Greatly improved PTY and spawn support thanks to the subspawn gem, which is included as part of the standard library. #7393

JVM Integration

  • Java setFoo methods that do not match JavaBean standards (return value other than void, for example) will now also generate a foo= method when imported into Ruby. (#7340, #7352)

Platform Support

  • The JRuby launcher script has been ported to POSIX shell (/bin/sh) and no longer requires Bash. (#7024)
  • Initial support for the LoongArch64 platform has been inherited from the Java Native Runtime libraries.

Third-party Libraries and Frameworks

  • Initial support for Rails 7. SQLite and MySQL are largely functional, but work remains to update them and PostgreSQL.