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.
- 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
-
Array#append
Feature #12746 -
Array#prepend
Feature #12746
- Now deprecated Feature #3072
-
Dir.glob
provides new optional keyword argument,:base
. Feature #13056 -
Dir.children
Feature #11302 -
Dir.each_child
Feature #11302
- :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 -
File.stat
,File.exist?
, and otherrb_stat()
-using methods release GVL Bug #13941 -
File.rename
releases GVL Feature #13951 - Add
File.lutime
Feature #4052
-
Hash#transform_keys
Feature #13583 -
Hash#transform_keys!
Feature #13583 -
Hash#slice
Feature #8499
-
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
- exception message "stream closed" is changed Bug #13405
-
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
-
Kernel#yield_self
Feature #6721 -
Kernel#pp
Feature #14123
-
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]
- Numerical comparison operators (
<
,<=
,>=
,>
) no longer rescue exceptions of#coerce
. Return nil in#coerce
if the coercion is impossible. Feature #7688
- Precision of
Process.times
is improved ifgetrusage(2)
exists. Feature #11952
-
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
- Update to Onigmo 6.1.1.
- Support absent operator k-takata/Onigmo#82
-
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
- Update Unicode version from 9.0.0 to 10.0.0 Feature #13685
-
Thread#fetch
Feature #13009 - Description set by
Thread#name=
is now visible on Windows 10.
-
Time#at
receives 3rd argument which specifies the unit of 2nd argument. Feature #13919
-
KeyError#receiver
Feature #12063 -
KeyError#key
Feature #12063
- Add Bundler to Standard Library. Feature #12733
-
ACL::ACLEntry.new
no longer suppressesIPAddr::InvalidPrefixError
.
- Add
ERB#result_with_hash
to render a template with local variables passed with a Hash object. Feature #8631 - Default template file encoding is changed from ASCII-8BIT to UTF-8 in
erb
command. Bug #14095 - Carriage returns are changed to be trimmed properly if
trim_mode
is specified and used. Duplicated newlines will be removed on Windows. Bug #5339 Bug #11464
- Add
IPAddr#prefix
- Add
IPAddr#loopback?
- Add
IPAddr#private?
Feature #11666 - Add
IPAddr#link_local?
Feature #10912 -
IPAddr
now rejects invalid address mask. Bug #13399 -
IPAddr#ipv4_compat
and#ipv4_compat?
are deprecated. Bug #13769
-
binding.irb
automatically requires irb and runs Bug #13099 [experimental] - Show source around
binding.irb
on session start Feature #14124
-
Net::HTTP.new
supports no_proxy parameter Feature #11195 -
Net::HTTP#min_version
andNet::HTTP#max_version
Feature #9450 - Add more HTTP status classes
-
Net::HTTP::STATUS_CODES
is added as HTTP Status Code Repository [Misc #12935] -
Net::HTTP#proxy_user
andNet::HTTP#proxy_pass
now reflectshttp_proxy
environment variable if the system's environment variable is multiuser safe. Bug #12921
- New method:
Pathname#glob
Feature #7360
- Update to Psych 3.0.0.
- Add
:symbolize_names
option toPsych.load
,Psych.safe_load
likeJSON.parse
ruby/psych#333, ruby/psych#337 - Add
Psych::Handler#event_location
ruby/psych#326 - Make
frozen string literal = true
ruby/psych#320 - Preserve time zone offset when deserializing times ruby/psych#316
- Removed deprecated method aliases for
syck
gem ruby/psych#312
- New constants:
RbConfig::LIMITS
is added to provide the limits of C types. This is available when rbconfig/sizeof is required.
- New method:
Ripper#state
is added to tell the state of scanner. Feature #13686 - New constants:
Ripper::EXPR_BEG
and so on forRipper#state
.
- Update to RDoc 6.0.0.beta3.
- Replaced IRB based lexer with Ripper. It much improves the speed of generating document. ruby/rdoc#512
- Update to Rubygems 2.7.0.
- New methods:
SecureRandom.alphanumeric
- Add
Set#to_
as alias to#inspect
Feature #13676 - Add
Set#===
as alias to#include?
Feature #13801 - Add
Set#reset
Feature #6589
-
StringIO#write
accepts multiple arguments
- Add
StringScanner#size
Feature #836 - Add
StringScanner#captures
Feature #836 - Add
StringScanner#values_at
Feature #836
- Add Server Name Indication (SNI) support Feature #13729
-
Zlib::GzipWriter#write
accepts multiple arguments
-
BasicSocket#read_nonblock
andBasicSocket#write_nonblock
no longer sets the O_NONBLOCK file description flag as side effect (on Linux only) Feature #13362
-
Net::HTTP#start
now pass:ENV
top_addr
by default. Bug #13351 To avoid this, pass nil explicitly.
-
Random.raw_seed
renamed to becomeRandom.urandom
. It is now applicable to non-seeding purposes due to Bug #9569.
-
Socket::Ifaddr#vhid
is added Feature #13803
- They no longer subclass
Struct
. Feature #13552
- Removed from stdlib. Feature #10169
- Removed "ubygems.rb" file from stdlib. It's needless since Ruby 1.9.
(Probably not JRuby-relevant.)
(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
- Print backtrace and error message in reverse order if STDERR is unchanged and a tty. Feature #8661 [experimental]
- Print error message in bold/underlined text if STDERR is unchanged and a tty. Feature #14140 [experimental]
- configure option --with-ext now mandates its arguments. So for instance if you run ./configure --with-ext=openssl,+ then the openssl library is guaranteed compiled, otherwise the build fails abnormally. Note however to always add the ",+" at the end of the argument. Otherwise nothing but openssl are built. Feature #13302