* NEWS: reverted to rdoc mode.  markdown mode does not make
  class/module/method references in HTML.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65121 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-10-17 11:35:28 +00:00
Родитель 6897062003
Коммит cfc7328782
1 изменённых файлов: 233 добавлений и 256 удалений

435
NEWS
Просмотреть файл

@ -1,6 +1,6 @@
# -*- markdown -*- markup: Markdown
# -*- rdoc -*-
# NEWS for Ruby 2.6.0
= NEWS for Ruby 2.6.0
This document is a list of user visible feature changes made between
releases except for bug fixes.
@ -8,410 +8,388 @@ 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. `https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER`)
(e.g. <tt>https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER</tt>)
## Changes since the 2.5.0 release
== Changes since the 2.5.0 release
### Language changes
=== Language changes
* `$SAFE` is a process global state and we can set 0 again.
[Feature #14250]
* <code>$SAFE</code> is a process global state and we can set 0 again. [Feature #14250]
* refinements take place at block passing. [Feature #14223]
* `else` without `rescue` now causes a syntax error. [EXPERIMENTAL]
* +else+ without +rescue+ now causes a syntax error. [EXPERIMENTAL]
* constant names may start with a non-ASCII capital letter.
[Feature #13770]
* constant names may start with a non-ASCII capital letter. [Feature #13770]
* An endless range is introduced. You can write a range that has no end,
like `(0..)`. The following shows typical use cases. [Feature #12912]
like <code>(0..)</code>. The following shows typical use cases. [Feature #12912]
```ruby
ary[1..] # identical to ary[1..-1]
(1..).each {|index| ... } # infinite loop from index 1
ary.zip(1..) {|elem, index| ... } # ary.each.with_index(1) { }
```
* Non-`Symbol` key in keyword arguments hash causes an exception.
* Non- Symbol key in keyword arguments hash causes an exception.
### Core classes updates (outstanding ones only)
=== Core classes updates (outstanding ones only)
* `Array`
[Array]
* New methods:
[New methods]
* Added `Array#union` and `Array#difference` instance method.
[Feature #14097]
* Added Array#union and Array#difference instance method. [Feature #14097]
* Modified methods:
[Modified methods]
* `Array#to_h` now maps elements to new keys and values by the
* Array#to_h now maps elements to new keys and values by the
block if given. [Feature #15143]
* Aliased methods:
[Aliased methods]
* `Array#filter` is a new alias for `Array#select`.
[Feature #13784]
* `Array#filter!` is a new alias for `Array#select!`.
[Feature #13784]
* Array#filter is a new alias for Array#select. [Feature #13784]
* Array#filter! is a new alias for Array#select!. [Feature #13784]
* `Binding`
[Binding]
* New methods:
[New methods]
* added `Binding#source_location`. [Feature #14230]
* added Binding#source_location. [Feature #14230]
This method returns the source location of binding, a 2-element
array of `__FILE__` and `__LINE__`. Traditionally, the same
information could be retrieved by `eval("[__FILE__, __LINE__]",
binding)`, but we are planning to change this behavior so that
`Kernel#eval` ignores binding's source location [Bug #4352].
array of __FILE__ and __LINE__. Traditionally, the same
information could be retrieved by <code>eval("[__FILE__, __LINE__]",
binding)</code>, but we are planning to change this behavior so that
Kernel#eval ignores binding's source location [Bug #4352].
So, users should use this newly-introduced method instead of
`Kernel#eval`.
Kernel#eval.
* `Dir`
[Dir]
* New methods:
[New methods]
* added `Dir#each_child` and `Dir#children` instance methods.
[Feature #13969]
* added Dir#each_child and Dir#children instance methods. [Feature #13969]
* `Enumerable`
[Enumerable]
* Modified methods:
[Modified methods]
* `Enumerable#to_h` now maps elements to new keys and values
by the block if given. [Feature #15143]
* Enumerable#to_h now maps elements to new keys and values by the block if
given. [Feature #15143]
* Aliased methods:
[Aliased methods]
* `Enumerable#filter` is a new alias for `Enumerable#select`.
[Feature #13784]
* Enumerable#filter is a new alias for Enumerable#select. [Feature #13784]
* `Enumerator::ArithmeticSequence`
[Enumerator::ArithmeticSequence]
* This is a new class to represent a generator of an arithmetic sequence,
that is a number sequence defined by a common difference. It can be used
for representing what is similar to Python's slice. You can get an
instance of this class from `Numeric#step` and `Range#step`.
instance of this class from Numeric#step and Range#step.
* `Enumerator::Lazy`
[Enumerator::Lazy]
* Aliased methods:
[Aliased methods]
* `Enumerator::Lazy#filter` is a new alias for
`Enumerator::Lazy#select`. [Feature #13784]
* Enumerator::Lazy#filter is a new alias for
Enumerator::Lazy#select. [Feature #13784]
* `ENV`
[ENV]
* Modified methods:
[Modified methods]
* `ENV.to_h` now maps names and values to new keys and values
* ENV.to_h now maps names and values to new keys and values
by the block if given. [Feature #15143]
* `Exception`
[Exception]
* New options:
[New options]
* `Exception#full_message` takes `:highlight` and `:order` options.
[Bug #14324]
* Exception#full_message takes +:highlight+ and +:order+
options. [Bug #14324]
* `Hash`
[Hash]
* Modified methods:
[Modified methods]
* `Hash#merge`, `merge!`, and `update` now accept multiple
* Hash#merge, merge!, and update now accept multiple
arguments. [Feature #15111]
* `Hash#to_h` now maps keys and values to new keys and values
* Hash#to_h now maps keys and values to new keys and values
by the block if given. [Feature #15143]
* Aliased methods:
[Aliased methods]
* `Hash#filter` is a new alias for `Hash#select`. [Feature #13784]
* Hash#filter is a new alias for Hash#select. [Feature #13784]
* `Hash#filter!` is a new alias for `Hash#select!`.
[Feature #13784]
* Hash#filter! is a new alias for Hash#select!. [Feature #13784]
* `IO`
[IO]
* New options:
[New options]
* new mode character `'x'` to open files for exclusive access.
[Feature #11258]
* new mode character <code>'x'</code> to open files for exclusive
access. [Feature #11258]
* `Kernel`
[Kernel]
* Aliased methods:
[Aliased methods]
* `Kernel#then` is a new alias for `Kernel#yield_self`.
[Feature #14594]
* Kernel#then is a new alias for Kernel#yield_self. [Feature #14594]
* New options:
[New options]
* `Kernel.#Complex`, `Kernel.#Float`, `Kernel.#Integer` and
`Kernel.#Rational` take `:exception` option to specify the way of
* Kernel#Complex, Kernel#Float, Kernel#Integer and
Kernel#Rational take +:exception+ option to specify the way of
error handling. [Feature #12732]
* `Kernel.#system` takes `:exception` option to raise an exception
* Kernel#system takes +:exception+ option to raise an exception
on failure. [Feature #14386]
* Incompatible changes:
[Incompatible changes]
* `system()` and `exec()` do not close non-standard file descriptors
(The default of `:close_others` option is changed to `false` by
default. but we still set the `FD_CLOEXEC` flag on descriptors we
* Kernel#system and Kernel#exec do not close non-standard file descriptors
(The default of +:close_others+ option is changed to +false+ by
default. but we still set the +FD_CLOEXEC+ flag on descriptors we
create). [Misc #14907]
* `KeyError`
[KeyError]
* New options:
[New options]
* `KeyError#initialize` accepts `:receiver` and `:key` options to
* KeyError#initialize accepts +:receiver+ and +:key+ options to
set receiver and key in Ruby code. [Feature #14313]
* `Module`
[Module]
* New methods:
[New methods]
* `Module#method_defined?`, `Module#private_method_defined?` and
`Module#protected_method_defined?` now accepts the second
parameter as optional. If it's `true` (=default), checks ancestor
modules/classes, or checks only the class itself.
[Feature #14944]
* Module#method_defined?, Module#private_method_defined? and
Module#protected_method_defined? now accepts the second
parameter as optional. If it's +true+ (=default), checks ancestor
modules/classes, or checks only the class itself. [Feature #14944]
* `NameError`
[NameError]
* New options:
[New options]
* `NameError#initialize` accepts `:receiver` option to set receiver
* NameError#initialize accepts +:receiver+ option to set receiver
in Ruby code. [Feature #14313]
* `NoMethodError`
[NoMethodError]
* New options:
[New options]
* `NoMethodError#initialize` accepts `:receiver` option to set
receiver in Ruby code. [Feature #14313]
* NoMethodError#initialize accepts +:receiver+ option to set receiver
in Ruby code. [Feature #14313]
* `Numeric`
[Numeric]
* Incompatible changes:
[Incompatible changes]
* `Numeric#step` now returns an instance of
`Enumerator::ArithmeticSequence` class rather than one of
`Enumerator` class.
* Numeric#step now returns an instance of Enumerator::ArithmeticSequence
class rather than one of Enumerator class.
* `Proc`
[Proc]
* Incompatible changes:
[Incompatible changes]
* `Proc#call` doesn't change `$SAFE` any more. [Feature #14250]
* Proc#call doesn't change <code>$SAFE</code> any more. [Feature #14250]
* `Random`
[Random]
* New methods:
[New methods]
* added `Random.bytes`. [Feature #4938]
* added Random.bytes. [Feature #4938]
* `Range`
[Range]
* New methods:
[New methods]
* Added `Range#%` instance method. [Feature #14697]
* Added Range#% instance method. [Feature #14697]
* Incompatible changes:
[Incompatible changes]
* `Range#===` now uses `#cover?` instead of `#include?` method.
[Feature #14575]
* `Range#cover?` now accepts Range object. [Feature #14473]
* `Range#step` now returns an instance of
`Enumerator::ArithmeticSequence` class rather than one of
`Enumerator` class.
* Range#=== now uses #cover? instead of #include? method. [Feature #14575]
* Range#cover? now accepts Range object. [Feature #14473]
* Range#step now returns an instance of Enumerator::ArithmeticSequence
class rather than one of Enumerator class.
* `RubyVM::AST`
[RubyVM::AST]
* New methods:
[New methods]
* `RubyVM::AST.parse` parses a given string and returns AST nodes.
[experimental]
* `RubyVM::AST.parse_file` parses a given file and returns AST
* RubyVM::AST.parse parses a given string and returns AST
nodes. [experimental]
* `String`
* RubyVM::AST.parse_file parses a given file and returns AST
nodes. [experimental]
* New features:
[String]
* `String#split` yields each substring to the block if given.
[Feature #4780]
[New features]
* `Struct`
* String#split yields each substring to the block if given. [Feature #4780]
* Modified methods:
[Struct]
* `Struct#to_h` now maps keys and values to new keys and values
[Modified methods]
* Struct#to_h now maps keys and values to new keys and values
by the block if given. [Feature #15143]
* Aliased method:
[Aliased method]
* `Struct#filter` is a new alias for `Struct#select` [Feature #13784]
* Struct#filter is a new alias for Struct#select [Feature #13784]
* `Time`
[Time]
* New features:
[New features]
* `Time.new` and `Time#getlocal` accept a timezone object as
well as UTC offset string. `Time#+`, `Time#-` and `Time#succ`
also preserve the timezone. [Feature #14850]
* Time.new and Time#getlocal accept a timezone object as well as
UTC offset string. Time#+, Time#- and Time#succ also preserve
the timezone. [Feature #14850]
* `TracePoint`
[TracePoint]
* New methods:
[New methods]
* `TracePoint#parameters` [Feature #14694]
* TracePoint#parameters [Feature #14694]
### Stdlib updates (outstanding ones only)
=== Stdlib updates (outstanding ones only)
* `ERB`
[ERB]
* New options:
[New options]
* Add `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.
Now non-keyword arguments other than first one are softly
deprecated and will be removed when Ruby 2.5 becomes EOL.
[Feature #14256]
* Add +:trim_mode+ and +:eoutvar+ keyword arguments to ERB.new.
Now non-keyword arguments other than first one are softly deprecated
and will be removed when Ruby 2.5 becomes EOL. [Feature #14256]
* erb command's `-S` option is deprecated, which will be removed in
the next version.
* erb command's <tt>-S</tt> option is deprecated, which will be removed
in the next version.
* `FileUtils`
[FileUtils]
* New method:
[New method]
* `FileUtils#cp_lr`. [Feature #4189]
* FileUtils#cp_lr. [Feature #4189]
* `Matrix`
[Matrix]
* New methods:
[New methods]
* `Matrix#antisymmetric?`
* Matrix#antisymmetric?
* `Matrix#reflexive?`
* Matrix#reflexive?
* `Net`
[Net]
* New options:
[New options]
* Add `:write_timeout` keyword argument to `Net::BufferedIO.new`.
[Feature #13396]
* Add +:write_timeout+ keyword argument to Net::HTTP.new. [Feature #13396]
* New methods:
[New methods]
* Add `Net::BufferedIO#write_timeout`,
`Net::BufferedIO#write_timeout=`, `Net::HTTP#write_timeout`, and
`Net::HTTP#write_timeout=`. [Feature #13396]
* Add Net::HTTP#write_timeout, and Net::HTTP#write_timeout=. [Feature #13396]
* New constant:
[New constant]
* Add `Net::HTTPClientException` to deprecate
`Net::HTTPServerException`, whose name is misleading. [Bug #14688]
* Add Net::HTTPClientException to deprecate Net::HTTPServerException,
whose name is misleading. [Bug #14688]
* `REXML`
[REXML]
* Improved some XPath implementations:
[Improved some XPath implementations]
* `concat()` function: Stringify all arguments before concatenating
* <code>concat()</code> function: Stringify all arguments before concatenating
* `string()` function: Support context node
* <code>string()</code> function: Support context node
* `string()` function: Support processing instruction node
* <code>string()</code> function: Support processing instruction node
* Support `"*:#{ELEMENT_NAME}"` syntax in XPath 2.0
* Support <code>"*:#{ELEMENT_NAME}"</code> syntax in XPath 2.0
* Fixed some XPath implementations:
[Fixed some XPath implementations]
* `"//#{ELEMENT_NAME}[#{POSITION}]"` case
* <code>"//#{ELEMENT_NAME}[#{POSITION}]"</code> case
* `string()` function: Fix `function(document)` returns nodes that
are out of root elements.
* <code>string()</code> function: Fix <code>function(document)</code>
returns nodes that are out of root elements.
* `"/ #{ELEMENT_NAME} "` case
* <code>"/ #{ELEMENT_NAME} "</code> case
* `"/ #{ELEMENT_NAME} [ #{PREDICATE} ]"` case
* <code>"/ #{ELEMENT_NAME} [ #{PREDICATE} ]"</code> case
* `"/ #{AXIS}:: #{ELEMENT_NAME} "` case
* <code>"/ #{AXIS}::#{ELEMENT_NAME}"</code> case
* `"#{N}-#{M}"` case: One or more white spaces were required before
`"-"`
* <code>"#{N}-#{M}"</code> case: One or more white spaces were required
before <code>"-"</code>
* `"/child::node()"` case
* <code>"/child::node()"</code> case
* `"#{FUNCTION}()/#{PATH}"` case
* <code>"#{FUNCTION}()/#{PATH}"</code> case
* `"@#{ATTRIBUTE}/parent::"` case
* <code>"@#{ATTRIBUTE}/parent::"</code> case
* `"name(#{NODE_SET})"` case
* <code>"name(#{NODE_SET})"</code> case
* `RSS`
[RSS]
* New options:
[New options]
* `RSS::Parser.parse`: Accept options as `Hash`. `:validate`,
`:ignore_unknown_element`, `:parser_class` options are available.
* RSS::Parser.parse: Accept options as Hash. +:validate+ ,
+:ignore_unknown_element+ , +:parser_class+ options are available.
* `Set`
[Set]
* Aliased methods:
[Aliased methods]
* `Set#filter!` is a new alias for `Set#select!`. [Feature #13784]
* Set#filter! is a new alias for Set#select!. [Feature #13784]
* `URI`
[URI]
* New constant:
[New constant]
* Add `URI::File` to handle file URI scheme. [Feature #14035]
* Add URI::File to handle file URI scheme. [Feature #14035]
### Compatibility issues (excluding feature bug fixes)
=== Compatibility issues (excluding feature bug fixes)
* `File`
[File]
* `File.read`, `File.binread`, `File.write`, `File.binwrite`,
`File.foreach`, and `File.readlines` do not invoke external commands
even if the path starts with the pipe character `'|'`.
[Feature #14245]
* File.read, File.binread, File.write, File.binwrite, File.foreach, and
File.readlines do not invoke external commands even if the path starts
with the pipe character <code>'|'</code>. [Feature #14245]
* `Dir`
[Dir]
* `Dir.glob` with `'\0'`-separated pattern list will be deprecated, and
is now warned. [Feature #14643]
* Dir.glob with <code>'\0'</code>-separated pattern list will be deprecated,
and is now warned. [Feature #14643]
### Stdlib compatibility issues (excluding feature bug fixes)
=== Stdlib compatibility issues (excluding feature bug fixes)
### C API updates
=== C API updates
### Supported platform changes
=== Supported platform changes
### Implementation improvements
=== Implementation improvements
* Speedup `Proc#call` because we don't need to care about `$SAFE` any more.
[Feature #14318]
* Speedup Proc#call because we don't need to care about <code>$SAFE</code>
any more. [Feature #14318]
With `lc_fizzbuzz` benchmark which uses so many `Proc#call` we can
With +lc_fizzbuzz+ benchmark which uses so many Proc#call we can
measure x1.4 improvements. [Bug #10212]
* Speedup `block.call` where `block` is passed block parameter.
[Feature #14330]
* Speedup block.call where +block+ is passed block parameter. [Feature #14330]
Ruby 2.5 improves block passing performance. [Feature #14045]
Additionally, Ruby 2.6 improves the performance of passed block calling.
* Introduce an initial implementation of JIT (Just-in-time) compiler.
[Feature #14235] [experimental]
* `--enable=jit` option is added to enable JIT. `--jit-verbose=1` is good for
inspection. See `ruby --help` for others.
* Introduce an initial implementation of JIT (Just-in-time) compiler. [Feature #14235] [experimental]
* <tt>--enable=jit</tt> option is added to enable JIT. <tt>--jit-verbose=1</tt>
is good for inspection. See <tt>ruby --help</tt> for others.
* This JIT relies on C compiler used to build Ruby, on runtime. Only
gcc and clang are supported for the JIT for now, and MinGW support has
some issues.
@ -422,29 +400,28 @@ sufficient information, see the ChangeLog file or Redmine
* rb_waitpid reimplemented on Unix-like platforms to maintain
compatibility [Bug #14867]
* VM generator script renewal; makes the generated VM more optimized.
[GH-1779]
* VM generator script renewal; makes the generated VM more optimized. [GH-1779]
* Thread cache enabled for pthreads platforms (for `Thread.new` and
`Thread.start`). [Feature #14757]
* Thread cache enabled for pthreads platforms (for Thread.new and
Thread.start). [Feature #14757]
* timer thread is eliminated for platforms with POSIX timers [Misc #14937]
### Miscellaneous changes
=== Miscellaneous changes
* On macOS, shared libraries no longer include a full version number of ruby
in their names. This eliminates the burden of each teeny upgrade on the
platform that users need to rebuild every extension library.
* Before:
[Before]
* libruby.2.6.0.dylib
* libruby.2.6.dylib -> libruby.2.6.0.dylib
* libruby.dylib -> libruby.2.6.0.dylib
* After:
[After]
* libruby.2.6.dylib
* libruby.dylib -> libruby.2.6.dylib
### Misc
=== Misc
* Extracted misc/*.el files to https://github.com/ruby/elisp