[前][次][番号順一覧][スレッド一覧]

ruby-changes:59574

From: Kazuhiro <ko1@a...>
Date: Tue, 31 Dec 2019 22:34:17 +0900 (JST)
Subject: [ruby-changes:59574] 3096baec0e (master): Copy NEWS to doc/NEWS-2.7.0

https://git.ruby-lang.org/ruby.git/commit/?id=3096baec0e

From 3096baec0e4c24e325885f7dcd4956e8c0421f73 Mon Sep 17 00:00:00 2001
From: Kazuhiro NISHIYAMA <zn@m...>
Date: Tue, 31 Dec 2019 18:16:21 +0900
Subject: Copy NEWS to doc/NEWS-2.7.0


diff --git a/doc/NEWS-2.7.0 b/doc/NEWS-2.7.0
new file mode 100644
index 0000000..4ff6cf0
--- /dev/null
+++ b/doc/NEWS-2.7.0
@@ -0,0 +1,828 @@ https://github.com/ruby/ruby/blob/trunk/doc/NEWS-2.7.0#L1
+# -*- rdoc -*-
+
+= NEWS for Ruby 2.7.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.6.0 release
+
+=== Language changes
+
+==== Pattern matching
+
+* Pattern matching is introduced as an experimental feature. [Feature #14912]
+
+    case [0, [1, 2, 3]]
+    in [a, [b, *c]]
+      p a #=> 0
+      p b #=> 1
+      p c #=> [2, 3]
+    end
+
+    case {a: 0, b: 1}
+    in {a: 0, x: 1}
+      :unreachable
+    in {a: 0, b: var}
+      p var #=> 1
+    end
+
+    case -1
+    in 0 then :unreachable
+    in 1 then :unreachable
+    end #=> NoMatchingPatternError
+
+    json = <<END
+    {
+      "name": "Alice",
+      "age": 30,
+      "children": [{ "name": "Bob", "age": 2 }]
+    }
+    END
+
+    JSON.parse(json, symbolize_names: true) in {name: "Alice", children: [{name: name, age: age}]}
+
+    p name #=> "Bob"
+    p age  #=> 2
+
+    JSON.parse(json, symbolize_names: true) in {name: "Alice", children: [{name: "Charlie", age: age}]}
+    #=> NoMatchingPatternError
+
+* See the following slides for more details:
+  * https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7
+  * Note that the slides are slightly obsolete.
+
+* The warning against pattern matching can be suppressed with
+  {-W:no-experimental option}[#label-Warning+option].
+
+==== The spec of keyword arguments is changed towards 3.0
+
+* Automatic conversion of keyword arguments and positional arguments is
+  deprecated, and conversion will be removed in Ruby 3.  [Feature #14183]
+
+  * When a method call passes a Hash at the last argument, and when it
+    passes no keywords, and when the called method accepts keywords,
+    a warning is emitted.  To continue treating the hash as keywords,
+    add a double splat operator to avoid the warning and ensure
+    correct behavior in Ruby 3.
+
+      def foo(key: 42); end; foo({key: 42})   # warned
+      def foo(**kw);    end; foo({key: 42})   # warned
+      def foo(key: 42); end; foo(**{key: 42}) # OK
+      def foo(**kw);    end; foo(**{key: 42}) # OK
+
+  * When a method call passes keywords to a method that accepts keywords,
+    but it does not pass enough required positional arguments, the
+    keywords are treated as a final required positional argument, and a
+    warning is emitted.  Pass the argument as a hash instead of keywords
+    to avoid the warning and ensure correct behavior in Ruby 3.
+
+      def foo(h, **kw); end; foo(key: 42)      # warned
+      def foo(h, key: 42); end; foo(key: 42)   # warned
+      def foo(h, **kw); end; foo({key: 42})    # OK
+      def foo(h, key: 42); end; foo({key: 42}) # OK
+
+  * When a method accepts specific keywords but not a keyword splat, and
+    a hash or keywords splat is passed to the method that includes both
+    Symbol and non-Symbol keys, the hash will continue to be split, and
+    a warning will be emitted.  You will need to update the calling code
+    to pass separate hashes to ensure correct behavior in Ruby 3.
+
+      def foo(h={}, key: 42); end; foo("key" => 43, key: 42)   # warned
+      def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned
+      def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
+
+  * If a method does not accept keywords, and is called with keywords,
+    the keywords are still treated as a positional hash, with no warning.
+    This behavior will continue to work in Ruby 3.
+
+      def foo(opt={});  end; foo( key: 42 )   # OK
+
+* Non-symbols are allowed as keyword argument keys if the method accepts
+  arbitrary keywords. [Feature #14183]
+
+  * Non-Symbol keys in a keyword arguments hash were prohibited in 2.6.0,
+    but are now allowed again.  [Bug #15658]
+
+      def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
+
+* <code>**nil</code> is allowed in method definitions to explicitly mark
+  that the method accepts no keywords. Calling such a method with keywords
+  will result in an ArgumentError. [Feature #14183]
+
+    def foo(h, **nil); end; foo(key: 1)       # ArgumentError
+    def foo(h, **nil); end; foo(**{key: 1})   # ArgumentError
+    def foo(h, **nil); end; foo("str" => 1)   # ArgumentError
+    def foo(h, **nil); end; foo({key: 1})     # OK
+    def foo(h, **nil); end; foo({"str" => 1}) # OK
+
+* Passing an empty keyword splat to a method that does not accept keywords
+  no longer passes an empty hash, unless the empty hash is necessary for
+  a required parameter, in which case a warning will be emitted.  Remove
+  the double splat to continue passing a positional hash.  [Feature #14183]
+
+    h = {}; def foo(*a) a end; foo(**h) # []
+    h = {}; def foo(a) a end; foo(**h)  # {} and warning
+    h = {}; def foo(*a) a end; foo(h)   # [{}]
+    h = {}; def foo(a) a end; foo(h)    # {}
+
+* Above warnings can be suppressed also with {-W:no-deprecated option}[#label-Warning+option].
+
+==== Numbered parameters
+
+* Numbered parameters as default block parameters are introduced.
+  [Feature #4475]
+
+    [1, 2, 10].map { _1.to_s(16) }    #=> ["1", "2", "a"]
+    [[1, 2], [3, 4]].map { _1 + _2 }  #=> [3, 7]
+
+  You can still define a local variable named +_1+ and so on,
+  and that is honored when present, but renders a warning.
+
+    _1 = 0            #=> warning: `_1' is reserved for numbered parameter; consider another name
+    [1].each { p _1 } # prints 0 instead of 1
+
+==== proc/lambda without block is deprecated
+
+* Proc.new and Kernel#proc with no block in a method called with a block will
+  now display a warning.
+
+    def foo
+      proc
+    end
+    foo { puts "Hello" } #=> warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead
+
+  This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].
+
+* Kernel#lambda with no block in a method called with a block raises an exception.
+
+    def bar
+      lambda
+    end
+    bar { puts "Hello" } #=> tried to create Proc object without a block (ArgumentError)
+
+==== Other miscellaneous changes
+
+* A beginless range is experimentally introduced.  It might be useful
+  in +case+, new call-sequence of the <code>Comparable#clamp</code>,
+  constants and DSLs.  [Feature #14799]
+
+     ary[..3]  # identical to ary[0..3]
+
+     case RUBY_VERSION
+     when ..."2.4" then puts "EOL"
+     # ...
+     end
+
+     age.clamp(..100)
+
+     where(sales: ..100)
+
+* Setting <code>$;</code> to a non-nil value will now display a warning. [Feature #14240]
+  This includes the usage in String#split.
+  This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].
+
+* Setting <code>$,</code> to a non-nil value will now display a warning. [Feature #14240]
+  This include the usage in Array#join.
+  This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].
+
+* Quoted here-document identifiers must end within the same line.
+
+     <<"EOS
+     " # This had been warned since 2.4; Now it raises a SyntaxError
+     EOS
+
+* The flip-flop syntax deprecation is reverted. [Feature #5400]
+
+* Comment lines can be placed between fluent dot now.
+
+    foo
+      # .bar
+      .baz # => foo.baz
+
+* Calling a private method with a literal +self+ as the receiver
+  is now allowed. [Feature #11297] [Feature #16123]
+
+* Modifier rescue now operates the same for multiple assignment as single
+  assignment. [Bug #8279]
+
+    a, b = raise rescue [1, 2]
+    # Previously parsed as: (a, b = raise) rescue [1, 2]
+    # Now parsed as:         a, b = (raise rescue [1, 2])
+
+* +yield+ in singleton class syntax will now display a warning. This behavior
+  will soon be deprecated. [Feature #15575].
+
+   def foo
+     class << Object.new
+       yield #=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [Feature #15575]
+     end
+   end
+   foo { p :ok }
+
+  This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].
+
+* Argument forwarding by <code>(...)</code> is introduced. [Feature #16253]
+
+    def foo(...)
+      bar(...)
+    end
+
+  All arguments to +foo+ are forwarded to +bar+, including keyword and
+  block arguments.
+  Note that the parentheses are mandatory.  <code>bar ...</code> is parsed
+  as an endless range.
+
+* Access and setting of <code>$SAFE</code> will now always display a warning.
+  <code>$SAFE</code> will become a normal global variable in Ruby 3.0.
+  [Feature #16131]
+
+* <code>Object#{taint,untaint,trust,untrust}</code> and related functions in the C-API
+  no longer have an effect (all objects are always considered untainted), and will now
+  display a warning in verbose mode. This warning will be disabled even in non-verbose mode in
+  Ruby 3.0, and the methods and C functions will be removed in Ruby 3.2. [Feature #16131]
+
+* Refinements take place at Object#method and Module#instance_method. [Feature #15373]
+
+=== Command line options
+
+==== Warning option
+
+The +-W+ option has been extended with a following +:+, to manage categorized
+warnings.  [Feature #16345] [Feature #16420]
+
+* To suppress deprecation warnings:
+
+    $ ruby -e '$; = ""'
+    -e:1: warning: `$;' is deprecated
+
+    $ ruby -W:no-deprecated -e '$; = //'
+
+* It works with the +RUBYOPT+ environment variable: (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]