aboutsummaryrefslogtreecommitdiffstats
path: root/NEWS
diff options
context:
space:
mode:
Diffstat (limited to 'NEWS')
-rw-r--r--NEWS489
1 files changed, 233 insertions, 256 deletions
diff --git a/NEWS b/NEWS
index 896facad50..c3539577ec 100644
--- a/NEWS
+++ b/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,443 +8,420 @@ 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
- block if given. [Feature #15143]
+ * 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].
- So, users should use this newly-introduced method instead of
- `Kernel#eval`.
+ This method returns the source location of binding, a 2-element
+ 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.
-* `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`.
+ * 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.
-* `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
- by the block if given. [Feature #15143]
+ * 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
- arguments. [Feature #15111]
+ * Hash#merge, merge!, and update now accept multiple
+ arguments. [Feature #15111]
- * `Hash#to_h` now maps keys and values to new keys and values
- by the block if given. [Feature #15143]
+ * 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
- error handling. [Feature #12732]
+ * 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
- on failure. [Feature #14386]
+ * 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
- create). [Misc #14907]
+ * 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
- set receiver and key in Ruby code. [Feature #14313]
+ * 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
- in Ruby code. [Feature #14313]
+ * 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 parses a given string and returns AST
+ nodes. [experimental]
- * `RubyVM::AST.parse_file` parses a given file and returns AST
- nodes. [experimental]
+ * RubyVM::AST.parse_file parses a given file and returns AST
+ nodes. [experimental]
-* `String`
+[String]
- * New features:
+ [New features]
- * `String#split` yields each substring to the block if given.
- [Feature #4780]
+ * String#split yields each substring to the block if given. [Feature #4780]
-* `Struct`
+[Struct]
- * Modified methods:
+ [Modified methods]
- * `Struct#to_h` now maps keys and values to new keys and values
- by the block if given. [Feature #15143]
+ * 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
- measure x1.4 improvements. [Bug #10212]
+ 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]
+ Ruby 2.5 improves block passing performance. [Feature #14045]
- Additionally, Ruby 2.6 improves the performance of passed block calling.
+ 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.
- * 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.
- * As of 2.6.0-preview1, we're just preparing infrastructure for JIT and
- very few optimizations are implemented. So it's not ready for
- benchmarking Ruby's JIT performance yet. It's known that current JIT
- enablement makes Rails application slower for now.
- * rb_waitpid reimplemented on Unix-like platforms to maintain
- compatibility [Bug #14867]
+* Introduce an initial implementation of JIT (Just-in-time) compiler. [Feature #14235] [experimental]
-* VM generator script renewal; makes the generated VM more optimized.
- [GH-1779]
+ * <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.
+ * As of 2.6.0-preview1, we're just preparing infrastructure for JIT and
+ very few optimizations are implemented. So it's not ready for
+ benchmarking Ruby's JIT performance yet. It's known that current JIT
+ enablement makes Rails application slower for now.
+ * rb_waitpid reimplemented on Unix-like platforms to maintain
+ compatibility [Bug #14867]
-* Thread cache enabled for pthreads platforms (for `Thread.new` and
- `Thread.start`). [Feature #14757]
+* 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]
* 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