JRuby 9.0.0.0.pre2 Released!

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

Homepage: http://www.jruby.org/
Download: http://www.jruby.org/download

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 http://bugs.jruby.org. 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

Hi Tom,

That’s all working much better on our machines now. We can now run
rails migrations and spec without any errors, which is fantastic.

An issue we are having, though, is when compiling some of our code
using jrubyc (using “jrubyc --verbose lib” to compile the lib
directory). The specific error is:

TypeError: failed to coerce org.objectweb.asm.ClassWriter to
org.jruby.org.objectweb.asm.ClassVisitor
block in compile_files_with_options at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/jruby/compiler.rb:179
call at org/jruby/RubyProc.java:303
block in compile_files_with_options at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/jruby/compiler.rb:243
each at org/jruby/RubyArray.java:1571
block in compile_files_with_options at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/jruby/compiler.rb:242
each at org/jruby/RubyArray.java:1571
compile_files_with_options at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/jruby/compiler.rb:233
compile_argv at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/jruby/compiler.rb:94
at ./jrubyc.rb:3

Does anyone have any ideas about what the problem could be here, or
any way I can help better identify the root cause?

Thanks,

Michael

Oh…Can you file a bug for this? We thought we nailed this one but
Java
limits method bodies to 32k and our AOT subsystem is generating a method
larger than that. We just need to make sure we break things up into
smaller
pieces…but it is a little weird since our new system is much better
at
coping with this than JRuby 1.7.x.

We will be sure to get this settled for 9krc1.

-Tom

On Tue, Apr 28, 2015 at 6:14 PM, Michael P.
[email protected]

Cool - I’ve opened jrubyc failing - TypeError: failed to coerce org.objectweb.asm.ClassWriter to org.jruby.org.objectweb.asm.ClassVisitor · Issue #2887 · jruby/jruby · GitHub

Thanks,

Michael