Closed
Description
This issue will track Ruby 2.5 support for JRuby. This will be released in JRuby 9.3.0.0 or JRuby 10.
As with previous releases, we will base our checklist on MRI's NEWS file: https://github.com/ruby/ruby/blob/trunk/NEWS
This bug will track all NEWS items new in Ruby 2.5. This list is based off https://github.com/ruby/ruby/blob/trunk/NEWS.
Only changes relevant to JRuby are listed here. MRI-specific internal changes and features are not included.
NOTE: Pull requests should be done against the ruby-2.5
branch.
Language changes
- Top-level constant look-up is removed. Feature #11547
- rescue/else/ensure are allowed inside do/end blocks. Feature #12906
- refinements take place in string interpolations. Feature #13812
Core classes updates (outstanding ones only)
Array
-
Array#append
Feature #12746 -
Array#prepend
Feature #12746
Data
- Now deprecated Feature #3072
Dir
-
Dir.glob
provides new optional keyword argument,:base
. Feature #13056 -
Dir.children
Feature #11302 -
Dir.each_child
Feature #11302
File
- :newline option to
File.open
implies text mode now. Bug #13350 -
File#path
now raises an IOError for files opened withFile::Constants::TMPFILE
option. Feature #13568 - Add
File.lutime
Feature #4052
Hash
-
Hash#transform_keys
Feature #13583 -
Hash#transform_keys!
Feature #13583 -
Hash#slice
Feature #8499
IO
-
IO#pread
Feature #4532 -
IO#pwrite
Feature #4532 -
IO#copy_stream
tries copy offload withcopy_file_range(2)
Feature #13867 -
IO#write
accepts multiple arguments Feature #9323
IOError
- exception message "stream closed" is changed Bug #13405
Integer
-
Integer.sqrt
Feature #13219 -
Integer#step
does no longer rescue exceptions when given a step value which cannot be compared with#>
to 0. Feature #7688 -
Integer#{round,floor,ceil,truncate}
now always return an Integer. Bug #13420 -
Integer#pow
added
Kernel
-
Kernel#yield_self
Feature #6721 -
Kernel#pp
Feature #14123
Module
-
Module#attr
,attr_accessor
,attr_reader
,attr_writer
are now public [Feature #14132] -
Module#define_method
,alias_method
,undef_method
,remove_method
are now public [Feature #14133]
Numeric
- Numerical comparison operators (
<
,<=
,>=
,>
) no longer rescue exceptions of#coerce
. Return nil in#coerce
if the coercion is impossible. Feature #7688
Process
- Precision of
Process.times
is improved ifgetrusage(2)
exists. Feature #11952
Range
-
Range#initialize
no longer rescue exceptions when comparing begin and
end with#<=>
and raise a "bad value for range" ArgumentError
but instead let the exception from the#<=>
call go through.
Feature #7688
Regexp
- Update to Onigmo 6.1.1.
- Support absent operator Implement Absent Operator k-takata/Onigmo#82
String
-
String#-@
deduplicates unfrozen strings. Already-frozen strings remain unchanged for compatibility. Feature #13077 - -"literal" (
String#-@
) optimized to return the same object (same as "literal".freeze in Ruby 2.1+) Feature #13295 -
String#{casecmp,casecmp?}
now return nil for non-string arguments instead of raising a TypeError. Bug #13312 -
String#delete_prefix
is added to remove prefix Feature #12694 -
String#delete_prefix!
is added to remove prefix destructively Feature #12694 -
String#delete_suffix
is added to remove suffix Feature #13665 -
String#delete_suffix!
is added to remove suffix destructively Feature #13665 -
String#each_grapheme_cluster
andString#grapheme_clusters
is added to enumerate grapheme clusters Feature #13780 -
String#start_with?
supports regexp Feature #13712
Regexp/String:
- Update Unicode version from 9.0.0 to 10.0.0 Feature #13685
Thread
-
Thread#fetch
Feature #13009 (Implement fetch for Thread.current #5089) - Description set by
Thread#name=
is now visible on Windows 10.
Time
-
Time#at
receives 3rd argument which specifies the unit of 2nd argument. Feature #13919
KeyError
-
KeyError#receiver
Feature #12063 -
KeyError#key
Feature #12063
Stdlib updates (outstanding ones only)
Bundler
- Add Bundler to Standard Library. Feature #12733
Pathname
- New method:
Pathname#glob
Feature #7360 (Started in Pathname glob #5095)
Psych
- Update to Psych 3.0.0.
- Add
:symbolize_names
option toPsych.load
,Psych.safe_load
likeJSON.parse
Add :symbolize_names option to Psych.load like JSON.parse ruby/psych#333, Add :symbolize_names option to .safe_load too ruby/psych#337 - Add
Psych::Handler#event_location
Add Psych::Handler#event_location ruby/psych#326 - Make
frozen string literal = true
Make frozen string literal = true ruby/psych#320 - Preserve time zone offset when deserializing times Preserve time zone offset when deserializing times ruby/psych#316
- Removed deprecated method aliases for
syck
gem Remove deprecated methods ruby/psych#312
RbConfig
- New constants:
RbConfig::LIMITS
is added to provide the limits of C types. This is available when rbconfig/sizeof is required. (Partial support implemented, additional types can be added as needed)
Ripper
- New method:
Ripper#state
is added to tell the state of scanner. Feature #13686 - New constants:
Ripper::EXPR_BEG
and so on forRipper#state
.
SecureRandom
- New methods:
SecureRandom.alphanumeric
Set
- Add
Set#to_
as alias to#inspect
Feature #13676 - Add
Set#===
as alias to#include?
Feature #13801 - Add
Set#reset
Feature #6589
StringIO
-
StringIO#write
accepts multiple arguments
StringScanner
- Add
StringScanner#size
Feature #836 - Add
StringScanner#captures
Feature #836 - Add
StringScanner#values_at
Feature #836
Compatibility issues (excluding feature bug fixes)
BasicSocket
-
BasicSocket#read_nonblock
andBasicSocket#write_nonblock
no longer sets the O_NONBLOCK file description flag as side effect (on Linux only) Feature #13362
Random
-
Random.raw_seed
renamed to becomeRandom.urandom
. It is now applicable to non-seeding purposes due to Bug #9569.
Socket::Ifaddr
-
Socket::Ifaddr#vhid
is added Feature #13803
ConditionVariable, Queue and SizedQueue reimplemented for speed.
- They no longer subclass
Struct
. Feature #13552
Stdlib compatibility issues (excluding feature bug fixes)
mathn.rb
- Removed from stdlib. Feature #10169
Rubygems
- Removed "ubygems.rb" file from stdlib. It's needless since Ruby 1.9.
C API updates
(Probably not JRuby-relevant.)
Supported platform changes
Implementation improvements
(Probably not JRuby-relevant.)
- This might not be a "user visible feature change" but) Hash class's
hash function is now SipHash13. Feature #13017 - SecureRandom now prefers OS-provided sources than OpenSSL. Bug #9569
- Mutex rewritten to be smaller and faster Feature #13517
- Performance of block passing using block parameters is improved by lazy Proc allocation Feature #14045
- Dynamic instrumentation for TracePoint hooks instead of using "trace" instruction to avoid overhead Feature #14104
Miscellaneous changes
- Print backtrace and error message in reverse order if STDERR is unchanged and a tty. Feature #8661 [experimental] (Started in Reverse the order in which we print out the backtrace. #4876 #5094)
- Print error message in bold/underlined text if STDERR is unchanged and a tty. Feature #14140 [experimental] (Started in Reverse the order in which we print out the backtrace. #4876 #5094)