JRuby 9.2.0.0 Released

Thursday, May 24 2018

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

JRuby 9.2.x is our new major version of JRuby. It is expected to be compatible with Ruby 2.5.x and stay in sync with C Ruby. JRuby 9.2.0.0 is our first release for 2.5 support.

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.

Highlights:

  • Ruby 2.5 language and stdlib support
  • Improved support for non-ASCII identifiers and symbols
  • Improved Ruby method call performance
  • 225 issues fixed for 9.2.0.0

Github Issues resolved for 9.2.0.0

  • #5184 - `true.dup` and `false.dup` blow up (Inconsistent with MRI)
  • #5183 - [ji] support Java time APIs with Time/Date/DateTime
  • #5181 - deprecate jruby/core_ext Class#subclasses
  • #5180 - [ji] RubyString implements CharSequence
  • #5176 - upgrade jruby-openssl to 0.10.0
  • #5173 - Update json + tests to 2.1 and update excludes.
  • #5170 - Clone frame and block before proceeding into class_exec logic.
  • #5168 - Remove hack for FileUtils.mv due to incorrect error raised from File.rename
  • #5167 - IO.copy_stream doesn't accept objects that respond to #readpartial
  • #5161 - [ji] lazy loading of Java (proxy) class extensions
  • #5160 - Inconsistencies with MRI: `FrozenError (can't modify frozen array)`
  • #5158 - fix resolv on windows
  • #5151 - Bytelist love merge
  • #5149 - Fix TestLoad#test_symlinked_jar
  • #5146 - Handle exception cause with null message
  • #5136 - Support overriding `Exception#message`
  • #5134 - Raising SIGTERM SignalException returns wrong process exit code
  • #5129 - Fix Enumerable#uniq for entry pair
  • #5124 - :newline option to File.open implies text mode now. (Part of #5118)
  • #5121 - Require real path
  • #5117 - Revert "Require real path"
  • #5116 - Range should raise TypeError if necessary method is not defined
  • #5113 - Numeric#clone and #dup no longer raises TypeError
  • #5110 - DateTime.jd doesn't set sec_fraction with 9.2.0.0-SNAPSHOT
  • #5109 - Require real path
  • #5108 - Thread.report_on_exception default value is now true
  • #5107 - Fix failed Ruby 2.5 ruby/spec tests for String
  • #5106 - Fix RubyString instances to raise FrozenError exceptions when mutations are attempted in debug mode…
  • #5105 - Add Pathname#glob
  • #5102 - Freeze Complex and Rational
  • #5101 - Fix Complex#finite? and Complex#infinite? failing tests
  • #5096 - Enumerable#any?, all?, none? and one? now accept a pattern argument
  • #5093 - upgrade joda-time library to latest 2.9.9
  • #5092 - DateTime.jd returns incorrect times with 9.2.0.0-SNAPSHOT
  • #5090 - SecureRandom.alphanumeric implemented.
  • #5089 - Implement fetch for Thread.current
  • #5088 - Use com.jcraft.jzlib.JZlib instead of hacking the internals of java.util.zip.CRC32
  • #5087 - Add Integer#allbits?, Integer#anybits? and Integer#nobits?
  • #5083 - Fix time interval test
  • #5079 - Add Method#=== that invokes #call
  • #5076 - redo date.rb (most) parts in native
  • #5074 - Fix file descriptor leak in resolv.rb
  • #5071 - Better use of ThreadContext constants
  • #5065 - Parallel exception hierarchy for Java
  • #5064 - Update ruby/spec
  • #5063 - Generify IRubyObject.toJava to make it more pleasant to use.
  • #5062 - Regression or bad merge in string interpolation
  • #5061 - Add keyword_init option to Struct.new
  • #5056 - Time#at receives 3rd argument which specifies the unit of 2nd argument
  • #5055 - [ruby-2.5] Implement String#delete_suffix
  • #5051 - Remove mathn.rb from stdlib
  • #5050 - refactor annotation-binder generated populators
  • #5047 - Module#define_method, alias_method, undef_method, remove_method are now public
  • #5046 - Add Process::last_status method
  • #5043 - Module#attr, attr_accessor, attr_reader, attr_writer are now public
  • #5042 - Deprecate Data class
  • #5039 - Add FrozenError class
  • #5035 - JRuby's native `SortedSet` lies about adding an object
  • #5027 - Andre Kullmann make the profiling service configurable via java prope…
  • #5026 - Fix String#rpartition for RegEx on Strings with multibyte chars
  • #5025 - No longer hide exceptions from coerce method
  • #5024 - Add `#test_windows_1255` to test targets
  • #5022 - Fix test coerce2 for master branch
  • #5021 - Do modifyCheck for each pair in Array#sort!
  • #5012 - Consider switching JSR223 engine to use "persistent" local variables
  • #5011 - Remove TestArray#test_zip exclusion test case
  • #4999 - IO#write accepts multiple arguments
  • #4993 - Ruby 2.5: Add String#delete_prefix and String#delete_prefix!
  • #4991 - Update File#path to raise IOError for files opened with File::Constants::TMPFILE option
  • #4988 - Ruby 2.5: Support regex for String#start_with?
  • #4983 - String#-@ deduplicates unfrozen strings
  • #4979 - Fix documents
  • #4978 - SortedSet#dup and SortedSet#to_a do not work as expected
  • #4975 - Feature/string casecmp
  • #4974 - Make Integer#{round,floor,ceil,truncate} always return integer
  • #4973 - Remove not used methods
  • #4969 - Add File.lutime
  • #4966 - Implement Hash#transform_keys and Hash#transform_keys!
  • #4962 - BUG: binding visibility for class_exec not thread safe?
  • #4961 - Fix Hash#rehash method for duplicate keys
  • #4958 - Hash#rehash does not properly rehash
  • #4957 - Add Set#reset
  • #4954 - Alias Set#=== to #include?
  • #4953 - Implement Dir.each_child
  • #4952 - Check third argument type for Dir.glob
  • #4951 - Fix `Hash#reject`
  • #4950 - Alias Set#to_s to inspect
  • #4949 - Implement Hash#slice method
  • #4948 - Add `#test_slice_before` to test targets
  • #4947 - Fix RubyHash to pass `#test_create`
  • #4946 - Fix NullPointerException when option is not :base
  • #4941 - Implement Dir.children
  • #4940 - Implement KeyError#receiver and KeyError#key
  • #4938 - Add `#test_singleton_method` to test targets
  • #4936 - Implement Dir.glob base option
  • #4935 - Implement Array#prepend and Array#append aliases
  • #4934 - Implement Array#prepend and Array#append aliases
  • #4933 - Add `#test_define_method_with_symbol` to test targets
  • #4932 - Fix a typo to match documents
  • #4927 - Raise `TypeError` if `module_function` is not called for modules
  • #4924 - Fix test undef
  • #4919 - Set MetaClass of cloned object
  • #4918 - Check meta-class of method objects in `equals`
  • #4914 - Make Kernel#pp available by default
  • #4911 - Miscellaneous parsing fixes
  • #4906 - Implement Kernel.yield_self
  • #4905 - Split frame fields to reduce pre/post logic
  • #4904 - Implement Integer.sqrt
  • #4902 - Add support for validating Regexp in Ripper
  • #4898 - Improve compatibility with MRI's Ripper
  • #4876 - Ruby 2.5 Support
  • #4828 - JRuby creates symbols with US-ASCII encoding but non-ASCII bytes
  • #4815 - Fix spec of Thread#status for an externally killed thread that sleeps
  • #4811 - Remove ant DSL/wrapper from stdlib and replace with gem.
  • #4809 - JRuby 9.2.0.0-SNAPSHOT does not return result of `rake` via `system`
  • #4800 - TracePoint: Support .trace
  • #4799 - SSL issues when building JRuby on Java 9
  • #4786 - Faster MixedModeIRMethod#call
  • #4784 - Psych needs update once 3.0.0 is released
  • #4780 - PERFORMANCE: Smaller bytecode for interface impl returns
  • #4779 - yaml/store has a hack until we get an updated psych.
  • #4777 - Generate smaller bytecode when using Ruby type on implemented Java Interface + Benchmark
  • #4775 - MINOR: Dry up RubyRange#fixnumEach
  • #4771 - an example test case for #4770 that shows how unicode readings fails …
  • #4769 - Fix Broken Compilation
  • #4762 - MINOR: Cache required arg count in CompiledMethodIR
  • #4761 - Toplevel return behavior (2.4)
  • #4760 - deprecate Class#subclasses from jruby/core_ext.rb
  • #4758 - [ji] make RubyIOs Java Closeable/Flushable + to_java to return stream
  • #4756 - [ji] support converting Ruby File -> Java File
  • #4755 - Implement get_dns_server_list
  • #4754 - PERFORMANCE: Intern Multiple String Constants
  • #4753 - MINOR: Make CachingCallSite more JIT friendly
  • #4751 - MINOR: Dry up RubyArray and improve performance in a few spots
  • #4750 - MINOR: cleanup setting callcounts for JIT
  • #4749 - to_inputstream method
  • #4742 - MINOR: Add missing `final`s and cleanup dead imports in `org.jruby.irinstructions.CallBase`
  • #4735 - BUILDING.md: Markdown formatting, copy-edits
  • #4730 - Fix error message in Hash#fetch
  • #4729 - KeyError message renders String keys as Symbols
  • #4718 - [ji] (auto) convert java numbers
  • #4713 - IO#set_encoding should return self (fixes #4712)
  • #4712 - IO#set_encoding returns nil instead of itself
  • #4711 - High precision BigDecimal to Rational conversion wildly inaccurate
  • #4703 - Move to Trusty
  • #4697 - Cannot rescue LocalJumpError originated in other thread
  • #4694 - Fix break not turning into LocalJumpError soon enough
  • #4693 - Dir.glob returns UTF-8 string with Windows-31J encoding
  • #4690 - native implementation of set.rb
  • #4686 - Cannot rescue from LocalJumpError after wrongly using break in proc
  • #4679 - SSL connection fails due to no available cipher on IBM JRE
  • #4674 - Fix StrptimeLexer.flex to add a comment about how to generate the lexer
  • #4673 - Handle nil buffer in Zlib::GzipReader#readpartial
  • #4660 - RuntimeError with compiled multi-byte variable
  • #4659 - LoadError with compiled multi-byte symbol
  • #4648 - New reify classes
  • #4640 - Also allow access control to trigger quiet bail out of jar index.
  • #4635 - Implement RubyDateParser in Java
  • #4633 - AccessControlException with wrong path when calling File.realpath under SecurityManager and classpath containing spaces
  • #4622 - README: latest stable JRuby in install instruction
  • #4620 - Fix wrong FFI types on Windows x64
  • #4616 - [ruby 2.4] Implemented Integer#ceil, #floor, #truncate
  • #4609 - Remove some MRI tests from excludes
  • #4606 - JRuby raises SystemCallError instead of Errno::EMSGSIZE
  • #4591 - Introduce Date._strptime in Java to improve the performance
  • #4584 - Update test-unit version to latest release
  • #4583 - JRuby starts executing Enumerator code too soon
  • #4579 - Javadoc jar published to Maven Central contains no content
  • #4578 - Use shutdown hook to delete temp files instead of File.deleteOnExit
  • #4577 - LocalJumpError: unexpected break in spec/ruby/language/break_spec.rb
  • #4570 - [jrubyc] respect Ruby visibility rules (do not generate private methods)
  • #4502 - Implemented optional buffer argument for Array#pack
  • #4490 - [ruby 2.4] Fixes for Integer#digits in PR #4375
  • #4470 - Implement `String#casecmp?` and `Symbol#casecmp?`
  • #4469 - `private` and `private :foo` have different semantics when compiling to Java
  • #4374 - [ruby 2.4] Implemented Hash#transform_values(!)
  • #4368 - Implemented Hash#compact and Hash#compact!
  • #4343 - Add optional precision for Float#floor
  • #4337 - Add optional digits for Float#floor
  • #4322 - Add `Pathname#empty?`
  • #4309 - fix Array#sum and Enumerable#sum
  • #4301 - Add `Dir.empty?`
  • #4297 - Feature#12217 Enumerable/Array sum
  • #4296 - Add File.empty?
  • #4293 - Ruby 2.4 support
  • #4292 - [ruby 2.4] Queue and other thread-sync classes moved under Thread
  • #4290 - [ruby 2.4] forwardable.rb is broken on non-MRI
  • #4288 - [ruby 2.4] Module#refine can now be given a Module
  • #4287 - [ruby 2.4] Add support for @ and $ in regexp named groups
  • #4283 - JSON::Parser does not reject inputs that it should
  • #4209 - Update Psych
  • #4205 - Update RubyGems
  • #4200 - BigDecimal multiplication with Rational produces garbage digits within the requested precision.
  • #4099 - specs for Unicode symbols
  • #4096 - Extra tests for symbol encoding Re: #4070 + #3719 and possibly #3880
  • #4068 - Enable invokedynamic for JIT tests
  • #4019 - gem list don't show some gems as default
  • #3880 - define_method using symbols string syntax works incorrectly
  • #3846 - Loss of precision on BigDecimal operations starting from 1.7.20
  • #3841 - fast-ruby benchmark comparing #cover to #range is faster on MRI
  • #3807 - [ji] allow for initialize() to be a valid Java method
  • #3794 - improved Date/Time conversions on Java 8
  • #3792 - Missing String bounds checks
  • #3719 - encoding of utf8 symbols (eg. :λ)
  • #3715 - using explicit return with external reference from define_method is 66x slower on 9k
  • #3697 - Identifier-keyed tables must always use raw or always use encoded identifiers
  • #3640 - Date and DateTime parsing slower than 1.7 and much slower than MRI
  • #3617 - jruby -i Edit files in place behaves inconsistent with MRI
  • #3572 - **kwd, call(**kwd) does not behave like MRI.
  • #3522 - END not working as in MRI
  • #3504 - .to_d acts differently in jRuby 9.0.x than Ruby 2.2.x
  • #3476 - SortedSet is much slower than Hash
  • #3462 - Uninitialized constant in Fiddle::Pointer.malloc
  • #3396 - Pathname#relative_path_from failing when there are certain unicode characters in the path
  • #3014 - Regexp's source's encoding is wrong
  • #2965 - Rakefile/rakelib depends on Ant, will not boot if not present
  • #2396 - String does not use <=> to compare two string instances
  • #2391 - File.dirname normalization differs from MRI
  • #2362 - Deeply-nested super or constant lookup is slower in 9k than in 1.7.
  • #2289 - Incorrect exception type for bad reference.
  • #1408 - Jruby class implementing java interface with "initialize" method as a part of the interface fails to compile with jrubyc
  • #1307 - Incorrect size for :size_t on JRuby / WIndows x64
  • #942 - Array#pack does not support java numbers
  • #914 - __method__ does not return valid symbol when Non-ASCII method
  • #841 - Threads which have blocked Fibers are not killable