diff options
Diffstat (limited to 'NEWS.md')
-rw-r--r-- | NEWS.md | 341 |
1 files changed, 106 insertions, 235 deletions
@@ -1,272 +1,143 @@ -# NEWS for Ruby 3.2.0 +# NEWS for Ruby 3.4.0 This document is a list of user-visible feature changes -since the **3.1.0** release, except for bug fixes. +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 -* Anonymous rest and keyword rest arguments can now be passed as - arguments, instead of just used in method parameters. - [[Feature #18351]] - - ```ruby - def foo(*) - bar(*) - end - def baz(**) - quux(**) - end - ``` - -* A proc that accepts a single positional argument and keywords will - no longer autosplat. [[Bug #18633]] - - ```ruby - proc{|a, **k| a}.call([1, 2]) - # Ruby 3.1 and before - # => 1 - # Ruby 3.2 and after - # => [1, 2] - ``` - -* Constant assignment evaluation order for constants set on explicit - objects has been made consistent with single attribute assignment - evaluation order. With this code: - - ```ruby - foo::BAR = baz - ``` - - `foo` is now called before `baz`. Similarly, for multiple assignments - to constants, left-to-right evaluation order is used. With this - code: - - ```ruby - foo1::BAR1, foo2::BAR2 = baz1, baz2 - ``` - - The following evaluation order is now used: - - 1. `foo1` - 2. `foo2` - 3. `baz1` - 4. `baz2` - - [[Bug #15928]] +* 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]] -* Find pattern is no longer experimental. - [[Feature #18585]] +* `it` is added to reference a block parameter. [[Feature #18980]] -* Methods taking a rest parameter (like `*args`) and wishing to delegate keyword - arguments through `foo(*args)` must now be marked with `ruby2_keywords` - (if not already the case). In other words, all methods wishing to delegate - keyword arguments through `*args` must now be marked with `ruby2_keywords`, - with no exception. This will make it easier to transition to other ways of - delegation once a library can require Ruby 3+. Previously, the `ruby2_keywords` - flag was kept if the receiving method took `*args`, but this was a bug and an - inconsistency. A good technique to find the potentially-missing `ruby2_keywords` - is to run the test suite, for where it fails find the last method which must - receive keyword arguments, use `puts nil, caller, nil` there, and check each - method/block on the call chain which must delegate keywords is correctly marked - as `ruby2_keywords`. [[Bug #18625]] [[Bug #16466]] +* 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 - def target(**kw) - end +* Block passing is no longer allowed in index. [[Bug #19918]] - # Accidentally worked without ruby2_keywords in Ruby 2.7-3.1, ruby2_keywords - # needed in 3.2+. Just like (*args, **kwargs) or (...) would be needed on - # both #foo and #bar when migrating away from ruby2_keywords. - ruby2_keywords def bar(*args) - target(*args) - end - - ruby2_keywords def foo(*args) - bar(*args) - end - - foo(k: 1) - ``` - -## Command line options +* Keyword arguments are no longer allowed in index. [[Bug #20218]] ## Core classes updates Note: We're only listing outstanding class updates. -* Hash - * Hash#shift now always returns nil if the hash is - empty, instead of returning the default value or - calling the default proc. [[Bug #16908]] - -* Kernel - * Kernel#binding raises RuntimeError if called from a non-Ruby frame - (such as a method defined in C). [[Bug #18487]] - -* MatchData - * MatchData#byteoffset has been added. [[Feature #13110]] - -* Module - * Module.used_refinements has been added. [[Feature #14332]] - * Module#refinements has been added. [[Feature #12737]] - * Module#const_added has been added. [[Feature #17881]] - * Module#undefined_instance_methods has been added. [[Feature #12655]] - -* Proc - * Proc#dup returns an instance of subclass. [[Bug #17545]] - * Proc#parameters now accepts lambda keyword. [[Feature #15357]] - -* Regexp - * Regexp.new now supports passing the regexp flags not only as an Integer, - but also as a String Unknown flags raise errors. Otherwise, anything - other than `true`, `false`, `nil` or Integer will be warned. - [[Feature #18788]] - -* Refinement - * Refinement#refined_class has been added. [[Feature #12737]] - -* Set - * Set is now available as a built-in class without the need for `require "set"`. [[Feature #16989]] - It is currently autoloaded via the `Set` constant or a call to `Enumerable#to_set`. - -* String - * String#byteindex and String#byterindex have been added. [[Feature #13110]] - * Update Unicode to Version 14.0.0 and Emoji Version 14.0. [[Feature #18037]] - (also applies to Regexp) - * String#bytesplice has been added. [[Feature #18598]] - -* Struct - * A Struct class can also be initialized with keyword arguments - without `keyword_init: true` on `Struct.new` [[Feature #16806]] - -* TracePoint - * TracePoint#binding now returns `nil` for `c_call`/`c_return` TracePoints. - [[Bug #18487]] - * TracePoint#enable `target_thread` keyword argument now defaults to the - current thread if `target` and `target_line` keyword arguments are not - passed. [[Bug #16889]] +* Exception -## Stdlib updates - -* The following default gems are updated. - * RubyGems 3.4.0.dev - * bigdecimal 3.1.2 - * bundler 2.4.0.dev - * cgi 0.3.2 - * etc 1.4.0 - * io-console 0.5.11 - * io-nonblock 0.1.1 - * io-wait 0.3.0.pre - * ipaddr 1.2.4 - * json 2.6.2 - * logger 1.5.1 - * net-http 0.2.2 - * net-protocol 0.1.3 - * ostruct 0.5.5 - * psych 5.0.0.dev - * reline 0.3.1 - * securerandom 0.2.0 - * stringio 3.0.3 - * timeout 0.3.0 -* The following bundled gems are updated. - * minitest 5.16.1 - * net-imap 0.2.3 - * rbs 2.5.1 - * typeprof 0.21.2 - * debug 1.5.0 -* The following default gems are now bundled gems. - -## Compatibility issues + * Exception#set_backtrace now accepts arrays of `Thread::Backtrace::Location`. + `Kernel#raise`, `Thread#raise` and `Fiber#raise` also accept this new format. [[Feature #13557]] -Note: Excluding feature bug fixes. +* Range -### Removed constants + * Range#size now raises TypeError if the range is not iterable. [[Misc #18984]] -The following deprecated constants are removed. +## Stdlib updates -* `Fixnum` and `Bignum` [[Feature #12005]] -* `Random::DEFAULT` [[Feature #17351]] -* `Struct::Group` -* `Struct::Passwd` +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.26.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 -### Removed methods +## Compatibility issues -The following deprecated methods are removed. +* 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>' -* `Dir.exists?` [[Feature #17391]] -* `File.exists?` [[Feature #17391]] -* `Kernel#=~` [[Feature #15231]] -* `Kernel#taint`, `Kernel#untaint`, `Kernel#tainted?` - [[Feature #16131]] -* `Kernel#trust`, `Kernel#untrust`, `Kernel#untrusted?` - [[Feature #16131]] + New: + test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer + from test.rb:2:in `<main>' + ``` ## Stdlib compatibility issues -* `Psych` no longer bundles libyaml sources. - Users need to install the libyaml library themselves via the package - system. [[Feature #18571]] - ## C API updates -### Removed C APIs - -The following deprecated APIs are removed. - -* `rb_cData` variable. -* "taintedness" and "trustedness" functions. [[Feature #16131]] +* `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 -* Fixed several race conditions in `Kernel#autoload`. [[Bug #18782]] +* `Array#each` is rewritten in Ruby for better performance [[Feature #20182]]. ## JIT -### MJIT - -### YJIT: New experimental in-process JIT compiler - -## Static analysis - -### RBS - -### TypeProf - -## Debugger - -## error_highlight - -## IRB Autocomplete and Document Display - ## Miscellaneous changes -[Feature #12005]: https://bugs.ruby-lang.org/issues/12005 -[Feature #12655]: https://bugs.ruby-lang.org/issues/12655 -[Feature #12737]: https://bugs.ruby-lang.org/issues/12737 -[Feature #13110]: https://bugs.ruby-lang.org/issues/13110 -[Feature #14332]: https://bugs.ruby-lang.org/issues/14332 -[Feature #15231]: https://bugs.ruby-lang.org/issues/15231 -[Feature #15357]: https://bugs.ruby-lang.org/issues/15357 -[Bug #15928]: https://bugs.ruby-lang.org/issues/15928 -[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 -[Bug #16466]: https://bugs.ruby-lang.org/issues/16466 -[Feature #16806]: https://bugs.ruby-lang.org/issues/16806 -[Bug #16889]: https://bugs.ruby-lang.org/issues/16889 -[Bug #16908]: https://bugs.ruby-lang.org/issues/16908 -[Feature #16989]: https://bugs.ruby-lang.org/issues/16989 -[Feature #17351]: https://bugs.ruby-lang.org/issues/17351 -[Feature #17391]: https://bugs.ruby-lang.org/issues/17391 -[Bug #17545]: https://bugs.ruby-lang.org/issues/17545 -[Feature #17881]: https://bugs.ruby-lang.org/issues/17881 -[Feature #18037]: https://bugs.ruby-lang.org/issues/18037 -[Feature #18351]: https://bugs.ruby-lang.org/issues/18351 -[Bug #18487]: https://bugs.ruby-lang.org/issues/18487 -[Feature #18571]: https://bugs.ruby-lang.org/issues/18571 -[Feature #18585]: https://bugs.ruby-lang.org/issues/18585 -[Feature #18598]: https://bugs.ruby-lang.org/issues/18598 -[Bug #18625]: https://bugs.ruby-lang.org/issues/18625 -[Bug #18633]: https://bugs.ruby-lang.org/issues/18633 -[Bug #18782]: https://bugs.ruby-lang.org/issues/18782 -[Feature #18788]: https://bugs.ruby-lang.org/issues/18788 +* 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 |