diff options
Diffstat (limited to 'NEWS.md')
-rw-r--r-- | NEWS.md | 330 |
1 files changed, 107 insertions, 223 deletions
@@ -1,259 +1,143 @@ -# NEWS for Ruby 3.1.0 +# NEWS for Ruby 3.4.0 -This document is a list of user visible feature changes -since the **3.0.0** release, except for bug fixes. +This document is a list of user-visible feature changes +since the **3.3.0** release, except for bug fixes. Note that each entry is kept to a minimum, see links for details. ## Language changes -* Pin operator now takes an expression. [[Feature #17411]] +* String literals in files without a `frozen_string_literal` comment now behave + as if they were frozen. If they are mutated a deprecation warning is emitted. + These warnings can be enabled with `-W:deprecated` or by setting `Warning[:deprecated] = true`. + To disable this change, you can run Ruby with the `--disable-frozen-string-literal` + command line argument. [[Feature #20205]] - ```ruby - Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a - #=> [[3, 5], [5, 7], [11, 13]] - ``` +* `it` is added to reference a block parameter. [[Feature #18980]] -* Pin operator now supports instance, class, and global variables. - [[Feature #17724]] +* Keyword splatting `nil` when calling methods is now supported. + `**nil` is treated similarly to `**{}`, passing no keywords, + and not calling any conversion methods. [[Bug #20064]] - ```ruby - @n = 5 - Prime.each_cons(2).lazy.find{_1 in [n, ^@n]} - #=> [3, 5] - ``` +* Block passing is no longer allowed in index. [[Bug #19918]] -* One-line pattern matching is no longer experimental. - -* 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, 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`. - -## Command line options +* Keyword arguments are no longer allowed in index. [[Bug #20218]] ## Core classes updates -Outstanding ones only. - -* Array - - * Array#intersect? is added. [[Feature #15198]] - -* Enumerable - - * Enumerable#compact is added. [[Feature #17312]] - - * Enumerable#tally now accepts an optional hash to count. [[Feature #17744]] - -* 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]] - -* Integer - - * Integer.try_convert is added. [[Feature #15211]] - -* MatchData +Note: We're only listing outstanding class updates. - * MatchData#match is added [[Feature #18172]] +* Exception - * MatchData#match_length is added [[Feature #18172]] + * Exception#set_backtrace now accepts arrays of `Thread::Backtrace::Location`. + `Kernel#raise`, `Thread#raise` and `Fiber#raise` also accept this new format. [[Feature #13557]] -* Module +* Range - * 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]] - -* 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]] - -* Queue - - * Queue#initialize now accepts an Enumerable of initial values. - [[Feature #17327]] - -* 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]] - -* $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]] - - * 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 pthread implementation. [[Feature #18015]] + * Range#size now raises TypeError if the range is not iterable. [[Misc #18984]] ## Stdlib updates -Outstanding ones only. +The following default gems are updated. + +* RubyGems 3.6.0.dev +* bundler 2.6.0.dev +* erb 4.0.4 +* fiddle 1.1.3 +* io-console 0.7.2 +* irb 1.12.0 +* json 2.7.2 +* net-http 0.4.1 +* optparse 0.5.0 +* prism 0.25.0 +* rdoc 6.6.3.1 +* reline 0.5.2 +* resolv 0.4.0 +* stringio 3.1.1 +* strscan 3.1.1 + +The following bundled gems are updated. + +* minitest 5.22.3 +* rake 13.2.1 +* test-unit 3.6.2 +* net-ftp 0.3.4 +* net-imap 0.4.10 +* net-smtp 0.5.0 +* rbs 3.4.4 +* typeprof 0.21.11 +* debug 1.9.2 + +The following bundled gems are promoted from default gems. + +* mutex_m 0.2.0 +* getoptlong 0.2.1 +* base64 0.2.0 +* bigdecimal 3.1.7 +* observer 0.1.2 +* abbrev 0.1.2 +* resolv-replace 0.1.1 +* rinda 0.2.0 +* drb 2.2.1 +* nkf 0.2.0 +* syslog 0.1.2 +* csv 3.3.0 + +See GitHub releases like [GitHub Releases of Logger](https://github.com/ruby/logger/releases) or changelog for details of the default gems or bundled gems. + +## Supported platforms ## Compatibility issues -Excluding feature bug fixes. +* Error messages and backtrace displays have been changed. + * Use a single quote instead of a backtick as a opening quote. [[Feature #16495]] + * Display a class name before a method name (only when the class has a permanent name). [[Feature #19117]] + * `Kernel#caller`, `Thread::Backtrace::Location`'s methods, etc. are also changed accordingly. + ``` + Old: + test.rb:1:in `foo': undefined method `time' for an instance of Integer + from test.rb:2:in `<main>' -* `rb_io_wait_readable`, `rb_io_wait_writable` and `rb_wait_for_single_fd` are - deprecated in favour of `rb_io_maybe_wait_readable`, - `rb_io_maybe_wait_writable` and `rb_io_maybe_wait` respectively. - `rb_thread_wait_fd` and `rb_thread_fd_writable` are deprecated. [[Bug #18003]] + New: + test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer + from test.rb:2:in `<main>' + ``` ## Stdlib compatibility issues -* `ERB#initialize` warns `safe_level` and later arguments even without -w. - [[Feature #14256]] - ## C API updates -* Documented. [[GH-4815]] +* `rb_newobj` and `rb_newobj_of` (and corresponding macros `RB_NEWOBJ`, `RB_NEWOBJ_OF`, `NEWOBJ`, `NEWOBJ_OF`) have been removed. [[Feature #20265]] +* Removed deprecated function `rb_gc_force_recycle`. [[Feature #18290]] ## Implementation improvements -### JIT - -* The default `--jit-max-cache` is changed from 100 to 10000. - -* JIT-ed code is no longer cancelled when a TracePoint for class events - is enabled. - -* The JIT compiler no longer skips compilation of methods longer than - 1000 instructions. - -* `--jit-verbose` and `--jit-warning` output "JIT cancel" when JIT-ed - code is disabled because TracePoint or GC.compact is used. - -* `RubyVM::MJIT` is renamed to `RubyVM::JIT`. [[Feature #17490]] - -## Static analysis - -### RBS +* `Array#each` is rewritten in Ruby for better performance [[Feature #20182]]. -### TypeProf +## JIT ## Miscellaneous changes -* lib/objspace/trace.rb is added, which is a tool for tracing the object - allocation. Just by requiring this file, tracing is started *immediately*. - Just by `Kernel#p`, you can investigate where an object was created. - Note that just requiring this file brings a large performance overhead. - This is only for debugging purpose. Do not use this in production. - [[Feature #17762]] - -* Now exceptions raised in finalizers will be printed to `STDERR`, unless - `$VERBOSE` is `nil`. [[Feature #17798]] - -[Bug #4443]: https://bugs.ruby-lang.org/issues/4443 -[Feature #12194]: https://bugs.ruby-lang.org/issues/12194 -[Feature #14256]: https://bugs.ruby-lang.org/issues/14256 -[Feature #14579]: https://bugs.ruby-lang.org/issues/14579 -[Feature #15198]: https://bugs.ruby-lang.org/issues/15198 -[Feature #15211]: https://bugs.ruby-lang.org/issues/15211 -[Feature #16043]: https://bugs.ruby-lang.org/issues/16043 -[Feature #16806]: https://bugs.ruby-lang.org/issues/16806 -[Feature #17312]: https://bugs.ruby-lang.org/issues/17312 -[Feature #17327]: https://bugs.ruby-lang.org/issues/17327 -[Feature #17411]: https://bugs.ruby-lang.org/issues/17411 -[Bug #17423]: https://bugs.ruby-lang.org/issues/17423 -[Feature #17479]: https://bugs.ruby-lang.org/issues/17479 -[Feature #17490]: https://bugs.ruby-lang.org/issues/17490 -[Feature #17724]: https://bugs.ruby-lang.org/issues/17724 -[Feature #17744]: https://bugs.ruby-lang.org/issues/17744 -[Feature #17762]: https://bugs.ruby-lang.org/issues/17762 -[Feature #17798]: https://bugs.ruby-lang.org/issues/17798 -[Bug #18003]: https://bugs.ruby-lang.org/issues/18003 -[Feature #17370]: https://bugs.ruby-lang.org/issues/17370 -[Feature #17470]: https://bugs.ruby-lang.org/issues/17470 -[Feature #17750]: https://bugs.ruby-lang.org/issues/17750 -[Feature #17853]: https://bugs.ruby-lang.org/issues/17853 -[Bug #17827]: https://bugs.ruby-lang.org/issues/17827 -[Feature #18008]: https://bugs.ruby-lang.org/issues/18008 -[Feature #18015]: https://bugs.ruby-lang.org/issues/18015 -[Feature #18029]: https://bugs.ruby-lang.org/issues/18029 -[Feature #18172]: https://bugs.ruby-lang.org/issues/18172 -[GH-4815]: https://github.com/ruby/ruby/pull/4815 +* Passing a block to a method which doesn't use the passed block will show + a warning on verbose mode (`-w`). + [[Feature #15554]] + +* Redefining some core methods that are specially optimized by the interpeter + and JIT like `String.freeze` or `Integer#+` now emits a performance class + warning (`-W:performance` or `Warning[:performance] = true`). + [[Feature #20429]] + +[Feature #13557]: https://bugs.ruby-lang.org/issues/13557 +[Feature #15554]: https://bugs.ruby-lang.org/issues/15554 +[Feature #16495]: https://bugs.ruby-lang.org/issues/16495 +[Feature #18290]: https://bugs.ruby-lang.org/issues/18290 +[Feature #18980]: https://bugs.ruby-lang.org/issues/18980 +[Misc #18984]: https://bugs.ruby-lang.org/issues/18984 +[Feature #19117]: https://bugs.ruby-lang.org/issues/19117 +[Bug #19918]: https://bugs.ruby-lang.org/issues/19918 +[Bug #20064]: https://bugs.ruby-lang.org/issues/20064 +[Feature #20182]: https://bugs.ruby-lang.org/issues/20182 +[Feature #20205]: https://bugs.ruby-lang.org/issues/20205 +[Bug #20218]: https://bugs.ruby-lang.org/issues/20218 +[Feature #20265]: https://bugs.ruby-lang.org/issues/20265 +[Feature #20429]: https://bugs.ruby-lang.org/issues/20429 |