2017-12-26 06:36:07 -05:00
|
|
|
# -*- rdoc -*-
|
|
|
|
|
|
|
|
= NEWS for Ruby 2.6.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.5.0 release
|
2017-12-28 15:09:24 -05:00
|
|
|
|
|
|
|
=== Language changes
|
|
|
|
|
|
|
|
* $SAFE is a process global state and we can set 0 again. [Feature #14250]
|
|
|
|
|
2018-01-24 01:32:46 -05:00
|
|
|
* refinements take place at block passing. [Feature #14223]
|
|
|
|
|
2018-04-27 16:25:49 -04:00
|
|
|
* `else` without `rescue` now causes a syntax error. [EXPERIMENTAL]
|
2018-03-22 20:40:08 -04:00
|
|
|
|
2018-04-09 20:41:47 -04:00
|
|
|
* constant names may start with a non-ASCII capital letter. [Feature #13770]
|
|
|
|
|
2018-04-19 11:23:34 -04:00
|
|
|
* An endless range is introduced. You can write a range that has no end, like `(0..)`.
|
|
|
|
The following shows typical use cases. [Feature #12912]
|
|
|
|
|
|
|
|
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) { }
|
|
|
|
|
2017-12-28 15:09:24 -05:00
|
|
|
=== Core classes updates (outstanding ones only)
|
|
|
|
|
2018-02-25 08:52:07 -05:00
|
|
|
* Array
|
|
|
|
|
|
|
|
* Aliased methods:
|
|
|
|
|
|
|
|
* Array#filter is a new alias for Array#select [Feature #13784]
|
|
|
|
* Array#filter! is a new alias for Array#select! [Feature #13784]
|
|
|
|
|
2018-02-21 12:06:23 -05:00
|
|
|
* Binding
|
|
|
|
|
2018-02-21 23:13:02 -05:00
|
|
|
* New methods:
|
|
|
|
|
|
|
|
* 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`.
|
2018-02-21 12:06:23 -05:00
|
|
|
|
2018-01-24 02:15:55 -05:00
|
|
|
* Dir
|
|
|
|
|
|
|
|
* New methods:
|
|
|
|
|
2018-02-21 23:55:58 -05:00
|
|
|
* added Dir#each_child and Dir#children instance methods. [Feature #13969]
|
2018-01-24 02:15:55 -05:00
|
|
|
|
2018-02-25 08:52:07 -05:00
|
|
|
* Enumerable
|
|
|
|
|
|
|
|
* Aliased methods:
|
|
|
|
|
|
|
|
* Enumerable#filter is a new alias for Enumerable#select [Feature #13784]
|
|
|
|
|
|
|
|
* Enumerator::Lazy
|
|
|
|
|
|
|
|
* Aliased methods:
|
|
|
|
|
|
|
|
* Enumerator::Lazy#filter is a new alias for Enumerator::Lazy#select [Feature #13784]
|
|
|
|
|
2018-03-22 04:26:23 -04:00
|
|
|
* Exception
|
|
|
|
|
|
|
|
* Exception#full_message takes :highlight and :order options [Bug #14324]
|
|
|
|
|
2018-02-25 08:52:07 -05:00
|
|
|
* Hash
|
|
|
|
|
|
|
|
* Aliased methods:
|
|
|
|
|
|
|
|
* Hash#filter is a new alias for Hash#select [Feature #13784]
|
|
|
|
* Hash#filter! is a new alias for Hash#select! [Feature #13784]
|
|
|
|
|
2018-01-24 09:31:40 -05:00
|
|
|
* Kernel
|
|
|
|
|
2018-03-15 08:01:08 -04:00
|
|
|
* Kernel.#Complex takes :exception option to specify the way of error handling [Feature #12732]
|
|
|
|
|
|
|
|
* Kernel.#Float takes :exception option to specify the way of error handling [Feature #12732]
|
|
|
|
|
|
|
|
* Kernel.#Integer takes :exception option to specify the way of error handling [Feature #12732]
|
|
|
|
|
|
|
|
* Kernel.#Rational takes :exception option to specify the way of error handling [Feature #12732]
|
|
|
|
|
2018-02-21 23:13:02 -05:00
|
|
|
* Kernel.#system takes :exception option to raise an exception on
|
|
|
|
failure. [Feature #14386]
|
2018-01-24 09:31:40 -05:00
|
|
|
|
2018-02-21 22:33:42 -05:00
|
|
|
* KeyError
|
|
|
|
|
|
|
|
* KeyError#initialize accepts :receiver and :key options to set receiver and key in Ruby code. [Feature #14313]
|
|
|
|
|
|
|
|
* NameError
|
|
|
|
|
|
|
|
* NameError#initialize accepts :receiver option to set receiver in Ruby code. [Feature #14313]
|
|
|
|
|
|
|
|
* NoMethodError
|
|
|
|
|
|
|
|
* NoMethodError#initialize accepts :receiver option to set receiver in Ruby code. [Feature #14313]
|
|
|
|
|
2017-12-28 15:09:24 -05:00
|
|
|
* Proc
|
|
|
|
|
|
|
|
* Proc#call doesn't change $SAFE any more. [Feature #14250]
|
|
|
|
|
2018-02-20 04:26:38 -05:00
|
|
|
* Random
|
|
|
|
|
|
|
|
* New methods:
|
|
|
|
|
|
|
|
* added Random.bytes. [Feature #4938]
|
|
|
|
|
2018-05-17 06:46:21 -04:00
|
|
|
* Range
|
|
|
|
|
|
|
|
* Range#=== now uses #cover? instead of #include? method. [Feature #14575]
|
|
|
|
|
2018-03-15 07:08:04 -04:00
|
|
|
* String
|
|
|
|
|
2018-04-27 16:25:49 -04:00
|
|
|
* String#split yields each substring to the block if given. [Feature #4780]
|
2018-03-15 07:08:04 -04:00
|
|
|
|
2017-12-28 15:09:24 -05:00
|
|
|
=== Stdlib updates (outstanding ones only)
|
|
|
|
|
2018-02-22 08:28:25 -05:00
|
|
|
* ERB
|
|
|
|
|
2018-02-28 07:12:20 -05:00
|
|
|
* Add :trim_mode and :eoutvar keyword arguments to ERB.new. Now non-keyword arguments other than first one
|
2018-02-28 09:31:17 -05:00
|
|
|
are softly deprecated and will be removed when Ruby 2.5 becomes EOL. [Feature #14256]
|
2018-02-28 07:12:20 -05:00
|
|
|
|
|
|
|
* erb command's -S option is deprecated, which will be removed in the next version.
|
2018-02-22 08:28:25 -05:00
|
|
|
|
2018-03-13 04:18:03 -04:00
|
|
|
* FileUtils
|
|
|
|
|
|
|
|
* New method:
|
|
|
|
|
|
|
|
* FileUtils#cp_lr [Feature #4189]
|
|
|
|
|
2018-01-11 14:37:25 -05:00
|
|
|
* Matrix
|
|
|
|
|
|
|
|
* New method:
|
|
|
|
|
|
|
|
* Matrix#antisymmetric?
|
|
|
|
|
2018-04-30 02:54:13 -04:00
|
|
|
* REXML
|
|
|
|
|
|
|
|
* Improved some XPath implementations:
|
|
|
|
|
|
|
|
* concat() function: Stringify all arguments before concatenating
|
|
|
|
|
|
|
|
* string() function: Support context node
|
|
|
|
|
|
|
|
* string() function: Support processing instruction node
|
|
|
|
|
|
|
|
* Support "*:#{ELEMENT_NAME}" syntax in XPath 2.0
|
|
|
|
|
|
|
|
* Fixed some XPath implementations:
|
|
|
|
|
|
|
|
* "//#{ELEMENT_NAME}[#{POSITION}]" case
|
|
|
|
|
|
|
|
* string() function: Fix function(document) returns nodes that are
|
|
|
|
out of root elements.
|
|
|
|
|
|
|
|
* "/ #{ELEMENT_NAME} " case
|
|
|
|
|
|
|
|
* "/ #{ELEMENT_NAME} [ #{PREDICATE} ]" case
|
|
|
|
|
|
|
|
* "/ #{AXIS}:: #{ELEMENT_NAME} " case
|
|
|
|
|
|
|
|
* "#{N}-#{M}" case: One ore more white spaces were required before "-"
|
|
|
|
|
|
|
|
* "/child::node()" case
|
|
|
|
|
|
|
|
* "#{FUNCTION}()/#{PATH}" case
|
|
|
|
|
|
|
|
* "@#{ATTRIBUTE}/parent::" case
|
|
|
|
|
|
|
|
* "name(#{NODE_SET})" case
|
|
|
|
|
2018-05-12 05:06:00 -04:00
|
|
|
* RSS
|
|
|
|
|
|
|
|
* RSS::Parser.parse: Accept options as Hash. :validate,
|
|
|
|
:ignore_unknown_element, :parser_class options are available.
|
|
|
|
|
2018-02-25 08:52:07 -05:00
|
|
|
* Set
|
|
|
|
|
|
|
|
* Aliased methods:
|
|
|
|
|
|
|
|
* Set#filter! is a new alias for Set#select! [Feature #13784]
|
|
|
|
|
2018-03-15 12:51:31 -04:00
|
|
|
* URI
|
|
|
|
|
|
|
|
* Add URI::File to handle file URI scheme [Feature #14035]
|
|
|
|
|
2017-12-28 15:09:24 -05:00
|
|
|
=== Compatibility issues (excluding feature bug fixes)
|
|
|
|
|
2018-03-20 05:09:49 -04:00
|
|
|
* 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]
|
|
|
|
|
2018-04-19 03:05:39 -04:00
|
|
|
* Dir
|
|
|
|
|
|
|
|
* Dir.glob with '\0'-separated pattern list will be deprecated, and
|
|
|
|
is now warned. [Feature #14643]
|
|
|
|
|
2017-12-28 15:09:24 -05:00
|
|
|
=== Stdlib compatibility issues (excluding feature bug fixes)
|
|
|
|
|
|
|
|
=== C API updates
|
|
|
|
|
|
|
|
=== Supported platform changes
|
|
|
|
|
|
|
|
=== Implementation improvements
|
|
|
|
|
2018-02-22 00:06:46 -05:00
|
|
|
* Speedup `Proc#call` because we don't need to care about `$SAFE` any more. [Feature #14318]
|
2018-02-21 03:14:51 -05:00
|
|
|
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]
|
|
|
|
Ruby 2.5 improves block passing performance. [Feature #14045]
|
|
|
|
Additionally, Ruby 2.6 improves the performance of passed block calling.
|
|
|
|
|
2018-02-23 20:05:20 -05:00
|
|
|
* Introduce an initial implementation of JIT (Just-in-time) compiler. [Feature #14235] [experimental]
|
|
|
|
* `--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.
|
2018-02-11 00:32:17 -05:00
|
|
|
|
2018-02-16 03:51:23 -05:00
|
|
|
* VM generator script renewal; makes the generated VM more optimized. [GH-1779]
|
|
|
|
|
2018-05-30 07:49:06 -04:00
|
|
|
* Thread cache enabled for pthreads platforms
|
|
|
|
(for `Thread.new` and `Thread.start`) [Feature #14757]
|
2018-05-28 21:18:06 -04:00
|
|
|
|
2017-12-28 15:09:24 -05:00
|
|
|
=== Miscellaneous changes
|
2018-04-29 07:15:41 -04:00
|
|
|
|
|
|
|
* 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:
|
|
|
|
* libruby.2.6.0.dylib
|
|
|
|
* libruby.2.6.dylib -> libruby.2.6.0.dylib
|
|
|
|
* libruby.dylib -> libruby.2.6.0.dylib
|
|
|
|
|
|
|
|
* After:
|
|
|
|
* libruby.2.6.dylib
|
|
|
|
* libruby.dylib -> libruby.2.6.dylib
|