ruby-changes:70595
From: Kazuhiro <ko1@a...>
Date: Sat, 25 Dec 2021 23:12:28 +0900 (JST)
Subject: [ruby-changes:70595] 53b3c044fc (master): Copy NEWS.md to doc/NEWS-3.1.0.md and update for 3.2.0
https://git.ruby-lang.org/ruby.git/commit/?id=53b3c044fc From 53b3c044fc6de4e2224f8601dec583ef93d3a20a Mon Sep 17 00:00:00 2001 From: Kazuhiro NISHIYAMA <zn@m...> Date: Sat, 25 Dec 2021 23:11:13 +0900 Subject: Copy NEWS.md to doc/NEWS-3.1.0.md and update for 3.2.0 --- NEWS.md | 542 +------------------------------------------- doc/NEWS-3.1.0.md | 657 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 659 insertions(+), 540 deletions(-) create mode 100644 doc/NEWS-3.1.0.md diff --git a/NEWS.md b/NEWS.md index d5a14175e3c..02fda3cbf99 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,326 +1,18 @@ https://github.com/ruby/ruby/blob/trunk/NEWS.md#L1 -# NEWS for Ruby 3.1.0 +# NEWS for Ruby 3.2.0 This document is a list of user-visible feature changes -since the **3.0.0** release, except for bug fixes. +since the **3.1.0** release, except for bug fixes. Note that each entry is kept to a minimum, see links for details. ## Language changes -* The block argument can now be anonymous if the block will - only be passed to another method. [[Feature #11256]] - - ```ruby - def foo(&) - bar(&) - end - ``` - -* Pin operator now takes an expression. [[Feature #17411]] - - ```ruby - Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a - #=> [[3, 5], [5, 7], [11, 13]] - ``` - -* Pin operator now supports instance, class, and global variables. - [[Feature #17724]] - - ```ruby - @n = 5 - Prime.each_cons(2).lazy.find{_1 in [n, ^@n]} - #=> [3, 5] - ``` - -* One-line pattern matching is no longer experimental. - -* Parentheses can be omitted in one-line pattern matching. - [[Feature #16182]] - - ```ruby - [0, 1] => _, x - {y: 2} => y: - x #=> 1 - y #=> 2 - ``` - -* Multiple assignment evaluation order has been made consistent with - single assignment evaluation order. With single assignment, Ruby - uses a left-to-right evaluation order. With this code: - - ```ruby - foo[0] = bar - ``` - - The following evaluation order is used: - - 1. `foo` - 2. `bar` - 3. `[]=` called on the result of `foo` - - In Ruby before 3.1.0, multiple assignment did not follow this - evaluation order. With this code: - - ```ruby - foo[0], bar.baz = a, b - ``` - - Versions of Ruby before 3.1.0 would evaluate in the following - order - - 1. `a` - 2. `b` - 3. `foo` - 4. `[]=` called on the result of `foo` - 5. `bar` - 6. `baz=` called on the result of `bar` - - Starting in Ruby 3.1.0, the evaluation order is now consistent with - single assignment, with the left-hand side being evaluated before - the right-hand side: - - 1. `foo` - 2. `bar` - 3. `a` - 4. `b` - 5. `[]=` called on the result of `foo` - 6. `baz=` called on the result of `bar` - - [[Bug #4443]] - -* Values in Hash literals and keyword arguments can be omitted. - [[Feature #14579]] - - For example, - - * `{x:, y:}` is a syntax sugar of `{x: x, y: y}`. - * `foo(x:, y:)` is a syntax sugar of `foo(x: x, y: y)`. - - Constant names, local variable names, and method names are allowed as - key names. Note that a reserved word is considered as a local - variable or method name even if it's a pseudo variable name such as - `self`. - -* Non main-Ractors can get instance variables (ivars) of classes/modules - if ivars refer to shareable objects. - [[Feature #17592]] - -* A command syntax is allowed in endless method definitions, i.e., - you can now write `def foo = puts "Hello"`. - Note that `private def foo = puts "Hello"` does not parse. - [[Feature #17398]] - ## Command line options -* `--disable-gems` is now explicitly declared as "just for debugging". - Never use it in any real-world codebase. - [[Feature #17684]] - ## Core classes updates Note: We're only listing outstanding class updates. -* Array - - * Array#intersect? is added. [[Feature #15198]] - -* Class - - * Class#subclasses, which returns an array of classes - directly inheriting from the receiver, not - including singleton classes. - [[Feature #18273]] - - ```ruby - class A; end - class B < A; end - class C < B; end - class D < A; end - A.subclasses #=> [D, B] - B.subclasses #=> [C] - C.subclasses #=> [] - ``` - -* Enumerable - - * Enumerable#compact is added. [[Feature #17312]] - - * Enumerable#tally now accepts an optional hash to count. [[Feature #17744]] - - * Enumerable#each_cons and each_slice to return a receiver. [[GH-1509]] - - ```ruby - [1, 2, 3].each_cons(2){} - # 3.0 => nil - # 3.1 => [1, 2, 3] - - [1, 2, 3].each_slice(2){} - # 3.0 => nil - # 3.1 => [1, 2, 3] - ``` - -* Enumerator::Lazy - - * Enumerator::Lazy#compact is added. [[Feature #17312]] - -* File - - * File.dirname now accepts an optional argument for the level to - strip path components. [[Feature #12194]] - -* GC - - * "GC.measure_total_time = true" enables the measurement of GC. - Measurement can introduce overhead. It is enabled by default. - GC.measure_total_time returns the current setting. - GC.stat[:time] or GC.stat(:time) returns measured time - in milli-seconds. [[[Feature #10917]]] - - * GC.total_time returns measured time in nano-seconds. [[[Feature #10917]]] - -* Integer - - * Integer.try_convert is added. [[Feature #15211]] - -* Kernel - - - * Kernel#load now accepts a module as the second argument, - and will load the file using the given module as the - top-level module. [[Feature #6210]] - -* Marshal - - * Marshal.load now accepts a `freeze: true` option. - All returned objects are frozen except for `Class` and - `Module` instances. Strings are deduplicated. [[Feature #18148]] - -* MatchData - - * MatchData#match is added [[Feature #18172]] - - * MatchData#match_length is added [[Feature #18172]] - -* Method / UnboundMethod - - * Method#public?, Method#private?, Method#protected?, - UnboundMethod#public?, UnboundMethod#private?, - UnboundMethod#protected? have been added. [[Feature #11689]] - -* Module - - * Module#prepend now modifies the ancestor chain if the receiver - already includes the argument. Module#prepend still does not - modify the ancestor chain if the receiver has already prepended - the argument. [[Bug #17423]] - - * Module#private, #public, #protected, and #module_function will - now return their arguments. If a single argument is given, it - is returned. If no arguments are given, nil is returned. If - multiple arguments are given, they are returned as an array. - [[Feature #12495]] - -* Process - - * Process.\_fork is added. This is a core method for fork(2). - Do not call this method directly; it is called by existing - fork methods: Kernel.#fork, Process.fork, and IO.popen("-"). - Application monitoring libraries can overwrite this method to - hook fork events. [[Feature #17795]] - -* Struct - - * Passing only keyword arguments to Struct#initialize is warned. - You need to use a Hash literal to set a Hash to a first member. - [[Feature #16806]] - - * StructClass#keyword_init? is added [[Feature #18008]] - -* String - - * Update Unicode version to 13.0.0 [[Feature #17750]] - and Emoji version to 13.0 [[Feature #18029]] - - * String#unpack and String#unpack1 now accept an `offset:` keyword - argument to start the unpacking after an arbitrary number of bytes - have been skipped. If `offset` is outside of the string bounds - `ArgumentError` is raised. [[Feature #18254]] - -* Thread - - * Thread#native_thread_id is added. [[Feature #17853]] - -* Thread::Backtrace - - * Thread::Backtrace.limit, which returns the value to limit backtrace - length set by `--backtrace-limit` command line option, is added. - [[Feature #17479]] - -* Thread::Queue - - * Thread::Queue.new now accepts an Enumerable of initial values. - [[Feature #17327]] - -* Time - - * Time.new now accepts optional `in:` keyword argument for the - timezone, as well as `Time.at` and `Time.now`, so that is now - you can omit minor arguments to `Time.new`. [[Feature #17485]] - - ```ruby - Time.new(2021, 12, 25, in: "+07:00") - #=> 2021-12-25 00:00:00 +0700 - ``` - - At the same time, time component strings are converted to - integers more strictly now. - - ```ruby - Time.new(2021, 12, 25, "+07:30") - #=> invalid value for Integer(): "+07:30" (ArgumentError) - ``` - - Ruby 3.0 or earlier returned probably unexpected result - `2021-12-25 07:00:00`, not `2021-12-25 07:30:00` nor - `2021-12-25 00:00:00 +07:30`. - - * Time#strftime supports RFC 3339 UTC for unknown offset local - time, `-0000`, as `%-z`. [[Feature #17544]] - -* TracePoint - - * TracePoint.allow_reentry is added to allow reenter while TracePoint - callback. - [[Feature #15912]] - -* $LOAD_PATH - - * $LOAD_PATH.resolve_feature_path does not raise. [[Feature #16043]] - -* Fiber Scheduler - - * Add support for `Addrinfo.getaddrinfo` using `address_resolve` hook. - [[Feature #17370]] - - * Introduce non-blocking `Timeout.timeout` using `timeout_after` hook. - [[Feature #17470]] - - * Introduce new scheduler hooks `io_read` and `io_write` along with a - low level `IO::Buffer` for zero-copy read/write. [[Feature #18020]] - - * IO hooks `io_wait`, `io_read`, `io_write`, receive the original IO object - where possible. [[Bug #18003]] - - * Make `Monitor` fiber-safe. [[Bug #17827]] - - * Replace copy coroutine with (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/