summaryrefslogtreecommitdiff
path: root/NEWS.md
diff options
context:
space:
mode:
Diffstat (limited to 'NEWS.md')
-rw-r--r--NEWS.md1043
1 files changed, 219 insertions, 824 deletions
diff --git a/NEWS.md b/NEWS.md
index 496552be39..9ff290ad75 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,874 +1,269 @@
-# NEWS for Ruby 3.4.0
+# NEWS for Ruby 4.1.0
This document is a list of user-visible feature changes
-since the **3.3.0** release, except for bug fixes.
+since the **4.0.0** release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
## Language changes
-* String literals in files without a `frozen_string_literal` comment now emit a deprecation warning
- when they are mutated.
- 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]]
-
- * String#+@ now duplicates when mutating the string would emit
- a deprecation warning, offered as a replacement for the
- `str.dup if str.frozen?` pattern.
-
-* `it` is added to reference a block parameter. [[Feature #18980]]
-
-* 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]]
-
-* Block passing is no longer allowed in index assignment
- (e.g. `a[0, &b] = 1`). [[Bug #19918]]
-
-* Keyword arguments are no longer allowed in index assignment
- (e.g. `a[0, kw: 1] = 2`). [[Bug #20218]]
-
-* The toplevel name `::Ruby` is reserved now, and the definition will be warned
- when `Warning[:deprecated]`. [[Feature #20884]]
+* `Module#clone` and `Module#dup` no longer rewrite the lexical scope of
+ copied methods. Constants and class variables resolve through the
+ original class, consistent with inheritance and mixins.
+ [[Feature #21981]]
## Core classes updates
Note: We're only listing outstanding class updates.
-
* Array
- * Array#fetch_values was added. [[Feature #20702]]
-
-* Exception
-
- * Exception#set_backtrace now accepts arrays of Thread::Backtrace::Location.
- Kernel#raise, Thread#raise and Fiber#raise also accept this new format. [[Feature #13557]]
-
-* Fiber::Scheduler
-
- * An optional Fiber::Scheduler#blocking_operation_wait hook allows blocking operations to be moved out of the
- event loop in order to reduce latency and improve multi-core processor utilization. [[Feature #20876]]
-
-* GC
-
- * GC.config added to allow setting configuration variables on the Garbage
- Collector. [[Feature #20443]]
+ * `Array#pack` accepts a new format `R` and `r` for unpacking unsigned
+ and signed LEB128 encoded integers. [[Feature #21785]]
+ * `Array#pack` accepts a new format `^` that returns the current offset.
+ Useful when combined with variable width formats like LEB128. [[Feature #21796]]
- * GC configuration parameter `rgengc_allow_full_mark` introduced. When `false`
- GC will only mark young objects. Default is `true`. [[Feature #20443]]
+* ENV
-* Hash
+ * `ENV.fetch_values` is added. It returns an array of values for the
+ given names, raising `KeyError` for missing names unless a block is
+ given. [[Feature #21781]]
- * Hash.new now accepts an optional `capacity:` argument, to preallocate the hash with a given capacity.
- This can improve performance when building large hashes incrementally by saving on reallocation and
- rehashing of keys. [[Feature #19236]]
+* Kernel
-* IO::Buffer
-
- * IO::Buffer#copy can release the GVL, allowing other threads to run while copying data. [[Feature #20902]]
-
-* Integer
-
- * Integer#** used to return `Float::INFINITY` when the return value is large, but now returns an Integer.
- If the return value is extremely large, it raises an exception.
- [[Feature #20811]]
+ * `Kernel#autoload_relative` and `Module#autoload_relative` are added.
+ These methods work like `autoload`, but resolve the file path relative
+ to the file where the method is called, similar to `require_relative`.
+ This makes it easier to autoload constants from files in the same
+ directory without hardcoding absolute paths or manipulating `$LOAD_PATH`.
+ [[Feature #15330]]
* MatchData
- * MatchData#bytebegin and MatchData#byteend have been added. [[Feature #20576]]
-
-* Ractor
-
- * `require` in Ractor is allowed. The requiring process will be run on
- the main Ractor.
- `Ractor._require(feature)` is added to run requiring process on the
- main Ractor.
- [[Feature #20627]]
-
- * Ractor.main? is added. [[Feature #20627]]
-
- * Ractor.[] and Ractor.[]= are added to access the ractor local storage
- of the current Ractor. [[Feature #20715]]
-
- * `Ractor.store_if_absent(key){ init }` is added to initialize ractor local
- variables in thread-safty. [[Feature #20875]]
-
-* Range
-
- * 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]]
-
- ```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]
- ```
-
-* Rational
+ * `MatchData#integer_at` is added. It converts the matched substring to
+ integer and return the result. [[Feature #21932]]
- * Rational#** used to return `Float::INFINITY` or `Float::NAN`
- when the numerator of the return value is large, but now returns an Integer.
- If it is extremely large, it raises an exception. [[Feature #20811]]
+* Regexp
-* RubyVM::AbstractSyntaxTree
+ * All instances of `Regexp` are now frozen, not just literals.
+ Subclasses of `Regexp` are not frozen for compatibility.
+ [[Feature #8948]]
- * Add RubyVM::AbstractSyntaxTree::Node#locations method which returns location objects
- associated with the AST node. [[Feature #20624]]
- * Add RubyVM::AbstractSyntaxTree::Location class which holds location information. [[Feature #20624]]
+* Set
+ * A deprecated behavior, `Set#to_set`, `Range#to_set`, and
+ `Enumerable#to_set` accepting arguments, was removed. [[Feature #21390]]
-* String
-
- * String#append_as_bytes was added to more easily and efficiently work with binary buffers and protocols.
- It directly concatenate the arguments into the string without any encoding validation or conversion.
- [[Feature #20594]]
-
-* Symbol
-
- * The string returned by Symbol#to_s now emits a deprecation warning when mutated, and will be
- frozen in a future version of Ruby.
- These warnings can be enabled with `-W:deprecated` or by setting `Warning[:deprecated] = true`.
- [[Feature #20350]]
-
-* Time
-
- * On Windows, now Time#zone encodes the system timezone name in UTF-8
- instead of the active code page, if it contains non-ASCII characters.
- [[Bug #20929]]
-
- * Time#xmlschema, and its Time#iso8601 alias have been moved into the core Time
- class while previously it was an extension provided by the `time` gem. [[Feature #20707]]
-
-* Warning
+## Stdlib updates
- * Add Warning.categories method which returns a list of possible warning categories.
- [[Feature #20293]]
+### The following bundled gems are added.
-## Stdlib updates
We only list stdlib changes that are notable feature changes.
-* RubyGems
- * Add --attestation option to gem push. It enabled to store signature of build artifact to sigstore.dev.
-
-* Bundler
- * Add a lockfile_checksums configuration to include checksums in fresh lockfiles.
- * Add bundle lock --add-checksums to add checksums to an existing lockfile.
-
-* JSON
-
- * Performance improvements `JSON.parse` about 1.5 times faster than json-2.7.x.
-
-* Tempfile
-
- * The keyword argument `anonymous: true` is implemented for Tempfile.create.
- `Tempfile.create(anonymous: true)` removes the created temporary file immediately.
- So applications don't need to remove the file.
- [[Feature #20497]]
-
-* win32/sspi.rb
-
- * This library is now extracted from the Ruby repository to [ruby/net-http-sspi].
- [[Feature #20775]]
-
-Other changes are listed in the following sections. we also listed release history from the previous bundled version that is Ruby 3.3.0 if it has GitHub releases.
-
-The following default gem is added.
-
-* win32-registry 0.1.0
-
-The following default gems are updated.
-
-* [RubyGems][RubyGems] 3.6.1
- * 3.5.3 to [v3.5.4][RubyGems-v3.5.4], [v3.5.5][RubyGems-v3.5.5], [v3.5.6][RubyGems-v3.5.6], [v3.5.7][RubyGems-v3.5.7], [v3.5.8][RubyGems-v3.5.8], [v3.5.9][RubyGems-v3.5.9], [v3.5.10][RubyGems-v3.5.10], [v3.5.11][RubyGems-v3.5.11], [v3.5.12][RubyGems-v3.5.12], [v3.5.13][RubyGems-v3.5.13], [v3.5.14][RubyGems-v3.5.14], [v3.5.15][RubyGems-v3.5.15], [v3.5.16][RubyGems-v3.5.16], [v3.5.17][RubyGems-v3.5.17], [v3.5.18][RubyGems-v3.5.18], [v3.5.19][RubyGems-v3.5.19], [v3.5.20][RubyGems-v3.5.20], [v3.5.21][RubyGems-v3.5.21], [v3.5.22][RubyGems-v3.5.22], [v3.5.23][RubyGems-v3.5.23], [v3.6.0][RubyGems-v3.6.0], [v3.6.1][RubyGems-v3.6.1]
-* [benchmark][benchmark] 0.4.0
- * 0.3.0 to [v0.4.0][benchmark-v0.4.0]
-* [bundler][bundler] 2.6.1
- * 2.5.3 to [v2.5.4][bundler-v2.5.4], [v2.5.5][bundler-v2.5.5], [v2.5.6][bundler-v2.5.6], [v2.5.7][bundler-v2.5.7], [v2.5.8][bundler-v2.5.8], [v2.5.9][bundler-v2.5.9], [v2.5.10][bundler-v2.5.10], [v2.5.11][bundler-v2.5.11], [v2.5.12][bundler-v2.5.12], [v2.5.13][bundler-v2.5.13], [v2.5.14][bundler-v2.5.14], [v2.5.15][bundler-v2.5.15], [v2.5.16][bundler-v2.5.16], [v2.5.17][bundler-v2.5.17], [v2.5.18][bundler-v2.5.18], [v2.5.19][bundler-v2.5.19], [v2.5.20][bundler-v2.5.20], [v2.5.21][bundler-v2.5.21], [v2.5.22][bundler-v2.5.22], [v2.5.23][bundler-v2.5.23], [v2.6.0][bundler-v2.6.0], [v2.6.1][bundler-v2.6.1]
-* [date][date] 3.4.1
- * 3.3.4 to [v3.4.0][date-v3.4.0], [v3.4.1][date-v3.4.1]
-* [delegate][delegate] 0.4.0
- * 0.3.1 to [v0.4.0][delegate-v0.4.0]
-* [did_you_mean][did_you_mean] 2.0.0
- * 1.6.3 to [v2.0.0][did_you_mean-v2.0.0]
-* [digest][digest] 3.2.0
- * 3.1.1 to [v3.2.0.pre0][digest-v3.2.0.pre0], [v3.2.0][digest-v3.2.0]
-* [erb][erb] 4.0.4
- * 4.0.3 to [v4.0.4][erb-v4.0.4]
-* [error_highlight][error_highlight] 0.7.0
- * 0.6.0 to [v0.7.0][error_highlight-v0.7.0]
-* [etc][etc] 1.4.5
- * 1.4.3 to [v1.4.4][etc-v1.4.4], [v1.4.5][etc-v1.4.5]
-* [fcntl][fcntl] 1.2.0
- * 1.1.0 to [v1.2.0][fcntl-v1.2.0]
-* [fiddle][fiddle] 1.1.6
- * 1.1.2 to [v1.1.3][fiddle-v1.1.3], [v1.1.4][fiddle-v1.1.4], [v1.1.5][fiddle-v1.1.5], [v1.1.6][fiddle-v1.1.6]
-* [fileutils][fileutils] 1.7.3
- * 1.7.2 to [v1.7.3][fileutils-v1.7.3]
-* [io-console][io-console] 0.8.0
- * 0.7.1 to [v0.7.2][io-console-v0.7.2], [v0.8.0.beta1][io-console-v0.8.0.beta1], [v0.8.0][io-console-v0.8.0]
-* [io-nonblock][io-nonblock] 0.3.1
- * 0.3.0 to [v0.3.1][io-nonblock-v0.3.1]
-* [ipaddr][ipaddr] 1.2.7
- * 1.2.6 to [v1.2.7][ipaddr-v1.2.7]
-* [irb][irb] 1.14.3
- * 1.11.0 to [v1.11.1][irb-v1.11.1], [v1.11.2][irb-v1.11.2], [v1.12.0][irb-v1.12.0], [v1.13.0][irb-v1.13.0], [v1.13.1][irb-v1.13.1], [v1.13.2][irb-v1.13.2], [v1.14.0][irb-v1.14.0], [v1.14.1][irb-v1.14.1], [v1.14.2][irb-v1.14.2], [v1.14.3][irb-v1.14.3]
-* [json][json] 2.9.1
- * 2.7.1 to [v2.7.2][json-v2.7.2], [v2.7.3.rc1][json-v2.7.3.rc1], [v2.7.3][json-v2.7.3], [v2.7.4][json-v2.7.4], [v2.7.5][json-v2.7.5], [v2.7.6][json-v2.7.6], [v2.8.0][json-v2.8.0], [v2.8.1][json-v2.8.1], [v2.8.2][json-v2.8.2], [v2.9.0][json-v2.9.0], [v2.9.1][json-v2.9.1]
-* [logger][logger] 1.6.4
- * 1.6.0 to [v1.6.1][logger-v1.6.1], [v1.6.2][logger-v1.6.2], [v1.6.3][logger-v1.6.3], [v1.6.4][logger-v1.6.4]
-* [net-http][net-http] 0.6.0
- * 0.4.0 to [v0.4.1][net-http-v0.4.1], [v0.5.0][net-http-v0.5.0], [v0.6.0][net-http-v0.6.0]
-* [open-uri][open-uri] 0.5.0
- * 0.4.1 to [v0.5.0][open-uri-v0.5.0]
-* [optparse][optparse] 0.6.0
- * 0.4.0 to [v0.5.0][optparse-v0.5.0], [v0.6.0][optparse-v0.6.0]
-* [ostruct][ostruct] 0.6.1
- * 0.6.0 to [v0.6.1][ostruct-v0.6.1]
-* [pathname][pathname] 0.4.0
- * 0.3.0 to [v0.4.0][pathname-v0.4.0]
-* [pp][pp] 0.6.2
- * 0.5.0 to [v0.6.0][pp-v0.6.0], [v0.6.1][pp-v0.6.1], [v0.6.2][pp-v0.6.2]
-* [prism][prism] 1.2.0
- * 0.19.0 to [v0.20.0][prism-v0.20.0], [v0.21.0][prism-v0.21.0], [v0.22.0][prism-v0.22.0], [v0.23.0][prism-v0.23.0], [v0.24.0][prism-v0.24.0], [v0.25.0][prism-v0.25.0], [v0.26.0][prism-v0.26.0], [v0.27.0][prism-v0.27.0], [v0.28.0][prism-v0.28.0], [v0.29.0][prism-v0.29.0], [v0.30.0][prism-v0.30.0], [v1.0.0][prism-v1.0.0], [v1.1.0][prism-v1.1.0], [v1.2.0][prism-v1.2.0]
-* [pstore][pstore] 0.1.4
- * 0.1.3 to [v0.1.4][pstore-v0.1.4]
-* [psych][psych] 5.2.2
- * 5.1.2 to [v5.2.0.beta1][psych-v5.2.0.beta1], [v5.2.0.beta2][psych-v5.2.0.beta2], [v5.2.0.beta3][psych-v5.2.0.beta3], [v5.2.0.beta4][psych-v5.2.0.beta4], [v5.2.0.beta5][psych-v5.2.0.beta5], [v5.2.0.beta6][psych-v5.2.0.beta6], [v5.2.0.beta7][psych-v5.2.0.beta7], [v5.2.0][psych-v5.2.0], [v5.2.1][psych-v5.2.1], [v5.2.2][psych-v5.2.2]
-* [rdoc][rdoc] 6.10.0
- * 6.6.2 to [v6.7.0][rdoc-v6.7.0], [v6.8.0][rdoc-v6.8.0], [v6.8.1][rdoc-v6.8.1], [v6.9.0][rdoc-v6.9.0], [v6.9.1][rdoc-v6.9.1], [v6.10.0][rdoc-v6.10.0]
-* [reline][reline] 0.6.0
- * 0.4.1 to [v0.4.2][reline-v0.4.2], [v0.4.3][reline-v0.4.3], [v0.5.0.pre.1][reline-v0.5.0.pre.1], [v0.5.0][reline-v0.5.0], [v0.5.1][reline-v0.5.1], [v0.5.2][reline-v0.5.2], [v0.5.3][reline-v0.5.3], [v0.5.4][reline-v0.5.4], [v0.5.5][reline-v0.5.5], [v0.5.6][reline-v0.5.6], [v0.5.7][reline-v0.5.7], [v0.5.8][reline-v0.5.8], [v0.5.9][reline-v0.5.9], [v0.5.10][reline-v0.5.10], [v0.5.11][reline-v0.5.11], [v0.5.12][reline-v0.5.12], [v0.6.0][reline-v0.6.0]
-* [resolv][resolv] 0.6.0
- * 0.3.0 to [v0.4.0][resolv-v0.4.0], [v0.5.0][resolv-v0.5.0], [v0.6.0][resolv-v0.6.0]
-* [securerandom][securerandom] 0.4.1
- * 0.3.1 to [v0.3.2][securerandom-v0.3.2], [v0.4.0][securerandom-v0.4.0], [v0.4.1][securerandom-v0.4.1]
-* [set][set] 1.1.1
- * 1.1.0 to [v1.1.1][set-v1.1.1]
-* [shellwords][shellwords] 0.2.2
- * 0.2.0 to [v0.2.1][shellwords-v0.2.1], [v0.2.2][shellwords-v0.2.2]
-* [singleton][singleton] 0.3.0
- * 0.2.0 to [v0.3.0][singleton-v0.3.0]
-* [stringio][stringio] 3.1.2
- * 3.1.0 to [v3.1.1][stringio-v3.1.1], [v3.1.2][stringio-v3.1.2]
-* [strscan][strscan] 3.1.2
- * 3.0.7 to [v3.0.8][strscan-v3.0.8], [v3.0.9][strscan-v3.0.9], [v3.1.0][strscan-v3.1.0], [v3.1.1][strscan-v3.1.1], [v3.1.2][strscan-v3.1.2]
-* [syntax_suggest][syntax_suggest] 2.0.2
- * 2.0.0 to [v2.0.1][syntax_suggest-v2.0.1], [v2.0.2][syntax_suggest-v2.0.2]
-* [tempfile][tempfile] 0.3.1
- * 0.2.1 to [v0.3.0][tempfile-v0.3.0], [v0.3.1][tempfile-v0.3.1]
-* [time][time] 0.4.1
- * 0.3.0 to [v0.4.0][time-v0.4.0], [v0.4.1][time-v0.4.1]
-* [timeout][timeout] 0.4.3
- * 0.4.1 to [v0.4.2][timeout-v0.4.2], [v0.4.3][timeout-v0.4.3]
-* [tmpdir][tmpdir] 0.3.1
- * 0.2.0 to [v0.3.0][tmpdir-v0.3.0], [v0.3.1][tmpdir-v0.3.1]
-* [uri][uri] 1.0.2
- * 0.13.0 to [v0.13.1][uri-v0.13.1], [v1.0.0][uri-v1.0.0], [v1.0.1][uri-v1.0.1], [v1.0.2][uri-v1.0.2]
-* [win32ole][win32ole] 1.9.1
- * 1.8.10 to [v1.9.0][win32ole-v1.9.0], [v1.9.1][win32ole-v1.9.1]
-* [yaml][yaml] 0.4.0
- * 0.3.0 to [v0.4.0][yaml-v0.4.0]
-* [zlib][zlib] 3.2.1
- * 3.1.0 to [v3.1.1][zlib-v3.1.1], [v3.2.0][zlib-v3.2.0], [v3.2.1][zlib-v3.2.1]
-
-The following bundled gem is added.
-
-* [repl_type_completor][repl_type_completor] 0.1.9
-
-The following bundled gems are updated.
-
-* [minitest][minitest] 5.25.4
-* [power_assert][power_assert] 2.0.4
- * 2.0.3 to [v2.0.4][power_assert-v2.0.4]
-* [rake][rake] 13.2.1
- * 13.1.0 to [v13.2.0][rake-v13.2.0], [v13.2.1][rake-v13.2.1]
-* [test-unit][test-unit] 3.6.7
- * 3.6.1 to [3.6.2][test-unit-3.6.2], [3.6.3][test-unit-3.6.3], [3.6.4][test-unit-3.6.4], [3.6.5][test-unit-3.6.5], [3.6.6][test-unit-3.6.6], [3.6.7][test-unit-3.6.7]
-* [rexml][rexml] 3.4.0
- * 3.2.6 to [v3.2.7][rexml-v3.2.7], [v3.2.8][rexml-v3.2.8], [v3.2.9][rexml-v3.2.9], [v3.3.0][rexml-v3.3.0], [v3.3.1][rexml-v3.3.1], [v3.3.2][rexml-v3.3.2], [v3.3.3][rexml-v3.3.3], [v3.3.4][rexml-v3.3.4], [v3.3.5][rexml-v3.3.5], [v3.3.6][rexml-v3.3.6], [v3.3.7][rexml-v3.3.7], [v3.3.8][rexml-v3.3.8], [v3.3.9][rexml-v3.3.9], [v3.4.0][rexml-v3.4.0]
-* [rss][rss] 0.3.1
- * 0.3.0 to [0.3.1][rss-0.3.1]
-* [net-ftp][net-ftp] 0.3.8
- * 0.3.3 to [v0.3.4][net-ftp-v0.3.4], [v0.3.5][net-ftp-v0.3.5], [v0.3.6][net-ftp-v0.3.6], [v0.3.7][net-ftp-v0.3.7], [v0.3.8][net-ftp-v0.3.8]
-* [net-imap][net-imap] 0.5.2
- * 0.4.9 to [v0.4.9.1][net-imap-v0.4.9.1], [v0.4.10][net-imap-v0.4.10], [v0.4.11][net-imap-v0.4.11], [v0.4.12][net-imap-v0.4.12], [v0.4.13][net-imap-v0.4.13], [v0.4.14][net-imap-v0.4.14], [v0.4.15][net-imap-v0.4.15], [v0.4.16][net-imap-v0.4.16], [v0.4.17][net-imap-v0.4.17], [v0.5.0][net-imap-v0.5.0], [v0.4.18][net-imap-v0.4.18], [v0.5.1][net-imap-v0.5.1], [v0.5.2][net-imap-v0.5.2]
-* [net-smtp][net-smtp] 0.5.0
- * 0.4.0 to [v0.4.0.1][net-smtp-v0.4.0.1], [v0.5.0][net-smtp-v0.5.0]
-* [prime][prime] 0.1.3
- * [v0.1.3][prime-v0.1.3]
-* [rbs][rbs] 3.7.0
- * 3.4.0 to [v3.4.1][rbs-v3.4.1], [v3.4.2][rbs-v3.4.2], [v3.4.3][rbs-v3.4.3], [v3.4.4][rbs-v3.4.4], [v3.5.0.pre.1][rbs-v3.5.0.pre.1], [v3.5.0.pre.2][rbs-v3.5.0.pre.2], [v3.5.0][rbs-v3.5.0], [v3.5.1][rbs-v3.5.1], [v3.5.2][rbs-v3.5.2], [v3.5.3][rbs-v3.5.3], [v3.6.0.dev.1][rbs-v3.6.0.dev.1], [v3.6.0.pre.1][rbs-v3.6.0.pre.1], [v3.6.0.pre.2][rbs-v3.6.0.pre.2], [v3.6.0.pre.3][rbs-v3.6.0.pre.3], [v3.6.0][rbs-v3.6.0], [v3.6.1][rbs-v3.6.1], [v3.7.0.dev.1][rbs-v3.7.0.dev.1], [v3.7.0.pre.1][rbs-v3.7.0.pre.1], [v3.7.0][rbs-v3.7.0]
-* [debug][debug] 1.10.0
- * 1.9.1 to [v1.9.2][debug-v1.9.2], [v1.10.0][debug-v1.10.0]
-* [racc][racc] 1.8.1
- * 1.7.3 to [v1.8.0][racc-v1.8.0], [v1.8.1][racc-v1.8.1]
-
-The following bundled gems are promoted from default gems.
-
-* [mutex_m][mutex_m] 0.3.0
- * 0.2.0 to [v0.3.0][mutex_m-v0.3.0]
-* [getoptlong][getoptlong] 0.2.1
-* [base64][base64] 0.2.0
-* [bigdecimal][bigdecimal] 3.1.8
- * 3.1.5 to [v3.1.6][bigdecimal-v3.1.6], [v3.1.7][bigdecimal-v3.1.7], [v3.1.8][bigdecimal-v3.1.8]
-* [observer][observer] 0.1.2
-* [abbrev][abbrev] 0.1.2
-* [resolv-replace][resolv-replace] 0.1.1
-* [rinda][rinda] 0.2.0
-* [drb][drb] 2.2.1
- * 2.2.0 to [v2.2.1][drb-v2.2.1]
-* [nkf][nkf] 0.2.0
- * 0.1.3 to [v0.2.0][nkf-v0.2.0]
-* [syslog][syslog] 0.2.0
- * 0.1.2 to [v0.2.0][syslog-v0.2.0]
-* [csv][csv] 3.3.1
- * 3.2.8 to [v3.2.9][csv-v3.2.9], [v3.3.0][csv-v3.3.0], [v3.3.1][csv-v3.3.1]
+Other changes are listed in the following sections. We also listed release
+history from the previous bundled version that is Ruby 3.4.0 if it has GitHub
+releases.
+
+### The following bundled gems are promoted from default gems.
+
+* tsort 0.2.0
+* win32-registry 0.1.2
+
+### The following default gem is added.
+
+### The following default gems are updated.
+
+* RubyGems 4.1.0.dev
+ * 4.0.3 to [v4.0.4][RubyGems-v4.0.4], [v4.0.5][RubyGems-v4.0.5], [v4.0.6][RubyGems-v4.0.6], [v4.0.7][RubyGems-v4.0.7], [v4.0.8][RubyGems-v4.0.8], [v4.0.9][RubyGems-v4.0.9], [v4.0.10][RubyGems-v4.0.10], [v4.0.11][RubyGems-v4.0.11], [v4.0.12][RubyGems-v4.0.12], [v4.0.13][RubyGems-v4.0.13]
+* bundler 4.1.0.dev
+ * 4.0.3 to [v4.0.4][bundler-v4.0.4], [v4.0.5][bundler-v4.0.5], [v4.0.6][bundler-v4.0.6], [v4.0.7][bundler-v4.0.7], [v4.0.8][bundler-v4.0.8], [v4.0.9][bundler-v4.0.9], [v4.0.10][bundler-v4.0.10], [v4.0.11][bundler-v4.0.11], [v4.0.12][bundler-v4.0.12], [v4.0.13][bundler-v4.0.13]
+* erb 6.0.4
+ * 6.0.1 to [v6.0.1.1][erb-v6.0.1.1], [v6.0.2][erb-v6.0.2], [v6.0.3][erb-v6.0.3], [v6.0.4][erb-v6.0.4]
+* ipaddr 1.2.9
+ * 1.2.8 to [v1.2.9][ipaddr-v1.2.9]
+* json 2.19.8
+ * 2.18.0 to [v2.18.1][json-v2.18.1], [v2.19.0][json-v2.19.0], [v2.19.1][json-v2.19.1], [v2.19.2][json-v2.19.2], [v2.19.3][json-v2.19.3], [v2.19.4][json-v2.19.4], [v2.19.5][json-v2.19.5], [v2.19.6][json-v2.19.6], [v2.19.7][json-v2.19.7]
+* openssl 4.0.2
+ * 4.0.0 to [v4.0.1][openssl-v4.0.1], [v4.0.2][openssl-v4.0.2]
+* prism 1.9.0
+ * 1.7.0 to [v1.8.0][prism-v1.8.0], [v1.8.1][prism-v1.8.1], [v1.9.0][prism-v1.9.0]
+* psych 5.4.0
+* resolv 0.7.1
+ * 0.7.0 to [v0.7.1][resolv-v0.7.1]
+* stringio 3.2.1.dev
+* strscan 3.1.9.dev
+ * 3.1.6 to [v3.1.7][strscan-v3.1.7], [v3.1.8][strscan-v3.1.8]
+* syntax_suggest 3.0.0
+* timeout 0.6.1
+ * 0.6.0 to [v0.6.1][timeout-v0.6.1]
+* zlib 3.2.3
+ * 3.2.2 to [v3.2.3][zlib-v3.2.3]
+
+### The following bundled gems are updated.
+
+* minitest 6.0.6
+* rake 13.4.2
+ * 13.3.1 to [v13.4.0][rake-v13.4.0], [v13.4.1][rake-v13.4.1], [v13.4.2][rake-v13.4.2]
+* test-unit 3.7.8
+ * 3.7.5 to [3.7.6][test-unit-3.7.6], [3.7.7][test-unit-3.7.7], [3.7.8][test-unit-3.7.8]
+* net-imap 0.6.4
+ * 0.6.2 to [v0.6.3][net-imap-v0.6.3], [v0.6.4][net-imap-v0.6.4]
+* rbs 4.0.2
+ * 3.10.0 to [v3.10.1][rbs-v3.10.1], [v3.10.2][rbs-v3.10.2], [v3.10.3][rbs-v3.10.3], [v3.10.4][rbs-v3.10.4], [v4.0.0.dev.5][rbs-v4.0.0.dev.5], [v4.0.0][rbs-v4.0.0], [v4.0.2][rbs-v4.0.2]
+* typeprof 0.32.0
+* mutex_m 0.3.0
+* bigdecimal 4.1.2
+ * 4.0.1 to [v4.1.0][bigdecimal-v4.1.0], [v4.1.1][bigdecimal-v4.1.1], [v4.1.2][bigdecimal-v4.1.2]
+* resolv-replace 0.2.0
+ * 0.1.1 to [v0.2.0][resolv-replace-v0.2.0]
+* syslog 0.4.0
+ * 0.3.0 to [v0.4.0][syslog-v0.4.0]
+* repl_type_completor 0.1.15
+ * 0.1.12 to [v0.1.13][repl_type_completor-v0.1.13], [v0.1.14][repl_type_completor-v0.1.14], [v0.1.15][repl_type_completor-v0.1.15]
+* pstore 0.2.1
+ * 0.2.0 to [v0.2.1][pstore-v0.2.1]
+* rdoc 7.2.0
+ * 7.0.3 to [v7.0.4][rdoc-v7.0.4], [v7.1.0][rdoc-v7.1.0], [v7.2.0][rdoc-v7.2.0]
+* win32ole 1.9.3
+ * 1.9.2 to [v1.9.3][win32ole-v1.9.3]
+* irb 1.18.0
+ * 1.16.0 to [v1.17.0][irb-v1.17.0], [v1.18.0][irb-v1.18.0]
+
+### RubyGems and Bundler
+
+Ruby 4.0 bundled RubyGems and Bundler version 4. see the following links for details.
## Supported platforms
## Compatibility issues
-* Error messages and backtrace displays have been changed.
-
- * 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]]
- * Extra `rescue`/`ensure` frames are no longer available on the backtrace. [[Feature #20275]]
- * 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>'
- ```
-
- New:
- ```
- test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer
- from test.rb:2:in '<main>'
- ```
-
-* Hash#inspect rendering have been changed. [[Bug #20433]]
-
- * 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}'`
-
-* Kernel#Float() now accepts a decimal string with decimal part omitted. [[Feature #20705]]
-
- ```rb
- Float("1.") #=> 1.0 (previously, an ArgumentError was raised)
- Float("1.E-1") #=> 0.1 (previously, an ArgumentError was raised)
- ```
-
-* String#to_f now accepts a decimal string with decimal part omitted. [[Feature #20705]]
- Note that the result changes when an exponent is specified.
-
- ```rb
- "1.".to_f #=> 1.0
- "1.E-1".to_f #=> 0.1 (previously, 1.0 was returned)
- ```
-
-* Object#singleton_method now returns methods in modules prepended to or included in the
- receiver's singleton class. [[Bug #20620]]
-
- ```rb
- o = Object.new
- o.extend(Module.new{def a = 1})
- o.singleton_method(:a).call #=> 1
- ```
-
-* Refinement#refined_class has been removed. [[Feature #19714]]
-
## Stdlib compatibility issues
-* DidYouMean
-
- * `DidYouMean::SPELL_CHECKERS[]=` and `DidYouMean::SPELL_CHECKERS.merge!` are removed.
+## C API updates
-* Net::HTTP
+### Embedded TypedData
- * Removed the following deprecated constants:
- * `Net::HTTP::ProxyMod`
- * `Net::NetPrivate::HTTPRequest`
- * `Net::HTTPInformationCode`
- * `Net::HTTPSuccessCode`
- * `Net::HTTPRedirectionCode`
- * `Net::HTTPRetriableCode`
- * `Net::HTTPClientErrorCode`
- * `Net::HTTPFatalErrorCode`
- * `Net::HTTPServerErrorCode`
- * `Net::HTTPResponseReceiver`
- * `Net::HTTPResponceReceiver`
+* The `RUBY_TYPED_EMBEDDABLE` flag is now public and documented and can be used by C extensions.
+ It allows allocating C structs directly into Ruby object slots, which reduces pointer chasing,
+ and in some case memory usage.
+ See the C extension documentation for details. [[Feature #21853]]
- These constants were deprecated from 2012.
+* Added new C23 inspired allocator functions, that takes the previous memory size.
+ This allow the Ruby GC to better keep track of memory usage, improving its heuristics.
+ It also improves the performance of system allocators that support C23 `free_sized`.
-* Timeout
+ However, it is important to note that passing an incorrect size to these function is undefined
+ behavior and may result in crashes or memory leaks.
- * Reject negative values for Timeout.timeout. [[Bug #20795]]
+ - `ruby_xfree_sized(void *ptr, size_t size)`
+ - `ruby_xrealloc_sized(void *ptr, size_t newsiz, size_t oldsiz)`
+ - `ruby_xrealloc2_sized(void *ptr, size_t newelems, size_t newsiz, size_t oldelems)`
-* URI
+ [[Feature #21861]]
- * Switched default parser to RFC 3986 compliant from RFC 2396 compliant.
- [[Bug #19266]]
+### Removed APIs
-## C API updates
+The following APIs, which have been deprecated for many years, are removed.
+[[Feature #21768]]
-* `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]]
+* old postponed job functions,
+* untyped data object type/functions,
+* old APIs to allocate a data object,
+* taintedness/trustedness enums/macros,
+* `rb_gc_force_recycle` function,
+* `rb_iterate` function,
+* and some functions and constants for internal use.
## Implementation improvements
-* The default parser is now Prism.
- To use the conventional parser, use the command-line argument `--parser=parse.y`.
- [[Feature #20564]]
-
-* Happy Eyeballs version 2 (RFC8305), an algorithm that ensures faster and more reliable connections
- by attempting IPv6 and IPv4 concurrently, is used in Socket.tcp and TCPSocket.new.
- To disable it globally, set the environment variable `RUBY_TCP_NO_FAST_FALLBACK=1` or
- call `Socket.tcp_fast_fallback=false`.
- Or to disable it on a per-method basis, use the keyword argument `fast_fallback: false`.
- [[Feature #20108]] [[Feature #20782]]
-
-* Alternative garbage collector (GC) implementations can be loaded dynamically
- through the modular garbage collector feature. To enable this feature,
- configure Ruby with `--with-modular-gc` at build time. GC libraries can be
- loaded at runtime using the environment variable `RUBY_GC_LIBRARY`.
- [[Feature #20351]]
-
-* Ruby's built-in garbage collector has been split into a separate file at
- `gc/default/default.c` and interacts with Ruby using an API defined in
- `gc/gc_impl.h`. The built-in garbage collector can now also be built as a
- library using `make modular-gc MODULAR_GC=default` and enabled using the
- environment variable `RUBY_GC_LIBRARY=default`. [[Feature #20470]]
-
-* An experimental GC library is provided based on [MMTk](https://www.mmtk.io/).
- This GC library can be built using `make modular-gc MODULAR_GC=mmtk` and
- enabled using the environment variable `RUBY_GC_LIBRARY=mmtk`. This requires
- the Rust toolchain on the build machine. [[Feature #20860]]
-
-* New features of YJIT
- * Add unified memory limit via `--yjit-mem-size` command-line option (default 128MiB)
- which tracks total YJIT memory usage and is more intuitive than the
- old `--yjit-exec-mem-size`.
- * More statistics now always available via `RubyVM::YJIT.runtime_stats`
- * Add compilation log to track what gets compiled via `--yjit-log`
- * Tail of the log also available at run-time via `RubyVM::YJIT.log`
- * Add support for shareable consts in multi-ractor mode
- * Can now trace counted exits with `--yjit-trace-exits=COUNTER`
- * Compressed context reduces memory needed to store YJIT metadata
-
-* New optimizations of YJIT
- * Improved allocator with ability to allocate registers for local variables
- * When YJIT is enabled, use more Core primitives written in Ruby:
- * `Array#each`, `Array#select`, `Array#map` rewritten in Ruby for better performance [[Feature #20182]].
- * Ability to inline small/trivial methods such as:
- * Empty methods
- * Methods returning a constant
- * Methods returning `self`
- * Methods directly returning an argument
- * Specialized codegen for many more runtime methods
- * Optimize `String#getbyte`, `String#setbyte` and other string methods
- * Optimize bitwise operations to speed up low-level bit/byte manipulation
- * Various other incremental optimizations
-
-## Miscellaneous changes
-
-* Passing a block to a method which doesn't use the passed block will show
- a warning on verbose mode (`-w`).
- In connection with this, a new `strict_unused_block` warning category was introduced.
- Turn them on with `-W:strict_unused_block` or `Warning[:strict_unused_block] = true`.
- [[Feature #15554]]
-
-* Redefining some core methods that are specially optimized by the interpreter
- 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 #18368]: https://bugs.ruby-lang.org/issues/18368
-[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
-[Feature #19236]: https://bugs.ruby-lang.org/issues/19236
-[Bug #19266]: https://bugs.ruby-lang.org/issues/19266
-[Feature #19714]: https://bugs.ruby-lang.org/issues/19714
-[Bug #19918]: https://bugs.ruby-lang.org/issues/19918
-[Bug #20064]: https://bugs.ruby-lang.org/issues/20064
-[Feature #20108]: https://bugs.ruby-lang.org/issues/20108
-[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 #20275]: https://bugs.ruby-lang.org/issues/20275
-[Feature #20293]: https://bugs.ruby-lang.org/issues/20293
-[Feature #20350]: https://bugs.ruby-lang.org/issues/20350
-[Feature #20351]: https://bugs.ruby-lang.org/issues/20351
-[Feature #20429]: https://bugs.ruby-lang.org/issues/20429
-[Bug #20433]: https://bugs.ruby-lang.org/issues/20433
-[Feature #20443]: https://bugs.ruby-lang.org/issues/20443
-[Feature #20470]: https://bugs.ruby-lang.org/issues/20470
-[Feature #20497]: https://bugs.ruby-lang.org/issues/20497
-[Feature #20564]: https://bugs.ruby-lang.org/issues/20564
-[Feature #20576]: https://bugs.ruby-lang.org/issues/20576
-[Feature #20594]: https://bugs.ruby-lang.org/issues/20594
-[Bug #20620]: https://bugs.ruby-lang.org/issues/20620
-[Feature #20624]: https://bugs.ruby-lang.org/issues/20624
-[Feature #20627]: https://bugs.ruby-lang.org/issues/20627
-[Feature #20702]: https://bugs.ruby-lang.org/issues/20702
-[Feature #20705]: https://bugs.ruby-lang.org/issues/20705
-[Feature #20707]: https://bugs.ruby-lang.org/issues/20707
-[Feature #20715]: https://bugs.ruby-lang.org/issues/20715
-[Feature #20775]: https://bugs.ruby-lang.org/issues/20775
-[Feature #20782]: https://bugs.ruby-lang.org/issues/20782
-[Bug #20795]: https://bugs.ruby-lang.org/issues/20795
-[Feature #20811]: https://bugs.ruby-lang.org/issues/20811
-[Feature #20860]: https://bugs.ruby-lang.org/issues/20860
-[Feature #20875]: https://bugs.ruby-lang.org/issues/20875
-[Feature #20876]: https://bugs.ruby-lang.org/issues/20876
-[Feature #20884]: https://bugs.ruby-lang.org/issues/20884
-[Feature #20902]: https://bugs.ruby-lang.org/issues/20902
-[Bug #20929]: https://bugs.ruby-lang.org/issues/20929
-[RubyGems-v3.5.4]: https://github.com/rubygems/rubygems/releases/tag/v3.5.4
-[RubyGems-v3.5.5]: https://github.com/rubygems/rubygems/releases/tag/v3.5.5
-[RubyGems-v3.5.6]: https://github.com/rubygems/rubygems/releases/tag/v3.5.6
-[RubyGems-v3.5.7]: https://github.com/rubygems/rubygems/releases/tag/v3.5.7
-[RubyGems-v3.5.8]: https://github.com/rubygems/rubygems/releases/tag/v3.5.8
-[RubyGems-v3.5.9]: https://github.com/rubygems/rubygems/releases/tag/v3.5.9
-[RubyGems-v3.5.10]: https://github.com/rubygems/rubygems/releases/tag/v3.5.10
-[RubyGems-v3.5.11]: https://github.com/rubygems/rubygems/releases/tag/v3.5.11
-[RubyGems-v3.5.12]: https://github.com/rubygems/rubygems/releases/tag/v3.5.12
-[RubyGems-v3.5.13]: https://github.com/rubygems/rubygems/releases/tag/v3.5.13
-[RubyGems-v3.5.14]: https://github.com/rubygems/rubygems/releases/tag/v3.5.14
-[RubyGems-v3.5.15]: https://github.com/rubygems/rubygems/releases/tag/v3.5.15
-[RubyGems-v3.5.16]: https://github.com/rubygems/rubygems/releases/tag/v3.5.16
-[RubyGems-v3.5.17]: https://github.com/rubygems/rubygems/releases/tag/v3.5.17
-[RubyGems-v3.5.18]: https://github.com/rubygems/rubygems/releases/tag/v3.5.18
-[RubyGems-v3.5.19]: https://github.com/rubygems/rubygems/releases/tag/v3.5.19
-[RubyGems-v3.5.20]: https://github.com/rubygems/rubygems/releases/tag/v3.5.20
-[RubyGems-v3.5.21]: https://github.com/rubygems/rubygems/releases/tag/v3.5.21
-[RubyGems-v3.5.22]: https://github.com/rubygems/rubygems/releases/tag/v3.5.22
-[RubyGems-v3.5.23]: https://github.com/rubygems/rubygems/releases/tag/v3.5.23
-[RubyGems-v3.6.0]: https://github.com/rubygems/rubygems/releases/tag/v3.6.0
-[RubyGems-v3.6.1]: https://github.com/rubygems/rubygems/releases/tag/v3.6.1
-[benchmark-v0.4.0]: https://github.com/ruby/benchmark/releases/tag/v0.4.0
-[bundler-v2.5.4]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.4
-[bundler-v2.5.5]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.5
-[bundler-v2.5.6]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.6
-[bundler-v2.5.7]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.7
-[bundler-v2.5.8]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.8
-[bundler-v2.5.9]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.9
-[bundler-v2.5.10]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.10
-[bundler-v2.5.11]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.11
-[bundler-v2.5.12]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.12
-[bundler-v2.5.13]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.13
-[bundler-v2.5.14]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.14
-[bundler-v2.5.15]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.15
-[bundler-v2.5.16]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.16
-[bundler-v2.5.17]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.17
-[bundler-v2.5.18]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.18
-[bundler-v2.5.19]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.19
-[bundler-v2.5.20]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.20
-[bundler-v2.5.21]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.21
-[bundler-v2.5.22]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.22
-[bundler-v2.5.23]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.23
-[bundler-v2.6.0]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.6.0
-[bundler-v2.6.1]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.6.1
-[date-v3.4.0]: https://github.com/ruby/date/releases/tag/v3.4.0
-[date-v3.4.1]: https://github.com/ruby/date/releases/tag/v3.4.1
-[delegate-v0.4.0]: https://github.com/ruby/delegate/releases/tag/v0.4.0
-[did_you_mean-v2.0.0]: https://github.com/ruby/did_you_mean/releases/tag/v2.0.0
-[digest-v3.2.0.pre0]: https://github.com/ruby/digest/releases/tag/v3.2.0.pre0
-[digest-v3.2.0]: https://github.com/ruby/digest/releases/tag/v3.2.0
-[erb-v4.0.4]: https://github.com/ruby/erb/releases/tag/v4.0.4
-[etc-v1.4.4]: https://github.com/ruby/etc/releases/tag/v1.4.4
-[etc-v1.4.5]: https://github.com/ruby/etc/releases/tag/v1.4.5
-[fcntl-v1.2.0]: https://github.com/ruby/fcntl/releases/tag/v1.2.0
-[fiddle-v1.1.3]: https://github.com/ruby/fiddle/releases/tag/v1.1.3
-[fiddle-v1.1.4]: https://github.com/ruby/fiddle/releases/tag/v1.1.4
-[fiddle-v1.1.5]: https://github.com/ruby/fiddle/releases/tag/v1.1.5
-[fiddle-v1.1.6]: https://github.com/ruby/fiddle/releases/tag/v1.1.6
-[fileutils-v1.7.3]: https://github.com/ruby/fileutils/releases/tag/v1.7.3
-[io-console-v0.7.2]: https://github.com/ruby/io-console/releases/tag/v0.7.2
-[io-console-v0.8.0.beta1]: https://github.com/ruby/io-console/releases/tag/v0.8.0.beta1
-[io-console-v0.8.0]: https://github.com/ruby/io-console/releases/tag/v0.8.0
-[io-nonblock-v0.3.1]: https://github.com/ruby/io-nonblock/releases/tag/v0.3.1
-[ipaddr-v1.2.7]: https://github.com/ruby/ipaddr/releases/tag/v1.2.7
-[irb-v1.11.1]: https://github.com/ruby/irb/releases/tag/v1.11.1
-[irb-v1.11.2]: https://github.com/ruby/irb/releases/tag/v1.11.2
-[irb-v1.12.0]: https://github.com/ruby/irb/releases/tag/v1.12.0
-[irb-v1.13.0]: https://github.com/ruby/irb/releases/tag/v1.13.0
-[irb-v1.13.1]: https://github.com/ruby/irb/releases/tag/v1.13.1
-[irb-v1.13.2]: https://github.com/ruby/irb/releases/tag/v1.13.2
-[irb-v1.14.0]: https://github.com/ruby/irb/releases/tag/v1.14.0
-[irb-v1.14.1]: https://github.com/ruby/irb/releases/tag/v1.14.1
-[irb-v1.14.2]: https://github.com/ruby/irb/releases/tag/v1.14.2
-[irb-v1.14.3]: https://github.com/ruby/irb/releases/tag/v1.14.3
-[json-v2.7.2]: https://github.com/ruby/json/releases/tag/v2.7.2
-[json-v2.7.3.rc1]: https://github.com/ruby/json/releases/tag/v2.7.3.rc1
-[json-v2.7.3]: https://github.com/ruby/json/releases/tag/v2.7.3
-[json-v2.7.4]: https://github.com/ruby/json/releases/tag/v2.7.4
-[json-v2.7.5]: https://github.com/ruby/json/releases/tag/v2.7.5
-[json-v2.7.6]: https://github.com/ruby/json/releases/tag/v2.7.6
-[json-v2.8.0]: https://github.com/ruby/json/releases/tag/v2.8.0
-[json-v2.8.1]: https://github.com/ruby/json/releases/tag/v2.8.1
-[json-v2.8.2]: https://github.com/ruby/json/releases/tag/v2.8.2
-[json-v2.9.0]: https://github.com/ruby/json/releases/tag/v2.9.0
-[json-v2.9.1]: https://github.com/ruby/json/releases/tag/v2.9.1
-[logger-v1.6.1]: https://github.com/ruby/logger/releases/tag/v1.6.1
-[logger-v1.6.2]: https://github.com/ruby/logger/releases/tag/v1.6.2
-[logger-v1.6.3]: https://github.com/ruby/logger/releases/tag/v1.6.3
-[logger-v1.6.4]: https://github.com/ruby/logger/releases/tag/v1.6.4
-[net-http-v0.4.1]: https://github.com/ruby/net-http/releases/tag/v0.4.1
-[net-http-v0.5.0]: https://github.com/ruby/net-http/releases/tag/v0.5.0
-[net-http-v0.6.0]: https://github.com/ruby/net-http/releases/tag/v0.6.0
-[open-uri-v0.5.0]: https://github.com/ruby/open-uri/releases/tag/v0.5.0
-[optparse-v0.5.0]: https://github.com/ruby/optparse/releases/tag/v0.5.0
-[optparse-v0.6.0]: https://github.com/ruby/optparse/releases/tag/v0.6.0
-[ostruct-v0.6.1]: https://github.com/ruby/ostruct/releases/tag/v0.6.1
-[pathname-v0.4.0]: https://github.com/ruby/pathname/releases/tag/v0.4.0
-[pp-v0.6.0]: https://github.com/ruby/pp/releases/tag/v0.6.0
-[pp-v0.6.1]: https://github.com/ruby/pp/releases/tag/v0.6.1
-[pp-v0.6.2]: https://github.com/ruby/pp/releases/tag/v0.6.2
-[prism-v0.20.0]: https://github.com/ruby/prism/releases/tag/v0.20.0
-[prism-v0.21.0]: https://github.com/ruby/prism/releases/tag/v0.21.0
-[prism-v0.22.0]: https://github.com/ruby/prism/releases/tag/v0.22.0
-[prism-v0.23.0]: https://github.com/ruby/prism/releases/tag/v0.23.0
-[prism-v0.24.0]: https://github.com/ruby/prism/releases/tag/v0.24.0
-[prism-v0.25.0]: https://github.com/ruby/prism/releases/tag/v0.25.0
-[prism-v0.26.0]: https://github.com/ruby/prism/releases/tag/v0.26.0
-[prism-v0.27.0]: https://github.com/ruby/prism/releases/tag/v0.27.0
-[prism-v0.28.0]: https://github.com/ruby/prism/releases/tag/v0.28.0
-[prism-v0.29.0]: https://github.com/ruby/prism/releases/tag/v0.29.0
-[prism-v0.30.0]: https://github.com/ruby/prism/releases/tag/v0.30.0
-[prism-v1.0.0]: https://github.com/ruby/prism/releases/tag/v1.0.0
-[prism-v1.1.0]: https://github.com/ruby/prism/releases/tag/v1.1.0
-[prism-v1.2.0]: https://github.com/ruby/prism/releases/tag/v1.2.0
-[pstore-v0.1.4]: https://github.com/ruby/pstore/releases/tag/v0.1.4
-[psych-v5.2.0.beta1]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta1
-[psych-v5.2.0]: https://github.com/ruby/psych/releases/tag/v5.2.0
-[psych-v5.2.0.beta2]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta2
-[psych-v5.2.0.beta3]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta3
-[psych-v5.2.0.beta4]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta4
-[psych-v5.2.0.beta5]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta5
-[psych-v5.2.0.beta6]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta6
-[psych-v5.2.0.beta7]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta7
-[psych-v5.2.1]: https://github.com/ruby/psych/releases/tag/v5.2.1
-[psych-v5.2.2]: https://github.com/ruby/psych/releases/tag/v5.2.2
-[rdoc-v6.7.0]: https://github.com/ruby/rdoc/releases/tag/v6.7.0
-[rdoc-v6.8.0]: https://github.com/ruby/rdoc/releases/tag/v6.8.0
-[rdoc-v6.8.1]: https://github.com/ruby/rdoc/releases/tag/v6.8.1
-[rdoc-v6.9.0]: https://github.com/ruby/rdoc/releases/tag/v6.9.0
-[rdoc-v6.9.1]: https://github.com/ruby/rdoc/releases/tag/v6.9.1
-[rdoc-v6.10.0]: https://github.com/ruby/rdoc/releases/tag/v6.10.0
-[reline-v0.5.0.pre.1]: https://github.com/ruby/reline/releases/tag/v0.5.0.pre.1
-[reline-v0.4.2]: https://github.com/ruby/reline/releases/tag/v0.4.2
-[reline-v0.4.3]: https://github.com/ruby/reline/releases/tag/v0.4.3
-[reline-v0.5.0]: https://github.com/ruby/reline/releases/tag/v0.5.0
-[reline-v0.5.1]: https://github.com/ruby/reline/releases/tag/v0.5.1
-[reline-v0.5.2]: https://github.com/ruby/reline/releases/tag/v0.5.2
-[reline-v0.5.3]: https://github.com/ruby/reline/releases/tag/v0.5.3
-[reline-v0.5.4]: https://github.com/ruby/reline/releases/tag/v0.5.4
-[reline-v0.5.5]: https://github.com/ruby/reline/releases/tag/v0.5.5
-[reline-v0.5.6]: https://github.com/ruby/reline/releases/tag/v0.5.6
-[reline-v0.5.7]: https://github.com/ruby/reline/releases/tag/v0.5.7
-[reline-v0.5.8]: https://github.com/ruby/reline/releases/tag/v0.5.8
-[reline-v0.5.9]: https://github.com/ruby/reline/releases/tag/v0.5.9
-[reline-v0.5.10]: https://github.com/ruby/reline/releases/tag/v0.5.10
-[reline-v0.5.11]: https://github.com/ruby/reline/releases/tag/v0.5.11
-[reline-v0.5.12]: https://github.com/ruby/reline/releases/tag/v0.5.12
-[reline-v0.6.0]: https://github.com/ruby/reline/releases/tag/v0.6.0
-[resolv-v0.4.0]: https://github.com/ruby/resolv/releases/tag/v0.4.0
-[resolv-v0.5.0]: https://github.com/ruby/resolv/releases/tag/v0.5.0
-[resolv-v0.6.0]: https://github.com/ruby/resolv/releases/tag/v0.6.0
-[securerandom-v0.3.2]: https://github.com/ruby/securerandom/releases/tag/v0.3.2
-[securerandom-v0.4.0]: https://github.com/ruby/securerandom/releases/tag/v0.4.0
-[securerandom-v0.4.1]: https://github.com/ruby/securerandom/releases/tag/v0.4.1
-[set-v1.1.1]: https://github.com/ruby/set/releases/tag/v1.1.1
-[shellwords-v0.2.1]: https://github.com/ruby/shellwords/releases/tag/v0.2.1
-[shellwords-v0.2.2]: https://github.com/ruby/shellwords/releases/tag/v0.2.2
-[singleton-v0.3.0]: https://github.com/ruby/singleton/releases/tag/v0.3.0
-[stringio-v3.1.1]: https://github.com/ruby/stringio/releases/tag/v3.1.1
-[stringio-v3.1.2]: https://github.com/ruby/stringio/releases/tag/v3.1.2
-[strscan-v3.0.8]: https://github.com/ruby/strscan/releases/tag/v3.0.8
-[strscan-v3.0.9]: https://github.com/ruby/strscan/releases/tag/v3.0.9
-[strscan-v3.1.0]: https://github.com/ruby/strscan/releases/tag/v3.1.0
-[strscan-v3.1.1]: https://github.com/ruby/strscan/releases/tag/v3.1.1
-[strscan-v3.1.2]: https://github.com/ruby/strscan/releases/tag/v3.1.2
-[syntax_suggest-v2.0.1]: https://github.com/ruby/syntax_suggest/releases/tag/v2.0.1
-[syntax_suggest-v2.0.2]: https://github.com/ruby/syntax_suggest/releases/tag/v2.0.2
-[tempfile-v0.3.0]: https://github.com/ruby/tempfile/releases/tag/v0.3.0
-[tempfile-v0.3.1]: https://github.com/ruby/tempfile/releases/tag/v0.3.1
-[time-v0.4.0]: https://github.com/ruby/time/releases/tag/v0.4.0
-[time-v0.4.1]: https://github.com/ruby/time/releases/tag/v0.4.1
-[timeout-v0.4.2]: https://github.com/ruby/timeout/releases/tag/v0.4.2
-[timeout-v0.4.3]: https://github.com/ruby/timeout/releases/tag/v0.4.3
-[tmpdir-v0.3.0]: https://github.com/ruby/tmpdir/releases/tag/v0.3.0
-[tmpdir-v0.3.1]: https://github.com/ruby/tmpdir/releases/tag/v0.3.1
-[uri-v0.13.1]: https://github.com/ruby/uri/releases/tag/v0.13.1
-[uri-v1.0.0]: https://github.com/ruby/uri/releases/tag/v1.0.0
-[uri-v1.0.1]: https://github.com/ruby/uri/releases/tag/v1.0.1
-[uri-v1.0.2]: https://github.com/ruby/uri/releases/tag/v1.0.2
-[win32ole-v1.9.0]: https://github.com/ruby/win32ole/releases/tag/v1.9.0
-[win32ole-v1.9.1]: https://github.com/ruby/win32ole/releases/tag/v1.9.1[]
-[yaml-v0.4.0]: https://github.com/ruby/yaml/releases/tag/v0.4.0
-[zlib-v3.1.1]: https://github.com/ruby/zlib/releases/tag/v3.1.1
-[zlib-v3.2.0]: https://github.com/ruby/zlib/releases/tag/v3.2.0
-[zlib-v3.2.1]: https://github.com/ruby/zlib/releases/tag/v3.2.1
-[power_assert-v2.0.4]: https://github.com/ruby/power_assert/releases/tag/v2.0.4
-[rake-v13.2.0]: https://github.com/ruby/rake/releases/tag/v13.2.0
-[rake-v13.2.1]: https://github.com/ruby/rake/releases/tag/v13.2.1
-[test-unit-3.6.2]: https://github.com/test-unit/test-unit/releases/tag/3.6.2
-[test-unit-3.6.3]: https://github.com/test-unit/test-unit/releases/tag/3.6.3
-[test-unit-3.6.4]: https://github.com/test-unit/test-unit/releases/tag/3.6.4
-[test-unit-3.6.5]: https://github.com/test-unit/test-unit/releases/tag/3.6.5
-[test-unit-3.6.6]: https://github.com/test-unit/test-unit/releases/tag/3.6.6
-[test-unit-3.6.7]: https://github.com/test-unit/test-unit/releases/tag/3.6.7
-[rexml-v3.2.7]: https://github.com/ruby/rexml/releases/tag/v3.2.7
-[rexml-v3.2.8]: https://github.com/ruby/rexml/releases/tag/v3.2.8
-[rexml-v3.2.9]: https://github.com/ruby/rexml/releases/tag/v3.2.9
-[rexml-v3.3.0]: https://github.com/ruby/rexml/releases/tag/v3.3.0
-[rexml-v3.3.1]: https://github.com/ruby/rexml/releases/tag/v3.3.1
-[rexml-v3.3.2]: https://github.com/ruby/rexml/releases/tag/v3.3.2
-[rexml-v3.3.3]: https://github.com/ruby/rexml/releases/tag/v3.3.3
-[rexml-v3.3.4]: https://github.com/ruby/rexml/releases/tag/v3.3.4
-[rexml-v3.3.5]: https://github.com/ruby/rexml/releases/tag/v3.3.5
-[rexml-v3.3.6]: https://github.com/ruby/rexml/releases/tag/v3.3.6
-[rexml-v3.3.7]: https://github.com/ruby/rexml/releases/tag/v3.3.7
-[rexml-v3.3.8]: https://github.com/ruby/rexml/releases/tag/v3.3.8
-[rexml-v3.3.9]: https://github.com/ruby/rexml/releases/tag/v3.3.9
-[rexml-v3.4.0]: https://github.com/ruby/rexml/releases/tag/v3.4.0
-[rss-0.3.1]: https://github.com/ruby/rss/releases/tag/0.3.1
-[net-ftp-v0.3.4]: https://github.com/ruby/net-ftp/releases/tag/v0.3.4
-[net-ftp-v0.3.5]: https://github.com/ruby/net-ftp/releases/tag/v0.3.5
-[net-ftp-v0.3.6]: https://github.com/ruby/net-ftp/releases/tag/v0.3.6
-[net-ftp-v0.3.7]: https://github.com/ruby/net-ftp/releases/tag/v0.3.7
-[net-ftp-v0.3.8]: https://github.com/ruby/net-ftp/releases/tag/v0.3.8
-[net-imap-v0.4.9.1]: https://github.com/ruby/net-imap/releases/tag/v0.4.9.1
-[net-imap-v0.4.10]: https://github.com/ruby/net-imap/releases/tag/v0.4.10
-[net-imap-v0.4.11]: https://github.com/ruby/net-imap/releases/tag/v0.4.11
-[net-imap-v0.4.12]: https://github.com/ruby/net-imap/releases/tag/v0.4.12
-[net-imap-v0.4.13]: https://github.com/ruby/net-imap/releases/tag/v0.4.13
-[net-imap-v0.4.14]: https://github.com/ruby/net-imap/releases/tag/v0.4.14
-[net-imap-v0.4.15]: https://github.com/ruby/net-imap/releases/tag/v0.4.15
-[net-imap-v0.4.16]: https://github.com/ruby/net-imap/releases/tag/v0.4.16
-[net-imap-v0.4.17]: https://github.com/ruby/net-imap/releases/tag/v0.4.17
-[net-imap-v0.5.0]: https://github.com/ruby/net-imap/releases/tag/v0.5.0
-[net-imap-v0.4.18]: https://github.com/ruby/net-imap/releases/tag/v0.4.18
-[net-imap-v0.5.1]: https://github.com/ruby/net-imap/releases/tag/v0.5.1
-[net-imap-v0.5.2]: https://github.com/ruby/net-imap/releases/tag/v0.5.2
-[net-smtp-v0.4.0.1]: https://github.com/ruby/net-smtp/releases/tag/v0.4.0.1
-[net-smtp-v0.5.0]: https://github.com/ruby/net-smtp/releases/tag/v0.5.0
-[prime-v0.1.3]: https://github.com/ruby/prime/releases/tag/v0.1.3
-[rbs-v3.4.1]: https://github.com/ruby/rbs/releases/tag/v3.4.1
-[rbs-v3.4.2]: https://github.com/ruby/rbs/releases/tag/v3.4.2
-[rbs-v3.4.3]: https://github.com/ruby/rbs/releases/tag/v3.4.3
-[rbs-v3.4.4]: https://github.com/ruby/rbs/releases/tag/v3.4.4
-[rbs-v3.5.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.5.0.pre.1
-[rbs-v3.5.0.pre.2]: https://github.com/ruby/rbs/releases/tag/v3.5.0.pre.2
-[rbs-v3.5.0]: https://github.com/ruby/rbs/releases/tag/v3.5.0
-[rbs-v3.5.1]: https://github.com/ruby/rbs/releases/tag/v3.5.1
-[rbs-v3.5.2]: https://github.com/ruby/rbs/releases/tag/v3.5.2
-[rbs-v3.5.3]: https://github.com/ruby/rbs/releases/tag/v3.5.3
-[rbs-v3.6.0.dev.1]: https://github.com/ruby/rbs/releases/tag/v3.6.0.dev.1
-[rbs-v3.6.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.6.0.pre.1
-[rbs-v3.6.0.pre.2]: https://github.com/ruby/rbs/releases/tag/v3.6.0.pre.2
-[rbs-v3.6.0.pre.3]: https://github.com/ruby/rbs/releases/tag/v3.6.0.pre.3
-[rbs-v3.6.0]: https://github.com/ruby/rbs/releases/tag/v3.6.0
-[rbs-v3.6.1]: https://github.com/ruby/rbs/releases/tag/v3.6.1
-[rbs-v3.7.0.dev.1]: https://github.com/ruby/rbs/releases/tag/v3.7.0.dev.1
-[rbs-v3.7.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.7.0.pre.1
-[rbs-v3.7.0]: https://github.com/ruby/rbs/releases/tag/v3.7.0
-[debug-v1.9.2]: https://github.com/ruby/debug/releases/tag/v1.9.2
-[debug-v1.10.0]: https://github.com/ruby/debug/releases/tag/v1.10.0
-[racc-v1.8.0]: https://github.com/ruby/racc/releases/tag/v1.8.0
-[racc-v1.8.1]: https://github.com/ruby/racc/releases/tag/v1.8.1
-[mutex_m-v0.3.0]: https://github.com/ruby/mutex_m/releases/tag/v0.3.0
-[bigdecimal-v3.1.6]: https://github.com/ruby/bigdecimal/releases/tag/v3.1.6
-[bigdecimal-v3.1.7]: https://github.com/ruby/bigdecimal/releases/tag/v3.1.7
-[bigdecimal-v3.1.8]: https://github.com/ruby/bigdecimal/releases/tag/v3.1.8
-[drb-v2.2.1]: https://github.com/ruby/drb/releases/tag/v2.2.1
-[nkf-v0.2.0]: https://github.com/ruby/nkf/releases/tag/v0.2.0
-[syslog-v0.2.0]: https://github.com/ruby/syslog/releases/tag/v0.2.0
-[csv-v3.2.9]: https://github.com/ruby/csv/releases/tag/v3.2.9
-[csv-v3.3.0]: https://github.com/ruby/csv/releases/tag/v3.3.0
-[csv-v3.3.1]: https://github.com/ruby/csv/releases/tag/v3.3.1
-[ruby/net-http-sspi]: https://github.com/ruby/net-http-sspi
-
-[RubyGems]: https://github.com/rubygems/rubygems
-[benchmark]: https://github.com/ruby/benchmark
-[bundler]: https://github.com/rubygems/rubygems
-[date]: https://github.com/ruby/date
-[delegate]: https://github.com/ruby/delegate
-[did_you_mean]: https://github.com/ruby/did_you_mean
-[digest]: https://github.com/ruby/digest
-[erb]: https://github.com/ruby/erb
-[error_highlight]: https://github.com/ruby/error_highlight
-[etc]: https://github.com/ruby/etc
-[fcntl]: https://github.com/ruby/fcntl
-[fiddle]: https://github.com/ruby/fiddle
-[fileutils]: https://github.com/ruby/fileutils
-[io-console]: https://github.com/ruby/io-console
-[io-nonblock]: https://github.com/ruby/io-nonblock
-[ipaddr]: https://github.com/ruby/ipaddr
-[irb]: https://github.com/ruby/irb
-[json]: https://github.com/ruby/json
-[logger]: https://github.com/ruby/logger
-[net-http]: https://github.com/ruby/net-http
-[open-uri]: https://github.com/ruby/open-uri
-[optparse]: https://github.com/ruby/optparse
-[ostruct]: https://github.com/ruby/ostruct
-[pathname]: https://github.com/ruby/pathname
-[pp]: https://github.com/ruby/pp
-[prism]: https://github.com/ruby/prism
-[pstore]: https://github.com/ruby/pstore
-[psych]: https://github.com/ruby/psych
-[rdoc]: https://github.com/ruby/rdoc
-[reline]: https://github.com/ruby/reline
-[resolv]: https://github.com/ruby/resolv
-[securerandom]: https://github.com/ruby/securerandom
-[set]: https://github.com/ruby/set
-[shellwords]: https://github.com/ruby/shellwords
-[singleton]: https://github.com/ruby/singleton
-[stringio]: https://github.com/ruby/stringio
-[strscan]: https://github.com/ruby/strscan
-[syntax_suggest]: https://github.com/ruby/syntax_suggest
-[tempfile]: https://github.com/ruby/tempfile
-[time]: https://github.com/ruby/time
-[timeout]: https://github.com/ruby/timeout
-[tmpdir]: https://github.com/ruby/tmpdir
-[uri]: https://github.com/ruby/uri
-[win32ole]: https://github.com/ruby/win32ole
-[yaml]: https://github.com/ruby/yaml
-[zlib]: https://github.com/ruby/zlib
-
-[repl_type_completor]: https://github.com/ruby/repl_type_completor
-[minitest]: https://github.com/seattlerb/minitest
-[power_assert]: https://github.com/ruby/power_assert
-[rake]: https://github.com/ruby/rake
-[test-unit]: https://github.com/test-unit/test-unit
-[rexml]: https://github.com/ruby/rexml
-[rss]: https://github.com/ruby/rss
-[net-ftp]: https://github.com/ruby/net-ftp
-[net-imap]: https://github.com/ruby/net-imap
-[net-smtp]: https://github.com/ruby/net-smtp
-[prime]: https://github.com/ruby/prime
-[rbs]: https://github.com/ruby/rbs
-[debug]: https://github.com/ruby/debug
-[racc]: https://github.com/ruby/racc
-[mutex_m]: https://github.com/ruby/mutex_m
-[getoptlong]: https://github.com/ruby/getoptlong
-[base64]: https://github.com/ruby/base64
-[bigdecimal]: https://github.com/ruby/bigdecimal
-[observer]: https://github.com/ruby/observer
-[abbrev]: https://github.com/ruby/abbrev
-[resolv-replace]: https://github.com/ruby/resolv-replace
-[rinda]: https://github.com/ruby/rinda
-[drb]: https://github.com/ruby/drb
-[nkf]: https://github.com/ruby/nkf
-[syslog]: https://github.com/ruby/syslog
-[csv]: https://github.com/ruby/csv
+### Ractor
+
+A lot of work has gone into making Ractors more stable, performant, and usable. These improvements bring Ractor implementation closer to leaving experimental status.
+
+## JIT
+
+[Feature #8948]: https://bugs.ruby-lang.org/issues/8948
+[Feature #15330]: https://bugs.ruby-lang.org/issues/15330
+[Feature #21390]: https://bugs.ruby-lang.org/issues/21390
+[Feature #21768]: https://bugs.ruby-lang.org/issues/21768
+[Feature #21785]: https://bugs.ruby-lang.org/issues/21785
+[Feature #21796]: https://bugs.ruby-lang.org/issues/21796
+[Feature #21853]: https://bugs.ruby-lang.org/issues/21853
+[Feature #21861]: https://bugs.ruby-lang.org/issues/21861
+[Feature #21932]: https://bugs.ruby-lang.org/issues/21932
+[Feature #21981]: https://bugs.ruby-lang.org/issues/21981
+[RubyGems-v4.0.4]: https://github.com/rubygems/rubygems/releases/tag/v4.0.4
+[RubyGems-v4.0.5]: https://github.com/rubygems/rubygems/releases/tag/v4.0.5
+[RubyGems-v4.0.6]: https://github.com/rubygems/rubygems/releases/tag/v4.0.6
+[RubyGems-v4.0.7]: https://github.com/rubygems/rubygems/releases/tag/v4.0.7
+[RubyGems-v4.0.8]: https://github.com/rubygems/rubygems/releases/tag/v4.0.8
+[RubyGems-v4.0.9]: https://github.com/rubygems/rubygems/releases/tag/v4.0.9
+[RubyGems-v4.0.10]: https://github.com/rubygems/rubygems/releases/tag/v4.0.10
+[RubyGems-v4.0.11]: https://github.com/rubygems/rubygems/releases/tag/v4.0.11
+[RubyGems-v4.0.12]: https://github.com/rubygems/rubygems/releases/tag/v4.0.12
+[RubyGems-v4.0.13]: https://github.com/rubygems/rubygems/releases/tag/v4.0.13
+[bundler-v4.0.4]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.4
+[bundler-v4.0.5]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.5
+[bundler-v4.0.6]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.6
+[bundler-v4.0.7]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.7
+[bundler-v4.0.8]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.8
+[bundler-v4.0.9]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.9
+[bundler-v4.0.10]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.10
+[bundler-v4.0.11]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.11
+[bundler-v4.0.12]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.12
+[bundler-v4.0.13]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.13
+[erb-v6.0.1.1]: https://github.com/ruby/erb/releases/tag/v6.0.1.1
+[erb-v6.0.2]: https://github.com/ruby/erb/releases/tag/v6.0.2
+[erb-v6.0.3]: https://github.com/ruby/erb/releases/tag/v6.0.3
+[erb-v6.0.4]: https://github.com/ruby/erb/releases/tag/v6.0.4
+[ipaddr-v1.2.9]: https://github.com/ruby/ipaddr/releases/tag/v1.2.9
+[json-v2.18.1]: https://github.com/ruby/json/releases/tag/v2.18.1
+[json-v2.19.0]: https://github.com/ruby/json/releases/tag/v2.19.0
+[json-v2.19.1]: https://github.com/ruby/json/releases/tag/v2.19.1
+[json-v2.19.2]: https://github.com/ruby/json/releases/tag/v2.19.2
+[json-v2.19.3]: https://github.com/ruby/json/releases/tag/v2.19.3
+[json-v2.19.4]: https://github.com/ruby/json/releases/tag/v2.19.4
+[json-v2.19.5]: https://github.com/ruby/json/releases/tag/v2.19.5
+[json-v2.19.6]: https://github.com/ruby/json/releases/tag/v2.19.6
+[json-v2.19.7]: https://github.com/ruby/json/releases/tag/v2.19.7
+[openssl-v4.0.1]: https://github.com/ruby/openssl/releases/tag/v4.0.1
+[openssl-v4.0.2]: https://github.com/ruby/openssl/releases/tag/v4.0.2
+[prism-v1.8.0]: https://github.com/ruby/prism/releases/tag/v1.8.0
+[prism-v1.8.1]: https://github.com/ruby/prism/releases/tag/v1.8.1
+[prism-v1.9.0]: https://github.com/ruby/prism/releases/tag/v1.9.0
+[resolv-v0.7.1]: https://github.com/ruby/resolv/releases/tag/v0.7.1
+[strscan-v3.1.7]: https://github.com/ruby/strscan/releases/tag/v3.1.7
+[strscan-v3.1.8]: https://github.com/ruby/strscan/releases/tag/v3.1.8
+[timeout-v0.6.1]: https://github.com/ruby/timeout/releases/tag/v0.6.1
+[zlib-v3.2.3]: https://github.com/ruby/zlib/releases/tag/v3.2.3
+[rake-v13.4.0]: https://github.com/ruby/rake/releases/tag/v13.4.0
+[rake-v13.4.1]: https://github.com/ruby/rake/releases/tag/v13.4.1
+[rake-v13.4.2]: https://github.com/ruby/rake/releases/tag/v13.4.2
+[test-unit-3.7.6]: https://github.com/test-unit/test-unit/releases/tag/3.7.6
+[test-unit-3.7.7]: https://github.com/test-unit/test-unit/releases/tag/3.7.7
+[test-unit-3.7.8]: https://github.com/test-unit/test-unit/releases/tag/3.7.8
+[net-imap-v0.6.3]: https://github.com/ruby/net-imap/releases/tag/v0.6.3
+[net-imap-v0.6.4]: https://github.com/ruby/net-imap/releases/tag/v0.6.4
+[rbs-v3.10.1]: https://github.com/ruby/rbs/releases/tag/v3.10.1
+[rbs-v3.10.2]: https://github.com/ruby/rbs/releases/tag/v3.10.2
+[rbs-v3.10.3]: https://github.com/ruby/rbs/releases/tag/v3.10.3
+[rbs-v3.10.4]: https://github.com/ruby/rbs/releases/tag/v3.10.4
+[rbs-v4.0.0.dev.5]: https://github.com/ruby/rbs/releases/tag/v4.0.0.dev.5
+[rbs-v4.0.0]: https://github.com/ruby/rbs/releases/tag/v4.0.0
+[rbs-v4.0.2]: https://github.com/ruby/rbs/releases/tag/v4.0.2
+[bigdecimal-v4.1.0]: https://github.com/ruby/bigdecimal/releases/tag/v4.1.0
+[bigdecimal-v4.1.1]: https://github.com/ruby/bigdecimal/releases/tag/v4.1.1
+[bigdecimal-v4.1.2]: https://github.com/ruby/bigdecimal/releases/tag/v4.1.2
+[resolv-replace-v0.2.0]: https://github.com/ruby/resolv-replace/releases/tag/v0.2.0
+[syslog-v0.4.0]: https://github.com/ruby/syslog/releases/tag/v0.4.0
+[repl_type_completor-v0.1.13]: https://github.com/ruby/repl_type_completor/releases/tag/v0.1.13
+[repl_type_completor-v0.1.14]: https://github.com/ruby/repl_type_completor/releases/tag/v0.1.14
+[repl_type_completor-v0.1.15]: https://github.com/ruby/repl_type_completor/releases/tag/v0.1.15
+[pstore-v0.2.1]: https://github.com/ruby/pstore/releases/tag/v0.2.1
+[rdoc-v7.0.4]: https://github.com/ruby/rdoc/releases/tag/v7.0.4
+[rdoc-v7.1.0]: https://github.com/ruby/rdoc/releases/tag/v7.1.0
+[rdoc-v7.2.0]: https://github.com/ruby/rdoc/releases/tag/v7.2.0
+[win32ole-v1.9.3]: https://github.com/ruby/win32ole/releases/tag/v1.9.3
+[irb-v1.17.0]: https://github.com/ruby/irb/releases/tag/v1.17.0
+[irb-v1.18.0]: https://github.com/ruby/irb/releases/tag/v1.18.0