2023-12-25 12:42:07 +03:00
|
|
|
|
# NEWS for Ruby 3.4.0
|
2020-01-15 06:42:47 +03:00
|
|
|
|
|
2021-12-15 19:24:31 +03:00
|
|
|
|
This document is a list of user-visible feature changes
|
2023-12-25 12:42:07 +03:00
|
|
|
|
since the **3.3.0** release, except for bug fixes.
|
2020-01-15 06:42:47 +03:00
|
|
|
|
|
2020-12-22 22:27:38 +03:00
|
|
|
|
Note that each entry is kept to a minimum, see links for details.
|
2020-01-15 06:42:47 +03:00
|
|
|
|
|
2023-12-25 12:42:07 +03:00
|
|
|
|
## Language changes
|
2023-11-30 09:53:06 +03:00
|
|
|
|
|
2024-05-27 12:22:39 +03:00
|
|
|
|
* String literals in files without a `frozen_string_literal` comment now emit a deprecation warning
|
|
|
|
|
when they are mutated.
|
2023-12-01 13:33:00 +03:00
|
|
|
|
These warnings can be enabled with `-W:deprecated` or by setting `Warning[:deprecated] = true`.
|
2024-03-26 10:35:02 +03:00
|
|
|
|
To disable this change, you can run Ruby with the `--disable-frozen-string-literal`
|
|
|
|
|
command line argument. [[Feature #20205]]
|
2023-12-01 13:33:00 +03:00
|
|
|
|
|
2023-12-25 12:45:16 +03:00
|
|
|
|
* `it` is added to reference a block parameter. [[Feature #18980]]
|
|
|
|
|
|
2024-01-14 22:41:02 +03:00
|
|
|
|
* Keyword splatting `nil` when calling methods is now supported.
|
2024-03-26 10:35:02 +03:00
|
|
|
|
`**nil` is treated similarly to `**{}`, passing no keywords,
|
|
|
|
|
and not calling any conversion methods. [[Bug #20064]]
|
2024-01-14 22:41:02 +03:00
|
|
|
|
|
2024-05-31 18:22:40 +03:00
|
|
|
|
* Block passing is no longer allowed in index assignment
|
|
|
|
|
(e.g. `a[0, &b] = 1`). [[Bug #19918]]
|
2024-03-17 07:37:02 +03:00
|
|
|
|
|
2024-05-31 18:22:40 +03:00
|
|
|
|
* Keyword arguments are no longer allowed in index assignment
|
|
|
|
|
(e.g. `a[0, kw: 1] = 2`). [[Bug #20218]]
|
2024-03-17 07:37:02 +03:00
|
|
|
|
|
2024-10-08 19:06:16 +03:00
|
|
|
|
* GC.config added to allow setting configuration variables on the Garbage
|
2024-07-12 17:54:48 +03:00
|
|
|
|
Collector. [[Feature #20443]]
|
2024-07-12 14:13:13 +03:00
|
|
|
|
|
|
|
|
|
* GC configuration parameter `rgengc_allow_full_mark` introduced. When `false`
|
|
|
|
|
GC will only mark young objects. Default is `true`. [[Feature #20443]]
|
|
|
|
|
|
2020-03-03 11:37:51 +03:00
|
|
|
|
## Core classes updates
|
|
|
|
|
|
2021-12-15 19:24:31 +03:00
|
|
|
|
Note: We're only listing outstanding class updates.
|
2020-01-15 06:42:47 +03:00
|
|
|
|
|
2024-03-14 17:50:19 +03:00
|
|
|
|
* Exception
|
|
|
|
|
|
2024-10-08 19:06:16 +03:00
|
|
|
|
* Exception#set_backtrace now accepts arrays of Thread::Backtrace::Location.
|
|
|
|
|
Kernel#raise, Thread#raise and Fiber#raise also accept this new format. [[Feature #13557]]
|
2024-03-14 17:50:19 +03:00
|
|
|
|
|
2024-04-12 09:18:10 +03:00
|
|
|
|
* Range
|
|
|
|
|
|
2024-10-08 18:47:21 +03:00
|
|
|
|
* Range#size now raises TypeError if the range is not iterable. [[Misc #18984]]
|
|
|
|
|
* Range#step now consistently has a semantics of iterating by using `+` operator
|
|
|
|
|
for all types, not only numerics. [[Feature #18368]]
|
2024-08-18 13:15:18 +03:00
|
|
|
|
|
2024-10-08 18:47:21 +03:00
|
|
|
|
```ruby
|
|
|
|
|
(Time.utc(2022, 2, 24)..).step(24*60*60).take(3)
|
|
|
|
|
#=> [2022-02-24 00:00:00 UTC, 2022-02-25 00:00:00 UTC, 2022-02-26 00:00:00 UTC]
|
|
|
|
|
```
|
2024-04-12 09:18:10 +03:00
|
|
|
|
|
2024-07-10 16:28:22 +03:00
|
|
|
|
* RubyVM::AbstractSyntaxTree
|
|
|
|
|
|
2024-10-08 19:06:16 +03:00
|
|
|
|
* Add RubyVM::AbstractSyntaxTree::Node#locations method which returns location objects
|
2024-10-08 18:47:21 +03:00
|
|
|
|
associated with the AST node. [[Feature #20624]]
|
2024-10-08 19:06:16 +03:00
|
|
|
|
* Add RubyVM::AbstractSyntaxTree::Location class which holds location information. [[Feature #20624]]
|
2024-07-10 16:28:22 +03:00
|
|
|
|
|
2024-10-31 07:26:37 +03:00
|
|
|
|
* Fiber::Scheduler
|
|
|
|
|
|
|
|
|
|
* An optional `Fiber::Scheduler#blocking_region` hook allows blocking operations to be moved out of the event loop
|
|
|
|
|
in order to reduce latency and improve multi-core processor utilization. [[Feature #20855]]
|
|
|
|
|
|
2020-03-03 11:37:51 +03:00
|
|
|
|
## Stdlib updates
|
|
|
|
|
|
2024-06-01 12:14:29 +03:00
|
|
|
|
* Tempfile
|
|
|
|
|
|
2024-10-08 19:06:16 +03:00
|
|
|
|
* The keyword argument `anonymous: true` is implemented for Tempfile.create.
|
2024-06-01 12:14:29 +03:00
|
|
|
|
`Tempfile.create(anonymous: true)` removes the created temporary file immediately.
|
|
|
|
|
So applications don't need to remove the file.
|
|
|
|
|
[[Feature #20497]]
|
|
|
|
|
|
2024-10-08 10:30:08 +03:00
|
|
|
|
* win32/sspi.rb
|
2024-10-08 18:58:34 +03:00
|
|
|
|
|
2024-10-10 04:54:26 +03:00
|
|
|
|
* This library is now extracted from the Ruby repository to [ruby/net-http-sspi].
|
2024-10-08 10:30:08 +03:00
|
|
|
|
[[Feature #20775]]
|
|
|
|
|
|
2024-10-17 08:33:55 +03:00
|
|
|
|
The following default gem is added.
|
|
|
|
|
|
|
|
|
|
* win32-registry 0.0.1
|
|
|
|
|
|
2023-12-25 12:46:15 +03:00
|
|
|
|
The following default gems are updated.
|
|
|
|
|
|
2023-12-25 15:13:38 +03:00
|
|
|
|
* RubyGems 3.6.0.dev
|
|
|
|
|
* bundler 2.6.0.dev
|
2024-01-05 01:35:45 +03:00
|
|
|
|
* erb 4.0.4
|
2024-11-01 07:10:26 +03:00
|
|
|
|
* etc 1.4.4
|
2024-10-26 12:45:06 +03:00
|
|
|
|
* fiddle 1.1.5.dev
|
2024-01-18 04:37:52 +03:00
|
|
|
|
* io-console 0.7.2
|
2024-10-19 16:00:02 +03:00
|
|
|
|
* ipaddr 1.2.7
|
2024-09-26 16:39:23 +03:00
|
|
|
|
* irb 1.14.1
|
2024-10-26 12:45:06 +03:00
|
|
|
|
* json 2.8.0.alpha1
|
2024-09-02 05:30:26 +03:00
|
|
|
|
* logger 1.6.1
|
2024-01-05 11:25:49 +03:00
|
|
|
|
* net-http 0.4.1
|
2024-04-15 08:07:51 +03:00
|
|
|
|
* optparse 0.5.0
|
2024-08-28 22:45:20 +03:00
|
|
|
|
* prism 1.0.0
|
2024-09-09 09:47:55 +03:00
|
|
|
|
* psych 5.2.0.beta1
|
2024-05-23 04:18:20 +03:00
|
|
|
|
* rdoc 6.7.0
|
2024-09-05 15:49:01 +03:00
|
|
|
|
* reline 0.5.10
|
2024-03-19 05:17:51 +03:00
|
|
|
|
* resolv 0.4.0
|
2024-08-31 08:46:57 +03:00
|
|
|
|
* stringio 3.1.2.dev
|
|
|
|
|
* strscan 3.1.1.dev
|
2024-10-18 05:07:47 +03:00
|
|
|
|
* syntax_suggest 2.0.1
|
2024-09-06 03:32:47 +03:00
|
|
|
|
* time 0.4.0
|
2024-08-31 08:15:46 +03:00
|
|
|
|
* uri 0.13.1
|
2024-08-31 08:05:21 +03:00
|
|
|
|
* zlib 3.1.1
|
2023-12-25 13:30:22 +03:00
|
|
|
|
|
2024-10-17 08:33:55 +03:00
|
|
|
|
The following bundled gem is added.
|
|
|
|
|
|
|
|
|
|
* repl_type_completor 0.1.7
|
|
|
|
|
|
2023-12-25 13:28:45 +03:00
|
|
|
|
The following bundled gems are updated.
|
2023-10-20 02:33:23 +03:00
|
|
|
|
|
2024-08-17 10:00:35 +03:00
|
|
|
|
* minitest 5.25.1
|
2024-10-03 07:11:01 +03:00
|
|
|
|
* power_assert 2.0.4
|
2024-04-05 09:59:50 +03:00
|
|
|
|
* rake 13.2.1
|
2024-02-19 07:28:46 +03:00
|
|
|
|
* test-unit 3.6.2
|
2024-10-30 06:12:12 +03:00
|
|
|
|
* rexml 3.3.9
|
2024-08-03 10:01:34 +03:00
|
|
|
|
* rss 0.3.1
|
2024-10-03 10:00:45 +03:00
|
|
|
|
* net-ftp 0.3.8
|
2024-10-30 06:12:12 +03:00
|
|
|
|
* net-imap 0.5.0
|
2024-03-27 09:59:42 +03:00
|
|
|
|
* net-smtp 0.5.0
|
2024-10-03 07:11:01 +03:00
|
|
|
|
* rbs 3.6.1
|
2024-02-19 11:14:17 +03:00
|
|
|
|
* typeprof 0.21.11
|
2024-03-30 09:58:50 +03:00
|
|
|
|
* debug 1.9.2
|
2024-07-31 10:00:28 +03:00
|
|
|
|
* racc 1.8.1
|
2023-12-26 09:58:09 +03:00
|
|
|
|
|
2024-01-16 11:07:41 +03:00
|
|
|
|
The following bundled gems are promoted from default gems.
|
2024-01-10 11:28:55 +03:00
|
|
|
|
|
|
|
|
|
* mutex_m 0.2.0
|
2024-01-16 11:07:41 +03:00
|
|
|
|
* getoptlong 0.2.1
|
2024-01-17 02:29:01 +03:00
|
|
|
|
* base64 0.2.0
|
2024-05-07 09:59:36 +03:00
|
|
|
|
* bigdecimal 3.1.8
|
2024-01-19 09:35:57 +03:00
|
|
|
|
* observer 0.1.2
|
2024-01-19 10:28:30 +03:00
|
|
|
|
* abbrev 0.1.2
|
2024-01-19 11:57:54 +03:00
|
|
|
|
* resolv-replace 0.1.1
|
2024-01-19 14:02:59 +03:00
|
|
|
|
* rinda 0.2.0
|
2024-03-01 06:33:42 +03:00
|
|
|
|
* drb 2.2.1
|
2024-01-22 08:18:23 +03:00
|
|
|
|
* nkf 0.2.0
|
2024-01-22 10:00:13 +03:00
|
|
|
|
* syslog 0.1.2
|
2024-03-23 09:59:22 +03:00
|
|
|
|
* csv 3.3.0
|
2024-10-09 06:05:36 +03:00
|
|
|
|
|
2024-10-08 19:10:33 +03:00
|
|
|
|
See GitHub releases like [GitHub Releases of Logger] or changelog for
|
|
|
|
|
details of the default gems or bundled gems.
|
|
|
|
|
|
2024-10-10 04:54:26 +03:00
|
|
|
|
[ruby/net-http-sspi]: https://github.com/ruby/net-http-sspi
|
2024-10-08 19:10:33 +03:00
|
|
|
|
[GitHub Releases of Logger]: https://github.com/ruby/logger/releases
|
2022-11-26 06:53:10 +03:00
|
|
|
|
|
2023-12-25 12:42:07 +03:00
|
|
|
|
## Supported platforms
|
2023-12-18 22:36:54 +03:00
|
|
|
|
|
2020-03-03 11:37:51 +03:00
|
|
|
|
## Compatibility issues
|
|
|
|
|
|
2024-02-20 10:16:28 +03:00
|
|
|
|
* Error messages and backtrace displays have been changed.
|
2024-10-08 18:58:34 +03:00
|
|
|
|
|
2024-10-08 18:47:21 +03:00
|
|
|
|
* Use a single quote instead of a backtick as an opening quote. [[Feature #16495]]
|
|
|
|
|
* Display a class name before a method name (only when the class has a permanent name). [[Feature #19117]]
|
2024-10-08 19:18:09 +03:00
|
|
|
|
* Kernel#caller, Thread::Backtrace::Location’s methods, etc. are also changed accordingly.
|
2024-10-08 18:58:34 +03:00
|
|
|
|
|
2024-10-08 18:47:21 +03:00
|
|
|
|
Old:
|
2024-10-08 19:01:04 +03:00
|
|
|
|
```
|
2024-10-08 18:47:21 +03:00
|
|
|
|
test.rb:1:in `foo': undefined method `time' for an instance of Integer
|
|
|
|
|
from test.rb:2:in `<main>'
|
2024-10-08 19:01:04 +03:00
|
|
|
|
```
|
2024-10-08 18:47:21 +03:00
|
|
|
|
|
|
|
|
|
New:
|
2024-10-08 19:01:04 +03:00
|
|
|
|
```
|
2024-10-08 18:47:21 +03:00
|
|
|
|
test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer
|
|
|
|
|
from test.rb:2:in '<main>'
|
|
|
|
|
```
|
2024-02-20 10:16:28 +03:00
|
|
|
|
|
2024-10-08 19:06:16 +03:00
|
|
|
|
* Hash#inspect rendering have been changed. [[Bug #20433]]
|
2024-10-08 18:58:34 +03:00
|
|
|
|
|
2024-10-08 18:47:21 +03:00
|
|
|
|
* Symbol keys are displayed using the modern symbol key syntax: `"{user: 1}"`
|
|
|
|
|
* Other keys now have spaces around `=>`: `'{"user" => 1}'`, while previously they didn't: `'{"user"=>1}'`
|
2024-10-05 23:59:54 +03:00
|
|
|
|
|
2020-08-24 09:38:03 +03:00
|
|
|
|
## Stdlib compatibility issues
|
2020-06-18 15:11:19 +03:00
|
|
|
|
|
2020-01-18 11:46:52 +03:00
|
|
|
|
## C API updates
|
2020-01-15 06:42:47 +03:00
|
|
|
|
|
2024-03-21 21:24:06 +03:00
|
|
|
|
* `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]]
|
2024-03-14 15:39:04 +03:00
|
|
|
|
|
2020-01-18 11:46:52 +03:00
|
|
|
|
## Implementation improvements
|
2020-01-15 06:42:47 +03:00
|
|
|
|
|
2024-10-08 19:06:16 +03:00
|
|
|
|
* Array#each is rewritten in Ruby for better performance [[Feature #20182]].
|
2024-01-30 20:49:25 +03:00
|
|
|
|
|
2023-12-25 12:42:07 +03:00
|
|
|
|
## JIT
|
2023-12-25 12:45:16 +03:00
|
|
|
|
|
2024-03-27 01:29:38 +03:00
|
|
|
|
## Miscellaneous changes
|
|
|
|
|
|
|
|
|
|
* Passing a block to a method which doesn't use the passed block will show
|
|
|
|
|
a warning on verbose mode (`-w`).
|
|
|
|
|
[[Feature #15554]]
|
|
|
|
|
|
2024-05-24 09:15:51 +03:00
|
|
|
|
* Redefining some core methods that are specially optimized by the interpreter
|
2024-10-08 19:06:16 +03:00
|
|
|
|
and JIT like String#freeze or Integer#+ now emits a performance class
|
2024-04-16 09:29:25 +03:00
|
|
|
|
warning (`-W:performance` or `Warning[:performance] = true`).
|
|
|
|
|
[[Feature #20429]]
|
|
|
|
|
|
2024-03-21 21:14:25 +03:00
|
|
|
|
[Feature #13557]: https://bugs.ruby-lang.org/issues/13557
|
2024-03-27 01:29:38 +03:00
|
|
|
|
[Feature #15554]: https://bugs.ruby-lang.org/issues/15554
|
2024-02-20 10:16:28 +03:00
|
|
|
|
[Feature #16495]: https://bugs.ruby-lang.org/issues/16495
|
2024-03-21 21:24:06 +03:00
|
|
|
|
[Feature #18290]: https://bugs.ruby-lang.org/issues/18290
|
2024-08-20 04:27:45 +03:00
|
|
|
|
[Feature #18368]: https://bugs.ruby-lang.org/issues/18368
|
2023-12-25 12:45:16 +03:00
|
|
|
|
[Feature #18980]: https://bugs.ruby-lang.org/issues/18980
|
2024-04-12 09:18:10 +03:00
|
|
|
|
[Misc #18984]: https://bugs.ruby-lang.org/issues/18984
|
2024-02-20 10:16:28 +03:00
|
|
|
|
[Feature #19117]: https://bugs.ruby-lang.org/issues/19117
|
2024-03-17 07:37:02 +03:00
|
|
|
|
[Bug #19918]: https://bugs.ruby-lang.org/issues/19918
|
2024-02-04 12:38:48 +03:00
|
|
|
|
[Bug #20064]: https://bugs.ruby-lang.org/issues/20064
|
2024-01-30 20:54:04 +03:00
|
|
|
|
[Feature #20182]: https://bugs.ruby-lang.org/issues/20182
|
2024-03-21 21:12:06 +03:00
|
|
|
|
[Feature #20205]: https://bugs.ruby-lang.org/issues/20205
|
2024-03-22 04:08:08 +03:00
|
|
|
|
[Bug #20218]: https://bugs.ruby-lang.org/issues/20218
|
2024-03-14 15:39:04 +03:00
|
|
|
|
[Feature #20265]: https://bugs.ruby-lang.org/issues/20265
|
2024-04-18 02:10:34 +03:00
|
|
|
|
[Feature #20429]: https://bugs.ruby-lang.org/issues/20429
|
2024-10-05 23:59:54 +03:00
|
|
|
|
[Bug #20433]: https://bugs.ruby-lang.org/issues/20433
|
2024-07-12 17:53:25 +03:00
|
|
|
|
[Feature #20443]: https://bugs.ruby-lang.org/issues/20443
|
2024-06-27 05:44:57 +03:00
|
|
|
|
[Feature #20497]: https://bugs.ruby-lang.org/issues/20497
|
2024-07-10 16:28:22 +03:00
|
|
|
|
[Feature #20624]: https://bugs.ruby-lang.org/issues/20624
|
2024-10-08 10:30:08 +03:00
|
|
|
|
[Feature #20775]: https://bugs.ruby-lang.org/issues/20775
|
2024-10-31 07:26:37 +03:00
|
|
|
|
[Feature #20855]: https://bugs.ruby-lang.org/issues/20855
|