JRuby 9.1.3.0 Released

Tuesday, August 30 2016

The JRuby community is pleased to announce the release of JRuby 9.1.3.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.x and stay in sync with C Ruby. JRuby 9.1.3.0 is our latest release…

Major features of JRuby 9000:

  • Ruby 2.x 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 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.

Notable updates since 9.1.2.0

  • Stdlib updated to 2.3.1; RubyGems updated to 2.6.6
  • Improved type coercion performance (to_s, …)
  • Optimized all-Fixnum case/when
  • Initial support for Java 9
  • Better keyword argument support
  • Tweaks to SecureRandom to reduce entropy starvation
  • Repaired thread-safety regressions in autoload and require
  • 105 issues fixed for 9.1.3.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.1.3.0

  • #4114 - jruby-gradle plugin fails with a 9.1.3.0-SNAPSHOT
  • #4107 - workaround compilation problems with unsafe-mock.jar
  • #4105 - File.size? should work on uri:classloader: resources
  • #4103 - JRuby fails in building from source when using openjdk-7-jdk trusty package
  • #4102 - No more wrapper
  • #4101 - JDK 8u102 changed JceSecurity#isRestricted to final
  • #4100 - Change script file restriction
  • #4091 - concurrent loading does not resolve loaded constant
  • #4089 - Math.log10 should use Java's log10 method
  • #4087 - stdlib update for 9.1 (from Ruby 2.3.1)
  • #4078 - Bump racc. Fixes #4071
  • #4077 - Recursive regex compile fails: (RegexpError) invalid group name <0>
  • #4073 - IO#fsync doesn't trigger an fsync(2) syscall?
  • #4071 - racc needs upgrade
  • #4069 - Unusual regression in Range#to_a
  • #4065 - Update platform config files from FFI gem. See jruby/jruby#3981
  • #4061 - Fix Socket.tcp connect_timeout option
  • #4059 - Remove dead rake tasks
  • #4057 - The JVM SIGSEGVs when using RubyEtc.getgrgid
  • #4056 - Return line no in SyntaxError when parsing Regexp
  • #4055 - Double-splat should not work with non-symbol keys
  • #4054 - RubyEnumerator implements java.util.Iterator
  • #4053 - require_realative calls self.require instead of Kernel.require
  • #4052 - Partially fix set_trace_func line numbers
  • #4051 - Wrong line numbers in Kernel#caller inside set_trace_func (with code to reproduce)
  • #4049 - net/http lib throws java.nio.channels.NotYetConnectedException
  • #4046 - inconsistent each and each_with_index return
  • #4045 - Java array #each does not handle block-less case
  • #4039 - Java array (Enumerable) does not handle last()
  • #4038 - Fix some parts of Socket::Option
  • #4037 - NullPointerExeption in org.jruby.RubyBasicObject.yieldUnder
  • #4034 - incorrect Java::void type
  • #4032 - Incorrect error class is rescued when the super class is Java::JavaLang::RuntimeException
  • #4031 - Make JRuby compatible with capybara-webkit (and possibly other gems)
  • #4029 - UnsupportedOperationException: BUG: invoking UndefinedMethod.call; (doing warble)
  • #4020 - Rails app on 9.1.2.0 raises stackoverflow exceptions after 6-8 hours of activity following an upgrade from 1.7.
  • #4014 - ClassCastException thrown when a method is defined inside a test
  • #4013 - Passing a default parameter to a block causes an exception.
  • #4010 - Reopen stdio streams when run from Drip, to pick up its FIFOs.
  • #4008 - Unmarshaling regexp loses UTF-8 encoding
  • #4003 - singleton method handle stack overflow
  • #4001 - Java::JavaLang::StackOverflowError with gsub(RegExp, Hash)
  • #4000 - JRubyFX application not working when running from jar (works in 1.7, doesn't work in 9k)
  • #3999 - Intermittent NullPointerException under 9.1.1.0/9.1.2.0
  • #3998 - JRuby 9.1.2.0 not working on windows server 2003/2003 R2
  • #3993 - Performance issue when extending objects with a module including constants
  • #3988 - Packed arrays
  • #3983 - Kernel#system fails to execute if SecurityManager denies access to a $PATH entry even if it permits a later one
  • #3981 - Unable to resolve type uint32_t with FFI
  • #3976 - Superclass mixin implementation called instead of subclass implementation
  • #3975 - Running with flag --enable-frozen-string-literal crashes stdlib/jar_dependencies.rb
  • #3972 - Use platform defaults from defaults file rather than eager load.
  • #3970 - recv_nonblock returns :wait_readable instead of raising
  • #3969 - Call plus ensure does not properly initialize all temps
  • #3966 - Incorrect case evaluation when evaluating variable with value of []
  • #3963 - SelectorPool returns Selectors with old keys in them
  • #3961 - Use Java's Arrays.sort
  • #3960 - Fix Range#eql? checks that start and end of range are same using MethodNames.EQL
  • #3957 - (SystemCallError) Unknown error 123 - FindFirstFile with AsciidoctorJ on Win10
  • #3956 - Range#eql? returns incorrect result for float vs int
  • #3952 - Ensure that Selectors from SelectorPool don't have old keys in them
  • #3950 - Bundler fails under +indy (claims gems listed more than once)
  • #3948 - Open3.popen3 with block fails on Windows
  • #3946 - warning: Ambiguous first argument
  • #3945 - Sequel + Celluloid + jtds error in 9.1.x
  • #3944 - Array#min doesn't respect monkey patching
  • #3943 - no such file to load -- ffi in 9.1.2.0 jruby.jar
  • #3938 - Flag registry
  • #3935 - Fixed shift with negative distance on Bignum
  • #3934 - Apparent regression with NameError in 9.1.0.0
  • #3930 - Misc optz
  • #3929 - waitReadable should block
  • #3919 - Arrays.sort
  • #3912 - fix four additional MRI string tests
  • #3911 - Unify super and call splatting logic in interpreter and JIT.
  • #3909 - ZSuper does not require caller's binding/scope.
  • #3906 - Kwargs should not need dynamic scope, since we have static handy.
  • #3902 - Soften this restriction to just readable resources.
  • #3898 - Disable the AddLocalVarLoadStore pass to fix #3891.
  • #3896 - Test new recursion
  • #3892 - Enabled did_you_mean, install during build, and clear gem paths
  • #3891 - Changes to local variables not visible to other threads even when protected by a lock
  • #3887 - Recursion detection should use identity map, but it blows up
  • #3869 - Unable to use UnboundMethod referencing super with define_singleton_method
  • #3868 - 9.1.0.0 hangs on syswrite
  • #3861 - Double packaging of `org/joda/time/format/messages.properties` in jruby-jars
  • #3835 - Thread-level events explode due to empty stack
  • #3828 - jruby-rack adjust_gem_path has no effect
  • #3823 - Rails 5 dependencies fail to load 'listen' lib for evented file checking
  • #3814 - Expose two Enumerator-related bugs
  • #3808 - defined? poor performance
  • #3778 - Unicode chars in method names aren't accepted
  • #3760 - TypeError raised by JRuby during keyword argument checking while the call is perfectly legit
  • #3713 - IRReturnJump unhandled
  • #3708 - Unresolved super with module_function
  • #3680 - JRuby and devise Null pointer exception
  • #3625 - remote execution
  • #3480 - Bundle did_you_mean gem
  • #3138 - Mixing Hash and keyword arguments raises an error
  • #2997 - Error while using socket class
  • #2690 - no STDOUT with drip on jruby-9.0.0.0.pre1
  • #2340 - curried proc with varargs doesn't call properly
  • #1405 - SecureRandom performance could be better
  • #1376 - Kernel#caller from arglist is missing a stack frame
  • #1279 - Lazy load Digest::SHA256 is not thread safe