diff options
Diffstat (limited to 'NEWS.md')
| -rw-r--r-- | NEWS.md | 745 |
1 files changed, 223 insertions, 522 deletions
@@ -1,564 +1,265 @@ -# NEWS for Ruby 3.0.0 +# NEWS for Ruby 4.1.0 -This document is a list of user visible feature changes -since the **2.7.0** release, except for bug fixes. +This document is a list of user-visible feature changes +since the **4.0.0** release, except for bug fixes. -Note that each entry is kept so brief that no reason behind or reference -information is supplied with. For a full list of changes with all -sufficient information, see the ChangeLog file or Redmine -(e.g. `https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER`). +Note that each entry is kept to a minimum, see links for details. ## Language changes -* Keyword arguments are now separated from positional arguments. - Code that resulted in deprecation warnings in Ruby 2.7 will now - result in ArgumentError or different behavior. [[Feature #14183]] - -* Arguments forwarding (`...`) now supports leading arguments. - [[Feature #16378]] - - ```ruby - def method_missing(meth, ...) - send(:"do_#{meth}", ...) - end - ``` - -* Procs accepting a single rest argument and keywords are no longer - subject to autosplatting. This now matches the behavior of Procs - accepting a single rest argument and no keywords. - [[Feature #16166]] - - ```ruby - pr = proc{|*a, **kw| [a, kw]} - - pr.call([1]) - # 2.7 => [[1], {}] - # 3.0 => [[[1]], {}] - - pr.call([1, {a: 1}]) - # 2.7 => [[1], {:a=>1}] # and deprecation warning - # 3.0 => [[[1, {:a=>1}]], {}] - ``` - -* $SAFE is now a normal global variable with no special behavior. - C-API methods related to $SAFE have been removed. - [[Feature #16131]] - -* yield in singleton class definitions in methods is now a SyntaxError - instead of a warning. yield in a class definition outside of a method - is now a SyntaxError instead of a LocalJumpError. [[Feature #15575]] - -* Pattern matching is no longer experimental. [[Feature #17260]] - -* One-line pattern matching now uses `=>` instead of `in`. [EXPERIMENTAL] - [[Feature #17260]] - - ```ruby - # version 3.0 - {a: 0, b: 1} => {a:} - p a # => 0 - - # version 2.7 - {a: 0, b: 1} in {a:} - p a # => 0 - ``` - -* Find pattern is added. [EXPERIMENTAL] - [[Feature #16828]] - - ```ruby - case ["a", 1, "b", "c", 2, "d", "e", "f", 3] - in [*pre, String => x, String => y, *post] - p pre #=> ["a", 1] - p x #=> "b" - p y #=> "c" - p post #=> [2, "d", "e", "f", 3] - end - ``` - -* When a class variable is overtaken by the same definition in an - ancestor class/module, a RuntimeError is now raised (previously, - it only issued a warning in verbose mode. Additionally, accessing a - class variable from the toplevel scope is now a RuntimeError. - [[Bug #14541]] - -* Endless method definition is added. [EXPERIMENTAL] - [[Feature #16746]] - - ```ruby - def square(x) = x * x - ``` - -* Interpolated String literals are no longer frozen when - `# frozen-string-literal: true` is used. [[Feature #17104]] - -* A static analysis foundation is introduced. See "Static analysis" section in detail. - * RBS is introduced. It is a type definition language for Ruby programs. - * TypeProf is experimentally bundled. It is a type analysis tool for Ruby programs. - -## Command line options - -### `--help` option - -When the environment variable `RUBY_PAGER` or `PAGER` is present and has -non-empty value, and the standard input and output are tty, `--help` -option shows the help message via the pager designated by the value. -[[Feature #16754]] +* `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 -Outstanding ones only. +Note: We're only listing outstanding class updates. * Array - * Modified methods - - * The following methods now return Array instances instead of - subclass instances when called on subclass instances: - [[Bug #6087]] - - * `Array#drop` - * `Array#drop_while` - * `Array#flatten` - * `Array#slice!` - * `Array#slice/#[]` - * `Array#take` - * `Array#take_while` - * `Array#uniq` - * `Array#*` - -* Dir - - * Modified method - - * Dir.glob and Dir.[] now sort the results by default, and - accept `sort:` keyword option. [[Feature #8709]] + * `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]] * ENV - * New method - - * ENV.except, which returns a hash excluding the given keys - and their values. [[Feature #15822]] - -* Hash - - * Modified method - - * Hash#transform_keys now accepts a hash that maps keys to new - keys. [[Feature #16274]] - - * New method - - * Hash#except, which returns a hash excluding the given keys - and their values. [[Feature #15822]] - -* Kernel - - * Modified method - - * Kernel#clone when called with `freeze: false` keyword will call - `#initialize_clone` with the `freeze: false` keyword. - [[Bug #14266]] - - * Kernel#clone when called with `freeze: true` keyword will call - `#initialize_clone` with the `freeze: true` keyword, and will - return a frozen copy even if the receiver is unfrozen. - [[Feature #16175]] - - * Kernel#eval when called with two arguments will use "(eval)" - for `__FILE__` and 1 for `__LINE__` in the evaluated code. - [[Bug #4352]] - - * Kernel#lambda now warns if called without a literal block. - [[Feature #15973]] - -* Module - - * Modified method - - * Module#include and #prepend now affect classes and modules that - have already included or prepended the receiver, mirroring the - behavior if the arguments were included in the receiver before - the other modules and classes included or prepended the receiver. - [[Feature #9573]] - - ```ruby - class C; end - module M1; end - module M2; end - C.include M1 - M1.include M2 - p C.ancestors #=> [C, M1, M2, Object, Kernel, BasicObject] - ``` - -* Range - - * All Range objects are frozen. [Feature #15504] - -* Thread - - * Introduce `Thread#scheduler` for intercepting blocking operations and - `Thread.scheduler` for accessing the current scheduler. See - doc/scheduler.md for more details. [[Feature #16786]] - * `Thread#blocking?` tells whether the current execution context is - blocking. [[Feature #16786]] - * `Thread#join` invokes the scheduler hooks `block`/`unblock` in a - non-blocking execution context. [[Feature #16786]] - * `Thread.ignore_deadlock` accessor for disabling the default deadlock - detection, allowing the use of signal handlers to break deadlock. - [[Bug #13768]] - -* Mutex - - * `Mutex` is now acquired per-`Fiber` instead of per-`Thread`. This change - should be compatible for essentially all usages and avoids blocking when - using a scheduler. [[Feature #16792]] - -* Fiber - - * `Fiber.new(blocking: true/false)` allows you to create non-blocking - execution contexts. [[Feature #16786]] - * `Fiber#blocking?` tells whether the fiber is non-blocking. [[Feature #16786]] - * `Fiber#backtrace` & `Fiber#backtrace_locations` provide per-fiber backtrace. - [[Feature #16815]] - * The limitation of `Fiber#transfer` is relaxed. [Bug #17221] + * `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]] * Kernel - * `Kernel.sleep(...)` invokes the scheduler hook `#kernel_sleep(...)` in a - non-blocking execution context. [[Feature #16786]] - -* IO - - * `IO#nonblock?` now defaults to `true`. [[Feature #16786]] - * `IO#wait_readable`, `IO#wait_writable`, `IO#read`, `IO#write` and other - related methods (e.g. `#puts`, `#gets`) may invoke the scheduler hook - `#io_wait(io, events, timeout)` in a non-blocking execution context. - [[Feature #16786]] - -* ConditionVariable - - * `ConditionVariable#wait` may now invoke the `block`/`unblock` scheduler - hooks in a non-blocking context. [[Feature #16786]] - -* Queue / SizedQueue - - * `Queue#pop`, `SizedQueue#push` and related methods may now invoke the - `block`/`unblock` scheduler hooks in a non-blocking context. - [[Feature #16786]] + * `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]] -* Ractor +* MatchData - * new class to enable parallel execution. See doc/ractor.md for - more details. + * `MatchData#integer_at` is added. It converts the matched substring to + integer and return the result. [[Feature #21932]] -* Symbol +* Regexp - * Modified method + * All instances of `Regexp` are now frozen, not just literals. + Subclasses of `Regexp` are not frozen for compatibility. + [[Feature #8948]] - * Symbol#to_proc now returns a lambda Proc. - [[Feature #16260]] +* Set - * New method - - * Symbol#name, which returns the name of the symbol if it is - named. The returned string cannot be modified. - [[Feature #16150]] - -* Warning - - * Modified method - - * Warning#warn now supports a category kwarg. - [[Feature #17122]] - -* GC - * New method - - * `GC.auto_compact=`, `GC.auto_compact` can be used to control when - compaction runs. Setting `auto_compact=` to true will cause - compaction to occurr during major collections. At the moment, - compaction adds significant overhead to major collections, so please - test first! - [[Feature #17176]] + * A deprecated behavior, `Set#to_set`, `Range#to_set`, and + `Enumerable#to_set` accepting arguments, was removed. [[Feature #21390]] ## Stdlib updates -Outstanding ones only. - -* RubyGems - - * Update to RubyGems 3.2.0.rc.1 - -* Bundler - - * Update to Bundler 2.2.0.rc.1 - -* Net::HTTP - - * New method - - * Add Net::HTTP#verify_hostname= and Net::HTTP#verify_hostname - to skip hostname verification. [[Feature #16555]] - - * Modified method - - * Net::HTTP.get, Net::HTTP.get_response, and Net::HTTP.get_print can - take request headers as a Hash in the second argument when the first - argument is a URI. [[Feature #16686]] - -* IRB - - * Update to IRB 1.2.6 - -* OpenStruct - - * Initialization no longer lazy [[Bug #12136]] - * Builtin methods can now be overridden safely. [[Bug #15409]] - * Implementation uses only methods ending with `!`. - * Ractor compatible. - * Improved support for YAML [[Bug #8382]] - * Use officially discouraged. Read "Caveats" section. - -* Reline - - * Update to Reline 0.1.5 - -* Socket - - * TCPSocket.new now supports `resolv_timeout`. [[Feature #17134]] - - ```ruby - # it raises SocketError if name resolution is not finished within resolve_timeout. - tcp_socket = TCPSocket.new("example.com", 80, resolv_timeout: 10) - ``` +### The following bundled gems are added. + + +We only list stdlib changes that are notable feature changes. + +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] +* 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] +* 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.7 + * 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] +* 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.7 + * 3.7.5 to [3.7.6][test-unit-3.7.6], [3.7.7][test-unit-3.7.7] +* 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 -Excluding feature bug fixes. - -* Regexp literals are frozen [[Feature #8948]] [[Feature #16377]] - - ```ruby - /foo/.frozen? #=> true - ``` - -* EXPERIMENTAL: Hash#each consistently yields a 2-element array [[Bug #12706]] - - * Now `{ a: 1 }.each(&->(k, v) { })` raises an ArgumentError - due to lambda's arity check. - * This is experimental; if it brings a big incompatibility issue, - it may be reverted until 2.8/3.0 release. - -* When writing to STDOUT redirected to a closed pipe, no broken pipe - error message will be shown now. [[Feature #14413]] - -* `TRUE`/`FALSE`/`NIL` constants are no longer defined. - -* `Integer#zero?` overrides `Numeric#zero?` for optimization. [[Misc #16961]] - ## Stdlib compatibility issues -* Default gems - - * The following libraries are promoted the default gems from stdlib. - - * abbrev - * base64 - * English - * erb - * find - * io-nonblock - * io-wait - * net-ftp - * net-http - * net-imap - * net-protocol - * nkf - * open-uri - * optparse - * resolv - * resolv-replace - * rinda - * securerandom - * set - * shellwords - * tempfile - * time - * tmpdir - * tsort - * weakref - -* Bundled gems - - * net-telnet and xmlrpc have been removed from the bundled gems. - If you are interested in maintaining them, please comment on - your plan to https://github.com/ruby/xmlrpc - or https://github.com/ruby/net-telnet. - -* SDBM have been removed from ruby standard library. [[Bug #8446]] - - * The issues of sdbm will be handled at https://github.com/ruby/sdbm - ## C API updates -* C API functions related to $SAFE have been removed. - [[Feature #16131]] +### Embedded TypedData -* C API header file `ruby/ruby.h` was split. [[GH-2991]] Should have no impact - on extension libraries, but users might experience slow compilations. +* 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]] -* Memory view interface [EXPERIMENTAL] +* 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`. - * The memory view interface is a C-API set to exchange a raw memory area, - such as a numeric array and a bitmap image, between extension libraries. - The extension libraries can share also the metadata of the memory area - that consists of the shape, the element format, and so on. - Using these kinds of metadata, the extension libraries can share even - a multidimensional array appropriately. - This feature is designed by referring to Python's buffer protocol. - [[Feature #13767]] [[Feature #14722]] + 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. -## Implementation improvements + - `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)` -* New method cache mechanism for Ractor [[Feature #16614]] + [[Feature #21861]] - * Inline method caches pointed from ISeq can be accessed by multiple Ractors - in parallel and synchronization is needed even for method caches. However, - such synchronization can be overhead so introducing new inline method cache - mehanisms, (1) Disposable inline method cache (2) per-Class method cache - and (3) new invalidation mechanism. (1) can avoid per-method call - syncrhonization because it only use atomic operations. - See the ticket for more details. +### Removed APIs -* The number of hashes allocated when using a keyword splat in - a method call has been reduced to a maximum of 1, and passing - a keyword splat to a method that accepts specific keywords - does not allocate a hash. +The following APIs, which have been deprecated for many years, are removed. +[[Feature #21768]] -* `super` is optimized when the same type of method is called in the previous call - if it's not refinements or an attr reader or writer. +* 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 -### JIT - -* Native functions shared by multiple methods are deduplicated on JIT compaction. - -* Decrease code size of hot paths by some optimizations and partitioning cold paths. - -* Not only pure Ruby methods but also some C methods skip pushing a method frame. - - * `Kernel#class`, `Integer#zero?` - -* Always generate appropriate code for `==`, `nil?`, and `!` calls depending on - a receiver class. - -* Optimize instance variable access in some core classes like Hash and their subclasses - -* Eliminate VM register access on a method return - -* Optimize C method call a little - -## Statis analysis - -### RBS - -* RBS is a new language for type definition of Ruby programs. - It allows writing types of classes and modules with advanced - types including union types, overloading, generics, and - _interface types_ for duck typing. - -* Ruby ships with type definitions for core/stdlib classes. - -* `rbs` gem is bundled to load and process RBS files. - -### TypeProf - -* TypeProf is a type analysis tool for Ruby code based on abstract interpretation. - * It reads non-annotated Ruby code, tries inferring its type signature, and prints - the analysis result in RBS format. - * Though it supports only a subset of the Ruby language yet, we will continuously - improve the coverage of language features, the analysis performance, and usability. - -```ruby -# test.rb -def foo(x) - if x > 10 - x.to_s - else - nil - end -end - -foo(42) -``` - -``` -$ typeprof test.rb -# Classes -class Object - def foo : (Integer) -> String? -end -``` - -## Miscellaneous changes - -* Methods using `ruby2_keywords` will no longer keep empty keyword - splats, those are now removed just as they are for methods not - using `ruby2_keywords`. - -* Taint deprecation warnings are now issued in regular mode in - addition to verbose warning mode. [[Feature #16131]] - -* When an exception is caught in the default handler, the error - message and backtrace are printed in order from the innermost. - [[Feature #8661]] - - -[Bug #4352]: https://bugs.ruby-lang.org/issues/4352 -[Bug #6087]: https://bugs.ruby-lang.org/issues/6087 -[Bug #8382]: https://bugs.ruby-lang.org/issues/8382 -[Bug #8446]: https://bugs.ruby-lang.org/issues/8446 -[Feature #8661]: https://bugs.ruby-lang.org/issues/8661 -[Feature #8709]: https://bugs.ruby-lang.org/issues/8709 -[Feature #8948]: https://bugs.ruby-lang.org/issues/8948 -[Feature #9573]: https://bugs.ruby-lang.org/issues/9573 -[Bug #12136]: https://bugs.ruby-lang.org/issues/12136 -[Bug #12706]: https://bugs.ruby-lang.org/issues/12706 -[Feature #13767]: https://bugs.ruby-lang.org/issues/13767 -[Bug #13768]: https://bugs.ruby-lang.org/issues/13768 -[Feature #14183]: https://bugs.ruby-lang.org/issues/14183 -[Bug #14266]: https://bugs.ruby-lang.org/issues/14266 -[Feature #14413]: https://bugs.ruby-lang.org/issues/14413 -[Bug #14541]: https://bugs.ruby-lang.org/issues/14541 -[Feature #14722]: https://bugs.ruby-lang.org/issues/14722 -[Bug #15409]: https://bugs.ruby-lang.org/issues/15409 -[Feature #15575]: https://bugs.ruby-lang.org/issues/15575 -[Feature #15822]: https://bugs.ruby-lang.org/issues/15822 -[Feature #15921]: https://bugs.ruby-lang.org/issues/15921 -[Feature #15973]: https://bugs.ruby-lang.org/issues/15973 -[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 -[Feature #16150]: https://bugs.ruby-lang.org/issues/16150 -[Feature #16166]: https://bugs.ruby-lang.org/issues/16166 -[Feature #16175]: https://bugs.ruby-lang.org/issues/16175 -[Feature #16260]: https://bugs.ruby-lang.org/issues/16260 -[Feature #16274]: https://bugs.ruby-lang.org/issues/16274 -[Feature #16377]: https://bugs.ruby-lang.org/issues/16377 -[Feature #16378]: https://bugs.ruby-lang.org/issues/16378 -[Feature #16555]: https://bugs.ruby-lang.org/issues/16555 -[Feature #16614]: https://bugs.ruby-lang.org/issues/16614 -[Feature #16686]: https://bugs.ruby-lang.org/issues/16686 -[Feature #16746]: https://bugs.ruby-lang.org/issues/16746 -[Feature #16754]: https://bugs.ruby-lang.org/issues/16754 -[Feature #16786]: https://bugs.ruby-lang.org/issues/16786 -[Feature #16792]: https://bugs.ruby-lang.org/issues/16792 -[Feature #16815]: https://bugs.ruby-lang.org/issues/16815 -[Feature #16828]: https://bugs.ruby-lang.org/issues/16828 -[Misc #16961]: https://bugs.ruby-lang.org/issues/16961 -[Feature #17104]: https://bugs.ruby-lang.org/issues/17104 -[Feature #17122]: https://bugs.ruby-lang.org/issues/17122 -[Feature #17134]: https://bugs.ruby-lang.org/issues/17134 -[Feature #17176]: https://bugs.ruby-lang.org/issues/17176 -[Feature #17260]: https://bugs.ruby-lang.org/issues/17260 -[Feature #17260]: https://bugs.ruby-lang.org/issues/17260 -[GH-2991]: https://github.com/ruby/ruby/pull/2991 +### 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 +[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 +[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 +[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 |
