Ruby 3.5
This is a proposed Change for Fedora Linux.
This document represents a proposed Change. As part of the Changes process, proposals are publicly announced in order to receive community feedback. This proposal will only be implemented if approved by the Fedora Engineering Steering Committee.
Summary
Ruby 3.5 is the latest stable version of Ruby. Many new features and improvements are included for the increasingly diverse and expanding demands for Ruby. With this major update from Ruby 3.4 in Fedora 43 to Ruby 3.5 in Fedora 44, Fedora becomes the superior Ruby development platform.
Owner
-
Name: [[User:Jackorp1| Jaroslav Prokop]]
-
Email: jprokop@redhat.com
-
Name: [[User:Vondruch| VĂt Ondruch]]
-
Email: vondruch@redhat.com
-
Name: [[User:mtasaka| Mamoru Tasaka]]
-
Email: mtasaka@fedoraproject.org
Detailed Description
Ruby 3.5 is upstream’s new major release of Ruby. Many new features and improvements are included.
=== Language changes ===
*nilno longer callsnil.to_a, similar to how**nildoes not callnil.to_hash.-
Logical binary operators (
||,&&,andandor) at the beginning of a line continue the previous line, like fluent dot.
=== Core classes updates ===
Note: We’re only listing outstanding class updates.
-
Kernel
-
Kernel#inspectnow checks for the existence of a#instance_variables_to_inspectmethod, allowing control over which instance variables are displayed in the#inspectstring.
-
-
Binding
-
Binding#local_variablesdoes no longer include numbered parameters. Also,Binding#local_variable_getandBinding#local_variable_setreject to handle numbered parameters.
-
-
IO
-
IO.selectacceptsFloat::INFINITYas a timeout argument.
-
-
Math
-
Math.log1pandMath.expm1are added.
-
-
Socket
-
Socket.tcp&TCPSocket.newacceptsopen_timeoutas a keyword argument to specify the timeout for the initial connection.
-
-
Ractor
-
Ractor::Portclass was added for a new synchronization mechanism to communicate between Ractors.Ractor::Portprovides the following methods:Ractor::Port#receive-
Ractor::Port#send(orRactor::Port#<<) Ractor::Port#closeRactor::Port#closed?
As result,
Ractor.yieldandRactor#takewere removed. Ractor#joinandRactor#valuewere added to wait for the termination of a Ractor. These are similar toThread#joinandThread#value.Ractor#monitorandRactor#unmonitorwere added as low-level interfaces used internally to implementRactor#join.Ractor.selectnow only accepts Ractors and Ports. If Ractors are given, it returns when a Ractor terminates.Ractor#default_portwas added. EachRactorhas a default port, which is used byRactor.send,Ractor.receive.Ractor#close_incomingandRactor#close_outgoingwere removed.Ractor.shareable_procandRactor.shareable_lambdais introduced to make shareable Proc or lambda.
-
-
Set-
Setis now a core class, instead of an autoloaded stdlib class.
-
-
String
- Update Unicode to Version 16.0.0 and Emoji Version 16.0. (also applies to Regexp)
-
Thread
- Introduce support for
Thread#raise(cause:)argument similar toKernel#raise.
- Introduce support for
-
Fiber
- Introduce support for
Fiber#raise(cause:)argument similar toKernel#raise.
- Introduce support for
-
Fiber::Scheduler
- Introduce
Fiber::Scheduler#fiber_interruptto interrupt a fiber with a given exception. The initial use case is to interrupt a fiber that is waiting on a blocking IO operation when the IO operation is closed.
- Introduce
-
Pathname
- Pathname has been promoted from a default gem to a core class of Ruby.
=== Stdlib updates ===
The following bundled gems are promoted from default gems.
- ostruct 0.6.3
- pstore 0.2.0
- benchmark 0.5.0
- logger 1.7.0
- rdoc 6.15.0
- win32ole 1.9.2
- irb 1.15.2
- reline 0.6.2
- readline 0.0.4
- fiddle 1.1.8
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.3.0 if it has GitHub releases.
The following default gem is added.
- win32-registry 0.1.1
The following default gems are updated.
- RubyGems 4.0.0.dev
- bundler 4.0.0.dev
- date 3.5.0
- digest 3.2.1
- english 0.8.1
- erb 5.1.3
- etc 1.4.6
- fcntl 1.3.0
- fileutils 1.8.0
- io-console 0.8.1
- io-nonblock 0.3.2
- io-wait 0.3.2
- json 2.15.2
- net-http 0.7.0
- openssl 4.0.0.pre
- optparse 0.8.0
- pp 0.6.3
- prism 1.6.0
- psych 5.2.6
- resolv 0.6.3
- stringio 3.1.8.dev
- strscan 3.1.6.dev
- timeout 0.4.4
- uri 1.1.0
- weakref 0.1.4
- zlib 3.2.2
The following bundled gems are added.
The following bundled gems are updated.
- minitest 5.26.0
- rake 13.3.1
- test-unit 3.7.0
- rexml 3.4.4
- net-ftp 0.3.9
- net-imap 0.5.12
- net-smtp 0.5.1
- matrix 0.4.3
- prime 0.1.4
- rbs 3.9.5
- debug 1.11.0
- base64 0.3.0
- bigdecimal 3.3.1
- drb 2.2.3
- syslog 0.3.0
- csv 3.3.5
- repl_type_completor 0.1.11
=== Supported platforms ===
=== Compatibility issues ===
-
The following methods were removed from Ractor due because of
Ractor::Port:Ractor.yieldRactor#takeRactor#close_incomingRactor#close_outgoging
ObjectSpace._id2refis deprecated.
=== Stdlib compatibility issues ===
-
CGI library is removed from the default gems. Now we only provide
cgi/escapefor the following methods:-
CGI.escapeandCGI.unescape -
CGI.escapeHTMLandCGI.unescapeHTML -
CGI.escapeURIComponentandCGI.unescapeURIComponent -
CGI.escapeElementandCGI.unescapeElement
-
With the move of
Setfrom stdlib to core class,set/sorted_set.rbhas been removed, andSortedSetis no longer an autoloaded constant. Please install thesorted_setgem andrequire 'sorted_set'to useSortedSet.
=== C API updates ===
- IO
**rb_thread_fd_closeis deprecated and now a no-op. If you need to expose file descriptors from C extensions to Ruby code, create anIOinstance usingRUBY_IO_MODE_EXTERNALand userb_io_close(io)to close it (this also interrupts and waits for all pending operations on theIOinstance). Directly closing file descriptors does not interrupt pending operations, and may lead to undefined behaviour. In other words, if twoIOobjects share the same file descriptor, closing one does not affect the other.
=== Implementation improvements ===
==== Ractor ====
A lot of work has gone into making Ractors more stable, performant, and usable. These improvements bring Ractors implementation closer to leaving experimental status.
- Performance improvements
** Frozen strings and the symbol table internally use a lock-free hash set
** Method cache lookups avoid locking in most cases
** Class (and geniv) instance variable access is faster and avoids locking
** Cache contention is avoided during object allocation
**object_idavoids locking in most cases - Bug fixes and stability
** Fixed possible deadlocks when combining Ractors and Threads
** Fixed issues with require and autoload in a Ractor
** Fixed encoding/transcoding issues across Ractors
** Fixed race conditions in GC operations and method invalidation
** Fixed issues with processes forking after starting a Ractor
=== JIT ===
- YJIT
** YJIT stats
***ratio_in_yjitno longer works in the default build. Use–enable-yjit=statsonconfigureto enable it on–yjit-stats.
*** Addinvalidate_everythingto default stats, which is incremented when every code is invalidated by TracePoint.
** Addmem_size:andcall_threshold:options toRubyVM::YJIT.enable. - ZJIT
** Add an experimental method-based JIT compiler. Use–enable-zjitonconfigureto enable the–zjitsupport.
** As of Ruby 3.5.0-preview2, ZJIT is not yet ready for speeding up most benchmarks. Please refrain from evaluating ZJIT just yet. Stay tuned for the Ruby 3.5 release. - RJIT
**–rjitis removed. We will move the implementation of the third-party JIT API to the [GitHub - ruby/rjit ruby/rjit] repository.
Feedback
Benefit to Fedora
With a latest release, Ruby language is supporting the newest language features, which enables even faster and easier development of Ruby applications.
Scope
- Proposal owners:
** Finish packaging of Ruby 3.5. Current changes available in branch Making sure you're not a bot!
** Rebuilding of Ruby packages providing native extensions (i.e. packages which depends on libruby).
** Rebuild of packages with binary extensions (i.e. packages which depends on libruby) will be handled automatically, but some packages might need fixes/updates to support Ruby 3.5 properly.
** The packages are going to be rebuild in side-tag, but that does not need releng involvement nowadays.
-
Trademark approval: N/A (not needed for this Change)
-
Alignment with the Fedora Strategy:
Upgrade/compatibility impact
- User specific Ruby binary extensions need to be rebuild.
- Adjustments to new language features will be needed.
- Ruby packages/application dependencies might need to be adjusted if newly bundled gems are used.
Early Testing (Optional)
How To Test
- No special hardware is needed.
- To test, install Ruby 3.5. The test builds are published in copr Making sure you're not a bot!
- Try to locally rebuild your packages using Ruby 3.5.
- Use the packages with your applications previously written in Ruby.
- If something doesn’t work as it should, let us know.
User Experience
The Ruby programs/scripts should behave as they were used to.
Dependencies
$ dnf repoquery --disablerepo='*' --enablerepo=rawhide --enablerepo=rawhide-source --arch=src --whatrequires 'ruby-devel' | sort | uniq | wc -l 116
Contingency Plan
Documentation
- [http://www.ruby-doc.org/ Help and documentation for the Ruby programming language]
- [ruby/NEWS.md at master · ruby/ruby · GitHub Ruby 3.5.0 NEWS]
- [Ruby 3.5.0 preview1 Released Ruby 3.5.0 preview1 release announcement]
Release Notes
Last edited by @alking 2025-11-10T14:31:08Z
Last edited by @alking 2025-11-10T14:31:08Z