diff options
Diffstat (limited to 'NEWS.md')
-rw-r--r-- | NEWS.md | 217 |
1 files changed, 105 insertions, 112 deletions
@@ -1,150 +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]] +* 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 - def foo(*) - bar(*) - end - def baz(**) - quux(**) - end - ``` +* `it` is added to reference a block parameter. [[Feature #18980]] -* Constant assignment evaluation order for constants set on explicit - objects has been made consistent with single attribute assignment - evaluation order. With this code: +* 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 - foo::BAR = baz - ``` +* Block passing is no longer allowed in index. [[Bug #19918]] - `foo` is now called before `baz`. Similarly, for multiple assignment - 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]] - -## 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]] +* Exception -* Module - * Module.used_refinements has been added. [[Feature #14332]] - * Module#refinements has been added. [[Feature #12737]] - * Module#const_added has been added. [[Feature #17881]] + * Exception#set_backtrace now accepts arrays of `Thread::Backtrace::Location`. + `Kernel#raise`, `Thread#raise` and `Fiber#raise` also accept this new format. [[Feature #13557]] -* Proc - * Proc#dup returns an instance of subclass. [[Bug #17545]] +* Range -* Refinement - * Refinement#refined_class has been added. [[Feature #12737]] + * Range#size now raises TypeError if the range is not iterable. [[Misc #18984]] ## Stdlib updates -* The following default gem are updated. - * RubyGems 3.4.0.dev - * bundler 2.4.0.dev - * etc 1.4.0 - * io-console 0.5.11 - * reline 0.3.1 -* The following bundled gems are updated. - * net-imap 0.2.3 - * typeprof 0.21.2 -* The following default gems are now bundled gems. +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.3 +* 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 -Note: Excluding feature bug fixes. - -### Removed constants +* 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>' -The following deprecated constants are removed. - -* `Random::DEFAULT` [[Feature #17351]] -* `Struct::Group` -* `Struct::Passwd` - -### Removed methods - -The following deprecated methods are removed. - -* `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 ## 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 -## JIT - -### MJIT - -### YJIT: New experimental in-process JIT compiler - -## Static analysis +* `Array#each` is rewritten in Ruby for better performance [[Feature #20182]]. -### RBS - -### TypeProf - -## Debugger - -## error_highlight - -## IRB Autocomplete and Document Display +## JIT ## Miscellaneous changes -[Feature #12737]: https://bugs.ruby-lang.org/issues/12737 -[Feature #14332]: https://bugs.ruby-lang.org/issues/14332 -[Feature #15231]: https://bugs.ruby-lang.org/issues/15231 -[Bug #15928]: https://bugs.ruby-lang.org/issues/15928 -[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 -[Bug #16908]: https://bugs.ruby-lang.org/issues/16908 -[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 #18351]: https://bugs.ruby-lang.org/issues/18351 +* 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 |