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#appendFeature #12746 -
Array#prependFeature #12746
- Now deprecated Feature #3072
-
Dir.globprovides new optional keyword argument,:base. Feature #13056 -
Dir.childrenFeature #11302 -
Dir.each_childFeature #11302
- :newline option to
File.openimplies text mode now. Bug #13350 -
File#pathnow raises an IOError for files opened withFile::Constants::TMPFILEoption. Feature #13568 -
File.stat,File.exist?, and otherrb_stat()-using methods release GVL Bug #13941 -
File.renamereleases GVL Feature #13951 - Add
File.lutimeFeature #4052
-
Hash#transform_keysFeature #13583 -
Hash#transform_keys!Feature #13583 -
Hash#sliceFeature #8499
-
IO#preadFeature #4532 -
IO#pwriteFeature #4532 -
IO#copy_streamtries copy offload withcopy_file_range(2)Feature #13867 -
IO#writeaccepts multiple arguments Feature #9323
- exception message "stream closed" is changed Bug #13405
-
Integer.sqrtFeature #13219 -
Integer#stepdoes 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_selfFeature #6721 -
Kernel#ppFeature #14123
-
Module#attr,attr_accessor,attr_reader,attr_writerare now public [Feature #14132] -
Module#define_method,alias_method,undef_method,remove_methodare now public [Feature #14133]
- Numerical comparison operators (
<,<=,>=,>) no longer rescue exceptions of#coerce. Return nil in#coerceif the coercion is impossible. Feature #7688
- Precision of
Process.timesis improved ifgetrusage(2)exists. Feature #11952
-
Range#initializeno 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_prefixis added to remove prefix Feature #12694 -
String#delete_prefix!is added to remove prefix destructively Feature #12694 -
String#delete_suffixis added to remove suffix Feature #13665 -
String#delete_suffix!is added to remove suffix destructively Feature #13665 -
String#each_grapheme_clusterandString#grapheme_clustersis 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#fetchFeature #13009 - Description set by
Thread#name=is now visible on Windows 10.
-
Time#atreceives 3rd argument which specifies the unit of 2nd argument. Feature #13919
-
KeyError#receiverFeature #12063 -
KeyError#keyFeature #12063
- Add Bundler to Standard Library. Feature #12733
-
ACL::ACLEntry.newno longer suppressesIPAddr::InvalidPrefixError.
- Add
ERB#result_with_hashto 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
erbcommand. Bug #14095 - Carriage returns are changed to be trimmed properly if
trim_modeis 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 -
IPAddrnow rejects invalid address mask. Bug #13399 -
IPAddr#ipv4_compatand#ipv4_compat?are deprecated. Bug #13769
-
binding.irbautomatically requires irb and runs Bug #13099 [experimental] - Show source around
binding.irbon session start Feature #14124
-
Net::HTTP.newsupports no_proxy parameter Feature #11195 -
Net::HTTP#min_versionandNet::HTTP#max_versionFeature #9450 - Add more HTTP status classes
-
Net::HTTP::STATUS_CODESis added as HTTP Status Code Repository [Misc #12935] -
Net::HTTP#proxy_userandNet::HTTP#proxy_passnow reflectshttp_proxyenvironment variable if the system's environment variable is multiuser safe. Bug #12921
- New method:
Pathname#globFeature #7360
- Update to Psych 3.0.0.
- Add
:symbolize_namesoption toPsych.load,Psych.safe_loadlikeJSON.parseruby/psych#333, ruby/psych#337 - Add
Psych::Handler#event_locationruby/psych#326 - Make
frozen string literal = trueruby/psych#320 - Preserve time zone offset when deserializing times ruby/psych#316
- Removed deprecated method aliases for
syckgem ruby/psych#312
- New constants:
RbConfig::LIMITSis added to provide the limits of C types. This is available when rbconfig/sizeof is required.
- New method:
Ripper#stateis added to tell the state of scanner. Feature #13686 - New constants:
Ripper::EXPR_BEGand 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#inspectFeature #13676 - Add
Set#===as alias to#include?Feature #13801 - Add
Set#resetFeature #6589
-
StringIO#writeaccepts multiple arguments
- Add
StringScanner#sizeFeature #836 - Add
StringScanner#capturesFeature #836 - Add
StringScanner#values_atFeature #836
- Add Server Name Indication (SNI) support Feature #13729
-
Zlib::GzipWriter#writeaccepts multiple arguments
-
BasicSocket#read_nonblockandBasicSocket#write_nonblockno longer sets the O_NONBLOCK file description flag as side effect (on Linux only) Feature #13362
-
Net::HTTP#startnow pass:ENVtop_addrby default. Bug #13351 To avoid this, pass nil explicitly.
-
Random.raw_seedrenamed to becomeRandom.urandom. It is now applicable to non-seeding purposes due to Bug #9569.
-
Socket::Ifaddr#vhidis 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