JRuby 9.0.0.0-pre2 Released

Tuesday, April 28 2015

The JRuby community is pleased to announce the release of JRuby 9.0.0.0-pre2

JRuby 9000 is the new version of JRuby, representing years of effort and large-scale reboots of several JRuby subsystems.

Major features of JRuby 9000:

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

This is our second preview release, and we are getting much closer to reaching our first .0 release. We are releasing this update to get user feedback on Ruby 2.2 functionality and overall stability.

We hope all Ruby users will try out this release and report issues on 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.

Ruby 2.2 features yet to be implemented:

  • Refinements (partially finished) #1062
  • Kernel#spawn close-on-exec support
  • ObjectSpace::WeakMap#each and Enumerable inclusion
  • Thread#handle_interrupt is not yet fully functional

Notable changes since pre1:

  • Startup time has improved but is a tiny bit slower than 1.7.x.
  • Memory usage has improved but still a ways to go.
  • Straight-line performance has improved since pre1
  • Windows support improved, but still needs further work and testing
  • Many keyword arguments problems fixed
  • 88 issues fixed for 9.0.0.0.pre2

The new runtime gathers more information about Ruby code and performs more analysis and optimization than our old runtime. There’s great potential here to bring Ruby performance to native Java or C, but we are just starting the optimization phase of that work. We will do our best to get startup time, memory use, and performance on par with 1.7.x (or better) before the final release of JRuby 9000.

Truffle

JRuby 9000 includes an in-development version of support for the Truffle language implementation framework and Graal VM from Oracle Labs. In future releases, Truffle will provide an extremely high performance and compatible backend for JRuby. The Truffle backend supports all Ruby language features, but so far only some of the core and standard libraries. It has no support for RubyGems or Rails, does not work on Windows, and is not ready to be tested with applications at this stage. More information on Truffle and Graal can be found in the JRuby Wiki.

Github Issues resolved for 9.0.0.0.pre2

  • #2864 - Prepend breaks module "implementer" search
  • #2847 - JRuby not using UTF-8 for source files
  • #2846 - Psych dependency is installing non-JRuby version
  • #2842 - Hash#each_pair should be a true alias of Hash#each
  • #2840 - jrubyc blows with NPE
  • #2833 - Bad nonlocal return with re-wrapped define_method block
  • #2797 - Support respond_to_missing? in respondsTo() lookups
  • #2788 - Autoload broken by path canonicalization
  • #2787 - Returns nil instead of regex match group inside conditional
  • #2784 - rindex() fails on strings read from binary files
  • #2777 - Undefined group option during parse of mri/test_regexp.rb
  • #2776 - IR improperly masks errors in defined-guarded conditional
  • #2771 - unknown type of %string
  • #2767 - Open3.popen3 treats string command differently than MRI
  • #2766 - Open3.capture2e fails with "wrong exec option"
  • #2764 - Encoding::Converter#primitive_convert has trailing null byte
  • #2752 - JRuby doesn't define Process::Tms like MRI does
  • #2751 - Make RUBY_ENGINE_VERSION as companion to RUBY_ENGINE
  • #2736 - early return in each'd enumerator is jumping out of each and not method
  • #2726 - how do I install with Jars? Re: "deprecated. use instead jars/installer" message
  • #2716 - rb_cmpint difference from MRI
  • #2712 - Micro bench is nearly 2x slower with JIT than interp
  • #2692 - Fix for issue 2591 on master : double-quoted UTF8 hash key encoding
  • #2654 - Truffle - Compile Error until when break in case statement
  • #2652 - Truffle - Regex Parsing Error
  • #2637 - Produce a warning on private attribute accessors
  • #2636 - Fix Bignum's bitwise operations
  • #2635 - Object.const_get behaves differently from other implementations
  • #2629 - Mixed-mode execution exposes an unusual bug
  • #2627 - $stdin.tty? reports wrong value on JRuby-9.0.0.0-pre1
  • #2623 - error with bin/jruby -S gem install asd
  • #2615 - Open3 fails with ArrayStoreException after ~50 executions
  • #2598 - Unknown error in child-process gem when trying to open phantomjs browser in webdriver when running on jruby
  • #2593 - Fix IO#write frozen string issue in textmode
  • #2591 - double-quoted UTF8 hash key has the wrong encoding
  • #2589 - Fixed the errors with RubySpec
  • #2587 - simplecov triggers load error when running coverage on jruby-9.0.0.0.pre1
  • #2585 - JavaSupport refactoring API (byte-code) incompatibility with extensions
  • #2584 - Fixed arity issue with RubyMethod
  • #2583 - Make filepaths with null byte fail
  • #2581 - Error handling converting UTF-32 to UTF-8 is broken [9k] [lotus]
  • #2580 - Different Encoding behavior from all other Rubies
  • #2579 - Fix for issue 2182 on master : Struct#inspect with utf8 encode string member
  • #2578 - Binding#receiver is not implemented [9k] [lotus]
  • #2576 - Fix the bug with size with each_slice without block
  • #2574 - Parallel value assignment broken in IR builder (multi-value literals, calls, attr-assign, etc.)
  • #2570 - ClassCastException requiring minitest with JRuby 9000
  • #2569 - Fix required arguments for File.chown
  • #2568 - Exit iterator when `RubyHash#any?` short-circuits
  • #2562 - Skip block-to-proc conversion for explicit block syntax when possible
  • #2560 - Fix uninitialized usage of File::Stat
  • #2553 - Mismatch on Enumerator#size result between JRuby and MRI
  • #2547 - Dir.foreach does not allow encoding
  • #2541 - JRuby+Truffle: Keyword Arguments - "illegal recursive call"
  • #2540 - Fixed arity require in case of required keyword arguments
  • #2537 - Fix for issue 2524 on master: [BigDecimal] Loss of precision with different execution order
  • #2525 - undefined method `invoke_with_build_args' for nil:NilClass on Windows 7
  • #2524 - [bigdecimal] Loss of precision with different execution order
  • #2523 - Modified the make_wstr method so that it appends a null character.
  • #2522 - Implement pack & unpacking ipv6 address in sockaddr
  • #2521 - Require order appears to impact JRuby extensions [9k]
  • #2518 - Keyword arguments incompatibility
  • #2514 - Getting "BUG: $! and exception are not matching up" in RSpec in 9K
  • #2512 - keyword arguments incompatibilities
  • #2511 - Keyword method parameters cannot take a frozen hash
  • #2505 - IO.popen cannot run 'date' on Windows 7
  • #2500 - gem install failure on Windows
  • #2494 - Open3 fails with varying signals on 9.0.0.0.pre1
  • #2493 - Performance issue with invokedynamic + Rack + URI
  • #2492 - Implemented support for keyword and keywordrest proc /lambda parameters
  • #2491 - Minitest rails not working on 9000
  • #2489 - Proc.parameters return an empty array
  • #2486 - Implemented Enumerator#feed method
  • #2474 - truffle artifacts are not on maven central and we have a release repo in jruby-parent.pom
  • #2466 - Package Truffle stdlib files into tarball
  • #2388 - IO#ready? returns incorrect results
  • #2357 - NULL handling inconsistent with Ruby
  • #2312 - Encoding.compatible? affected by call order
  • #2210 - Fix for issue 1069 and 1390 on master: improve handling of non ascii character after backslash
  • #2185 - Bundle fails with Java::JavaLang::StackOverflowError with git-hosted gems
  • #2165 - Truffle: Kill all other threads when the main thread exits
  • #2163 - StringLiteral consumers may not be CR-aware
  • #2137 - Socket.getifaddrs returns incorrect interface list
  • #2033 - Problem with super not passing params with IR
  • #2015 - Method keyword arguments are destructive
  • #1982 - AIOOBE in ThreadContext#postYield
  • #1395 - Pre-compiled methods do not have AST available for re-compilation
  • #779 - Output unreliable from spawned processes