2016-12-26 07:00:02 -05:00
|
|
|
# -*- rdoc -*-
|
|
|
|
|
|
|
|
= NEWS for Ruby 2.5.0
|
|
|
|
|
|
|
|
This document is a list of user visible feature changes made between
|
|
|
|
releases except for bug fixes.
|
|
|
|
|
|
|
|
Note that each entry is kept so brief that no reason behind or
|
|
|
|
reference information is supplied with. For a full list of changes
|
|
|
|
with all sufficient information, see the ChangeLog file or Redmine
|
|
|
|
(e.g. <tt>https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER</tt>)
|
|
|
|
|
|
|
|
== Changes since the 2.4.0 release
|
|
|
|
|
|
|
|
=== Language changes
|
|
|
|
|
2017-01-01 04:07:56 -05:00
|
|
|
* Top-level constant look-up is removed. [Feature #11547]
|
|
|
|
|
2017-01-19 04:54:58 -05:00
|
|
|
* rescue/else/ensure are allowed inside do/end blocks. [Feature #12906]
|
|
|
|
|
2017-09-17 22:27:13 -04:00
|
|
|
* refinements take place in string interpolations. [Feature #13812]
|
|
|
|
|
2016-12-26 07:00:02 -05:00
|
|
|
=== Core classes updates (outstanding ones only)
|
|
|
|
|
2017-04-05 20:14:57 -04:00
|
|
|
* Array
|
|
|
|
|
|
|
|
* Array#append [Feature #12746]
|
|
|
|
* Array#prepend [Feature #12746]
|
|
|
|
|
2017-11-29 03:23:16 -05:00
|
|
|
* Data
|
|
|
|
|
|
|
|
* Now deprecated [Feature #3072]
|
|
|
|
|
2017-05-23 09:47:36 -04:00
|
|
|
* Dir
|
|
|
|
|
|
|
|
* Dir.glob provides new optional keyword argument, :base.
|
2017-05-24 22:50:21 -04:00
|
|
|
[Feature #13056]
|
|
|
|
* Dir.children [Feature #11302]
|
|
|
|
* Dir.each_child [Feature #11302]
|
2017-05-23 09:47:36 -04:00
|
|
|
|
2017-07-14 06:53:35 -04:00
|
|
|
* File
|
|
|
|
|
|
|
|
* :newline option to File.open implies text mode now. [Bug #13350]
|
2017-08-31 07:22:15 -04:00
|
|
|
* File#path now raises an IOError for files opened with
|
|
|
|
File::Constants::TMPFILE option. [Feature #13568]
|
2017-10-01 17:29:27 -04:00
|
|
|
* File.stat, File.exist?, and other rb_stat()-using methods release GVL
|
|
|
|
[Bug #13941]
|
|
|
|
* File.rename releases GVL [Feature #13951]
|
2017-11-29 04:59:20 -05:00
|
|
|
* Add File.lutime [Feature #4052]
|
2017-07-14 06:53:35 -04:00
|
|
|
|
2017-07-19 09:59:58 -04:00
|
|
|
* Hash
|
|
|
|
|
|
|
|
* Hash#transform_keys [Feature #13583]
|
|
|
|
* Hash#transform_keys! [Feature #13583]
|
2017-10-21 02:11:01 -04:00
|
|
|
* Hash#slice [Feature #8499]
|
2017-07-19 09:59:58 -04:00
|
|
|
|
2017-04-02 20:10:50 -04:00
|
|
|
* IO
|
|
|
|
|
|
|
|
* IO#pread [Feature #4532]
|
|
|
|
* IO#pwrite [Feature #4532]
|
2017-10-21 10:25:46 -04:00
|
|
|
* IO#copy_stream tries copy offload with copy_file_range(2) [Feature #13867]
|
2017-10-23 02:05:46 -04:00
|
|
|
* IO#write accepts multiple arguments [Feature #9323]
|
2017-04-02 20:10:50 -04:00
|
|
|
|
2017-04-09 01:09:44 -04:00
|
|
|
* IOError
|
|
|
|
|
|
|
|
* exception message "stream closed" is changed [Bug #13405]
|
|
|
|
|
2017-07-19 11:01:01 -04:00
|
|
|
* 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]
|
2017-12-03 21:35:41 -05:00
|
|
|
* Integer#pow now has an optional modulo argument for calculating modular
|
|
|
|
exponentiation. [Feature #12508] [Feature #11003]
|
2017-07-19 11:01:01 -04:00
|
|
|
|
2017-05-01 03:50:53 -04:00
|
|
|
* Kernel
|
|
|
|
|
|
|
|
* Kernel#yield_self [Feature #6721]
|
2017-11-29 20:31:00 -05:00
|
|
|
* Kernel#pp [Feature #14123]
|
2017-05-01 03:50:53 -04:00
|
|
|
|
2017-11-29 12:47:47 -05:00
|
|
|
* Module
|
|
|
|
* Module#attr, attr_accessor, attr_reader, attr_writer are now public [#14132]
|
2017-11-29 12:47:59 -05:00
|
|
|
* Module#define_method, alias_method, undef_method, remove_method are now public [#14133]
|
2017-11-29 12:47:47 -05:00
|
|
|
|
2017-04-25 07:42:20 -04:00
|
|
|
* Numeric
|
|
|
|
|
|
|
|
* Numerical comparison operators (<,<=,>=,>) no longer rescue exceptions
|
|
|
|
of #coerce. Return nil in #coerce if the coercion is impossible.
|
|
|
|
[Feature #7688]
|
|
|
|
|
process.c: Use getrusage(2) in Process.times
if getrusage(2) is available, to improve precision of Process.times and
its user like lib/benchmark.rb.
On macOS, since getrusage(2) has better precision than times(3),
they are much improved like:
* Before
Process.times
=> #<struct Process::Tms utime=0.56, stime=0.35, cutime=0.04, cstime=0.03>
puts Benchmark.measure { "a" * 1_000_000_000 }
0.340000 0.310000 0.650000 ( 0.674025)
* After
Process.times
=> #<struct Process::Tms utime=0.561899, stime=0.35076, cutime=0.046483, cstime=0.038929>
puts Benchmark.measure { "a" * 1_000_000_000 }
0.343223 0.310037 0.653260 ( 0.674025)
On Linux, since struct rusage from getrusage(2) is used instead of struct tms
from times(2), they are slightly improved like:
* Before
Process.times
=> #<struct Process::Tms utime=0.43, stime=0.11, cutime=0.0, cstime=0.0>
puts Benchmark.measure { "a" * 1_000_000_000 }
0.120000 0.040000 0.170000 ( 0.171621)
* After
Process.times
=> #<struct Process::Tms utime=0.432, stime=0.116, cutime=0.0, cstime=0.0>
puts Benchmark.measure { "a" * 1_000_000_000 }
0.124000 0.048000 0.172000 ( 0.171621)
[ruby-dev:49471] [Feature #11952]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-27 21:48:11 -04:00
|
|
|
* Process
|
|
|
|
|
|
|
|
* Precision of Process.times is improved if getrusage(2) exists. [Feature #11952]
|
|
|
|
|
2017-04-25 07:42:43 -04:00
|
|
|
* 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]
|
|
|
|
|
2017-02-11 10:08:33 -05:00
|
|
|
* Regexp
|
2017-12-01 08:50:13 -05:00
|
|
|
* Update to Onigmo 6.1.3-669ac9997619954c298da971fcfacccf36909d05.
|
2017-02-11 10:08:33 -05:00
|
|
|
* Support absent operator https://github.com/k-takata/Onigmo/issues/82
|
|
|
|
|
2017-02-24 21:31:03 -05:00
|
|
|
* String
|
|
|
|
|
|
|
|
* String#-@ deduplicates unfrozen strings. Already-frozen
|
|
|
|
strings remain unchanged for compatibility. [Feature #13077]
|
2017-03-16 19:17:14 -04:00
|
|
|
* -"literal" (String#-@) optimized to return the same object
|
2017-03-26 06:21:45 -04:00
|
|
|
(same as "literal".freeze in Ruby 2.1+) [Feature #13295]
|
2017-05-21 15:29:58 -04:00
|
|
|
* String#{casecmp,casecmp?} now return nil for non-string arguments
|
|
|
|
instead of raising a TypeError. [Bug #13312]
|
2017-06-21 06:06:44 -04:00
|
|
|
* String#delete_prefix is added to remove prefix [Feature #12694]
|
2017-06-21 03:43:26 -04:00
|
|
|
* String#delete_prefix! is added to remove prefix destructively [Feature #12694]
|
2017-07-20 12:29:20 -04:00
|
|
|
* String#delete_suffix is added to remove suffix [Feature #13665]
|
|
|
|
* String#delete_suffix! is added to remove suffix destructively [Feature #13665]
|
2017-08-31 02:35:28 -04:00
|
|
|
* String#each_grapheme_cluster and String#grapheme_clusters is added to
|
|
|
|
enumerate grapheme clusters [Feature #13780]
|
2017-10-21 02:51:01 -04:00
|
|
|
* String#start_with? supports regexp [Feature #13712]
|
2017-02-24 21:31:03 -05:00
|
|
|
|
2017-11-02 16:25:37 -04:00
|
|
|
* Regexp/String: Update Unicode version from 9.0.0 to 10.0.0 [Feature #13685]
|
2017-09-06 04:19:12 -04:00
|
|
|
|
2017-07-19 11:01:01 -04:00
|
|
|
* Thread
|
|
|
|
|
|
|
|
* Thread#fetch [Feature #13009]
|
|
|
|
|
2017-08-26 16:55:31 -04:00
|
|
|
* Description set by Thread#name= is now visible on Windows 10.
|
|
|
|
|
2017-09-25 02:20:10 -04:00
|
|
|
* Time
|
|
|
|
|
|
|
|
* Time#at receives 3rd argument which specifies the unit of 2nd argument.
|
|
|
|
[Feature #13919]
|
|
|
|
|
2017-09-18 04:05:53 -04:00
|
|
|
* KeyError
|
|
|
|
|
|
|
|
* KeyError#receiver [Feature #12063]
|
|
|
|
* KeyError#key [Feature #12063]
|
|
|
|
|
2016-12-26 07:00:02 -05:00
|
|
|
=== Stdlib updates (outstanding ones only)
|
|
|
|
|
2017-09-10 21:33:46 -04:00
|
|
|
* Bundler
|
|
|
|
|
|
|
|
* Add Bundler to Standard Library. [Feature #12733]
|
|
|
|
|
2017-10-21 05:53:52 -04:00
|
|
|
* DRb
|
|
|
|
* ACL::ACLEntry.new no longer suppresses IPAddr::InvalidPrefixError.
|
|
|
|
|
2017-07-19 11:01:01 -04:00
|
|
|
* ERB
|
|
|
|
* Add ERB#result_with_hash to render a template with local variables passed
|
|
|
|
with a Hash object. [Feature #8631]
|
2017-11-10 08:59:01 -05:00
|
|
|
* Default template file encoding is changed from ASCII-8BIT to UTF-8 in erb
|
|
|
|
command. [Bug #14095]
|
2017-07-19 11:01:01 -04:00
|
|
|
|
|
|
|
* 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]
|
|
|
|
|
2017-10-21 09:34:19 -04:00
|
|
|
* IPAddr
|
|
|
|
* New methods are added:
|
|
|
|
* IPAddr#prefix
|
|
|
|
* IPAddr#loopback?
|
|
|
|
* IPAddr#private? [Feature #11666]
|
|
|
|
* IPAddr#link_local? [Feature #10912]
|
|
|
|
* IPAddr now rejects invalid address mask. [Bug #13399]
|
2017-10-21 09:38:03 -04:00
|
|
|
* IPAddr#ipv4_compat and #ipv4_compat? are deprecated. [Bug #13769]
|
2017-10-21 09:34:19 -04:00
|
|
|
|
2017-11-23 22:53:27 -05:00
|
|
|
* IRB
|
2017-11-23 23:29:49 -05:00
|
|
|
* `binding.irb` automatically requires irb and runs [Bug #13099] [experimental]
|
|
|
|
* Show source around `binding.irb` on session start [Feature #14124]
|
2017-11-23 22:53:27 -05:00
|
|
|
|
2017-05-19 12:06:18 -04:00
|
|
|
* Net::HTTP
|
2017-12-01 03:35:58 -05:00
|
|
|
* Net::HTTP.new supports no_proxy parameter [Feature #11195]
|
|
|
|
|
|
|
|
* Net::HTTP#min_version/max_version [Feature #9450]
|
|
|
|
|
2017-05-19 12:06:18 -04:00
|
|
|
* Add more HTTP status classes
|
|
|
|
|
2017-05-19 12:06:25 -04:00
|
|
|
* Net::HTTP::STATUS_CODES is added as HTTP Status Code Repository [Misc #12935]
|
|
|
|
|
2017-04-23 12:19:23 -04:00
|
|
|
* Net::HTTP#proxy_user and Net::HTTP#proxy_pass now reflects http_proxy
|
|
|
|
environment variable if the system's environment variable is multiuser
|
|
|
|
safe. [Bug #12921]
|
|
|
|
|
2017-10-21 04:34:49 -04:00
|
|
|
* Pathname
|
|
|
|
* New method:
|
|
|
|
* Pathname#glob [Feature #7360]
|
|
|
|
|
2017-11-02 16:26:11 -04:00
|
|
|
* Psych
|
|
|
|
|
2017-11-30 20:52:26 -05:00
|
|
|
* Update to Psych 3.0.0.
|
|
|
|
* Add :symbolize_names option to Psych.load, Psych.safe_load like JSON.parse
|
|
|
|
https://github.com/ruby/psych/pull/333, https://github.com/ruby/psych/pull/337
|
|
|
|
* Add Psych::Handler#event_location
|
|
|
|
https://github.com/ruby/psych/pull/326
|
|
|
|
* Make frozen string literal = true
|
|
|
|
https://github.com/ruby/psych/pull/320
|
|
|
|
* Preserve time zone offset when deserializing times
|
|
|
|
https://github.com/ruby/psych/pull/316
|
2017-12-08 17:43:05 -05:00
|
|
|
* Remove deprecated method aliases for syck gem
|
2017-11-30 20:52:26 -05:00
|
|
|
https://github.com/ruby/psych/pull/312
|
2017-11-02 16:26:11 -04:00
|
|
|
|
2017-04-05 22:10:40 -04:00
|
|
|
* RbConfig
|
|
|
|
* New constants:
|
|
|
|
* RbConfig::LIMITS is added to provide the limits of C types.
|
2017-10-21 04:44:56 -04:00
|
|
|
This is available when rbconfig/sizeof is required.
|
2017-04-05 22:10:40 -04:00
|
|
|
|
2017-09-14 06:53:47 -04:00
|
|
|
* Ripper
|
|
|
|
* New method:
|
|
|
|
* Ripper#state is added to tell the state of scanner. [Feature #13686]
|
|
|
|
|
|
|
|
* New constants:
|
|
|
|
* Ripper::EXPR_BEG and so on for Ripper#state.
|
|
|
|
|
2017-10-10 23:44:35 -04:00
|
|
|
* RDoc
|
|
|
|
|
2017-11-02 16:25:37 -04:00
|
|
|
* Update to RDoc 6.0.0.beta3.
|
2017-10-11 04:14:50 -04:00
|
|
|
* Replaced IRB based lexer with Ripper. It much improves the speed of generating document.
|
2017-10-10 23:44:35 -04:00
|
|
|
* https://github.com/ruby/rdoc/pull/512
|
|
|
|
|
|
|
|
* Rubygems
|
|
|
|
|
2017-11-02 16:25:37 -04:00
|
|
|
* Update to Rubygems 2.7.0.
|
2017-11-02 00:25:37 -04:00
|
|
|
* http://blog.rubygems.org/2017/11/01/2.7.0-released.html
|
2017-10-10 23:44:35 -04:00
|
|
|
* http://blog.rubygems.org/2017/08/27/2.6.13-released.html
|
|
|
|
* http://blog.rubygems.org/2017/10/09/unsafe-object-deserialization-vulnerability.html
|
|
|
|
|
2017-10-21 11:21:26 -04:00
|
|
|
* SecureRandom
|
|
|
|
* New methods:
|
|
|
|
* SecureRandom.alphanumeric
|
|
|
|
|
2017-07-14 04:46:13 -04:00
|
|
|
* Set
|
|
|
|
* Add Set#to_s as alias to #inspect [Feature #13676]
|
2017-09-19 10:56:03 -04:00
|
|
|
* Add Set#=== as alias to #include? [Feature #13801]
|
2017-10-22 08:26:21 -04:00
|
|
|
* Add Set#reset [Feature #6589]
|
2017-07-14 04:46:13 -04:00
|
|
|
|
2017-10-23 02:25:39 -04:00
|
|
|
* StringIO
|
|
|
|
* StringIO#write accepts multiple arguments
|
|
|
|
|
2017-11-29 02:57:48 -05:00
|
|
|
* StringScanner
|
|
|
|
* Add StringScanner#size, StringScanner#captures, StringScanner#values_at [Feature #836]
|
|
|
|
|
2017-07-07 13:41:08 -04:00
|
|
|
* WEBrick
|
|
|
|
|
|
|
|
* Add Server Name Indication (SNI) support [Feature #13729]
|
|
|
|
|
2017-10-23 08:59:05 -04:00
|
|
|
* Zlib
|
2017-10-23 03:06:12 -04:00
|
|
|
* Zlib::GzipWriter#write accepts multiple arguments
|
|
|
|
|
2016-12-26 07:00:02 -05:00
|
|
|
=== Compatibility issues (excluding feature bug fixes)
|
|
|
|
|
2017-07-19 11:01:01 -04:00
|
|
|
* BasicSocket#read_nonblock and BasicSocket#write_nonblock no
|
|
|
|
longer sets the O_NONBLOCK file description flag as side effect
|
|
|
|
(on Linux only) [Feature #13362]
|
|
|
|
|
2017-05-19 11:13:42 -04:00
|
|
|
* Net::HTTP
|
|
|
|
* Net::HTTP#start now pass :ENV to p_addr by default. [Bug #13351]
|
|
|
|
To avoid this, pass nil explicitly.
|
|
|
|
|
2017-02-27 08:41:38 -05:00
|
|
|
* Random.raw_seed renamed to become Random.urandom. It is now
|
|
|
|
applicable to non-seeding purposes due to [Bug #9569].
|
|
|
|
|
2017-08-31 04:33:35 -04:00
|
|
|
* Socket::Ifaddr#vhid is added [Feature #13803]
|
|
|
|
|
2017-07-21 15:06:07 -04:00
|
|
|
* ConditionVariable, Queue and SizedQueue reimplemented for speed.
|
|
|
|
They no longer subclass Struct. [Feature #13552]
|
|
|
|
|
2016-12-26 07:00:02 -05:00
|
|
|
=== Stdlib compatibility issues (excluding feature bug fixes)
|
|
|
|
|
2017-04-21 02:16:11 -04:00
|
|
|
* mathn.rb
|
|
|
|
Removed from stdlib. [Feature #10169]
|
|
|
|
|
2017-09-24 04:10:08 -04:00
|
|
|
* Rubygems
|
2017-11-07 15:06:25 -05:00
|
|
|
* Removed "ubygems.rb" file from stdlib. It's needless since Ruby 1.9.
|
2017-09-24 04:10:08 -04:00
|
|
|
|
2016-12-26 07:00:02 -05:00
|
|
|
=== C API updates
|
|
|
|
|
|
|
|
=== Supported platform changes
|
|
|
|
|
2017-10-23 01:56:25 -04:00
|
|
|
* Drop to support NaCl platform
|
|
|
|
* https://bugs.chromium.org/p/chromium/issues/detail?id=239656#c160
|
|
|
|
|
2016-12-26 07:00:02 -05:00
|
|
|
=== Implementation improvements
|
|
|
|
|
2017-01-21 23:02:42 -05:00
|
|
|
* (This might not be a "user visible feature change" but) Hash class's
|
|
|
|
hash function is now SipHash13. [Feature #13017]
|
|
|
|
|
2017-01-21 23:14:21 -05:00
|
|
|
* SecureRandom now prefers OS-provided sources than OpenSSL. [Bug #9569]
|
|
|
|
|
2017-07-21 15:06:07 -04:00
|
|
|
* Mutex rewritten to be smaller and faster [Feature #13517]
|
|
|
|
|
2017-10-24 09:59:59 -04:00
|
|
|
* Performance of block passing using block parameters is improved by
|
|
|
|
lazy Proc allocation [Feature #14045]
|
|
|
|
|
2017-11-14 07:58:36 -05:00
|
|
|
* Dynamic instrumentation for TracePoint hooks instead of using "trace"
|
|
|
|
instruction to avoid overhead [Feature #14104]
|
|
|
|
|
2016-12-26 07:00:02 -05:00
|
|
|
=== Miscellaneous changes
|
2017-04-21 01:35:34 -04:00
|
|
|
|
2017-05-19 02:14:43 -04:00
|
|
|
* Print backtrace and error message in reverse order if STDERR is unchanged and a tty.
|
|
|
|
[Feature #8661] [experimental]
|
|
|
|
|
2017-11-29 06:14:23 -05:00
|
|
|
* Print error message in bold/underlined text if STDERR is unchanged and a tty.
|
2017-11-29 06:16:14 -05:00
|
|
|
[Feature #14140] [experimental]
|
2017-11-29 06:14:23 -05:00
|
|
|
|
2017-04-21 01:35:34 -04:00
|
|
|
* 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]
|