JRuby 9.0.5.0 Released

Tuesday, January 26 2016

The JRuby community is pleased to announce the release of JRuby 9.0.5.0

JRuby 9000 is the newest major version of JRuby, representing years of effort and large-scale reboots of several JRuby subsystems. It is expected to be compatible with Ruby 2.2.x and stay in sync with C Ruby. JRuby 9.0.5.0 is our latest releaseā€¦

Major features of JRuby 9000:

  • Ruby 2.2 compatibility
  • A new optimizing runtime based on a traditional compiler design
  • New POSIX-friendly IO and Process
  • Fully ported encoding/transcoding logic from MRI

If you do find issues then report them on using our issue tracker at https://github.com/jruby/jruby/issues. We also encourage users to join our IRC channel (#jruby on Freenode) and mailing lists. You may also follow @jruby on Twitter for updates.

Notable updates since 9.0.4.0

  • Fixed leaks in IO.select and IO.copy_stream.
  • Implemented DATA support lost in 9k.
  • Fixed regression breaking empty-body define_method methods.
  • Windows stat crashing on 32 bit JVMs
  • 53 issues fixed for 9.0.5.0

Truffle

JRuby 9000 includes an preliminary version of support for the Truffle language implementation framework and Graal JIT compiler from Oracle Labs. In future releases, Truffle will provide an extremely high performance and compatible backend for JRuby. The Truffle backend supports almost all Ruby language features and the majority of the core library, and is able to run simple gems and web frameworks such as Sinatra. It has no support for RubyGems, Rails or any database drivers, and does not work on Windows. However we are now interested in people submitting issues for small gems with minimal dependencies who see issues running on JRuby+Truffle

Graal has been integrated into Java 9 early access builds, and can be used today as part of the GraalVM, which is currently the recommended way to run JRuby+Truffle.

More information on Truffle and Graal can be found in the JRuby Wiki.

Github Issues resolved for 9.0.5.0

  • #3609 - Incompatible method lookup under Kernel.load(file,true), aka wrap, on 9.x
  • #3602 - Fix cache-constructed-proxies
  • #3599 - jrubyc won't compile a file with method in outer scope (NoMethodError: undefined method `new_method' for nil:NilClass)
  • #3597 - Fix SizedQueue#num_waiting regression
  • #3591 - Unhandled Java exception: java.lang.ArrayIndexOutOfBoundsException: -3
  • #3590 - IO.copy_stream leaves opened files in ObjectSpace
  • #3588 - Leak in select for a UNIXSocket (at least)
  • #3586 - org.jruby.runtime.load.ClassExtensionLibrary.tryFind fails on certain classnames
  • #3581 - Cache proxies of newly constructed Java objects
  • #3579 - JRuby doesn't support DATA and __END__
  • #3577 - Block call IR optimization failures by 0d35995e1704bb716a9b54064208cf82ace2f150
  • #3576 - ConstructorInvoker isn't storing the proxy in the ObjectProxyCache
  • #3574 - autoload + const_defined? inconsistent with Ruby 2.0+
  • #3573 - MRI 2.2.2 / JRuby 9.0.4.0 difference given explicit `self` receiver for private method call.
  • #3564 - Rational suffix doesn't work with 0
  • #3563 - jdk9 produces warning on launcher
  • #3558 - case doesn't match empty array
  • #3542 - StopIteration does not propagate a result
  • #3540 - Fix Enumerable#{min_by, max_by} with nil
  • #3539 - Prevent to make subclass of Class
  • #3538 - Regexp match raises java.lang.ArrayIndexOutOfBoundsException in numbered backreference
  • #3537 - Fix Array#collect! that returns a sized enumerator as Array#map!
  • #3530 - Calling IO.console twice raises NoMethodError for `#open?`
  • #3527 - BigDecimal.new("5-6").to_i returns 0 on 9k where 1.7 and MRI returns 5
  • #3520 - Having Problems With Celluloid::IO / Nonblocking IO
  • #3494 - Proper support for UNIXSocket.for_fd
  • #3493 - Wrong name mangling. V8Utils => v8utils instead of v8.utils
  • #3492 - UNIXSocket#recv_io, UNIXSocket#send_io implementation using JNR
  • #3488 - forcing a nil (no) backtrace with Java APIs
  • #3483 - define_method with empty body throws RuntimeError in interpreter
  • #3478 - Print warning when JRuby.objectspace is enabled
  • #3472 - Hash keys should only be deduplicated for direct literal forms
  • #3453 - AOT compile of method with conditional return results in "is not compiled Ruby; use java_import to load normal classes"
  • #3452 - AOT compile of empty module results in NullPointerException
  • #3437 - Fix for issue 3402: String#encode with :replace option does not return correct value
  • #3433 - Getting back different values between Time#to_r and Time#to_i
  • #3412 - [Truffle] make j+tr part of the distribution
  • #3411 - Convert chinese encoding GB18030 to UTF-8 doesn't work
  • #3405 - Hash has bug to set encoding into key string wrongly when the key string is used once with different encoding
  • #3402 - String.encode :replace option does not work when encoding to UTF8
  • #3331 - Fix 3303 refactor zoneHelper into getRubyTimeZoneName
  • #3328 - remove support for aliasing Java indexed getters as Ruby readers
  • #3262 - jruby 9.0.0.0 Java::JavaLang::Character.name
  • #3209 - Correct a format string in Signal#trap.
  • #3208 - Trapping reserved signals doesn't print a meaningful message
  • #3193 - Java::JavaLang::StackOverflowError running spec which works on 2.2.1
  • #3121 - jruby 9.0.0.0.rc1 performance regressions
  • #3120 - Add some more tests for bignum pow
  • #3119 - Fix date.rewrite_frags
  • #2149 - Failing DateTime.strptime for weird dates near epoch
  • #2142 - Struct#inspect does not produce the same output as MRI 2.2
  • #940 - Implement UNIXServer and UNIXSocket.for_fd
  • #455 - RubyUDPSocket swallows exceptions