You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
implementing one of the Ruby 3.4 changes in TruffleRuby, and ensuring it is tested in specs or MRI tests and otherwise add specs. If adding specs please leave a comment here to mention you are working on adding these specs to avoid conflicts & duplicated work.
To make it easier to find good getting-started issues, I annotated items with easy, medium and hard.
There is also pure ruby for changes which should only affect Ruby code and not require any change to Java sources or any Java knowledge.
If there is no pure ruby then some Java code is involved, but it should still be fairly straightforward if easy or medium. hard typically requires more knowledge about TruffleRuby implementation details. [import] means this needs the import of Ruby 3.4 sources to happen first.
If you'd like to start on some task please mention it here or edit the description directly for committers (to avoid duplicated work).
Notes:
Ractor & RubyVM related changes are removed since they are CRuby-specific.
Added non-performance warnings are usually skipped since it is rarely worth the effort and often gone in the next version
Full list of changes for Ruby 3.4.0
This document is a list of user-visible feature changes
since the 3.3.0 release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
Language changes
it is added to reference a block parameter. [Feature #18980]
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.
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]
Core classes updates
Note: We're only listing outstanding class updates.
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]
GC configuration parameter rgengc_allow_full_mark introduced. When false
GC will only mark young objects. Default is true. [Feature #20443]
Hash
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]
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]
MatchData
MatchData#bytebegin and MatchData#byteend have been added. [Feature #20576]
Object
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
```
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]
Rational#** used to return Float::INFINITY or Float::NAN
when the numerator of the return value is large, but now returns an Rational.
If it is extremely large, it raises an exception. [Feature #20811]
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
Add Warning.categories method which returns a list of possible warning categories.
[Feature #20293]
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]
Reject negative values for Timeout.timeout. [Bug #20795]
URI
Switched default parser to RFC 3986 compliant from RFC 2396 compliant.
[Bug #19266]
C API updates
rb_newobj and rb_newobj_of (and corresponding macros RB_NEWOBJ, RB_NEWOBJ_OF, NEWOBJ, NEWOBJ_OF) have been removed. [Feature #20265]
Removed deprecated function rb_gc_force_recycle. [Feature #18290]
Implementation improvements
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]
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]
The text was updated successfully, but these errors were encountered:
Uh oh!
There was an error while loading. Please reload this page.
Any help is appreciated whether it is:
To make it easier to find good getting-started issues, I annotated items with
easy
,medium
andhard
.There is also
pure ruby
for changes which should only affect Ruby code and not require any change to Java sources or any Java knowledge.If there is no
pure ruby
then some Java code is involved, but it should still be fairly straightforward ifeasy
ormedium
.hard
typically requires more knowledge about TruffleRuby implementation details.[import]
means this needs the import of Ruby 3.4 sources to happen first.If you'd like to start on some task please mention it here or edit the description directly for committers (to avoid duplicated work).
Notes:
Full list of changes for Ruby 3.4.0
This document is a list of user-visible feature changes
since the 3.3.0 release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
Language changes
it
is added to reference a block parameter. [Feature #18980]String literals in files without a
frozen_string_literal
comment now emit a deprecation warningwhen they are mutated.
These warnings can be enabled with
-W:deprecated
or by settingWarning[: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 emita deprecation warning, offered as a replacement for the
str.dup if str.frozen?
pattern.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 warnedwhen
Warning[:deprecated]
. [Feature #20884]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 ofThread::Backtrace::Location
.Kernel#raise
,Thread#raise
andFiber#raise
also accept this new format. [Feature #13557]Fiber::Scheduler
Fiber::Scheduler#blocking_operation_wait
hook allows blocking operations to be moved out of theevent 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 GarbageCollector. [Feature #20443]
GC configuration parameter
rgengc_allow_full_mark
introduced. Whenfalse
GC will only mark young objects. Default is
true
. [Feature #20443]Hash
Hash.new
now accepts an optionalcapacity:
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]
IO::Buffer
IO::Buffer#copy
can release the GVL, allowing other threads to run while copying data. [Feature #20902]Integer
Integer#**
used to returnFloat::INFINITY
when the return value is large, but now returns anInteger
.If the return value is extremely large, it raises an exception.
[Feature #20811]
MatchData
MatchData#bytebegin
andMatchData#byteend
have been added. [Feature #20576]Object
Object#singleton_method
now returns methods in modules prepended to or included in thereceiver's singleton class. [Bug #20620]
Range
Range#size
now raisesTypeError
if the range is not iterable. [Misc #18984]Range#step
now consistently has a semantics of iterating by using+
operatorfor all types, not only numerics. [Feature #18368]
Rational
Rational#**
used to returnFloat::INFINITY
orFloat::NAN
when the numerator of the return value is large, but now returns an
Rational
.If it is extremely large, it raises an exception. [Feature #20811]
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
Symbol#to_s
now emits a deprecation warning when mutated, and will befrozen in a future version of Ruby.
These warnings can be enabled with
-W:deprecated
or by settingWarning[:deprecated] = true
.[Feature #20350]
Time
On Windows, now
Time#zone
encodes the system timezone name in UTF-8instead of the active code page, if it contains non-ASCII characters.
[Bug #20929]
Time#xmlschema
, and itsTime#iso8601
alias have been moved into the core Timeclass while previously it was an extension provided by the
time
gem. [Feature #20707]Warning
Warning.categories
method which returns a list of possible warning categories.[Feature #20293]
Stdlib updates
We only list stdlib changes that are notable feature changes.
RubyGems
--attestation
option to gem push. It enabled to store signature of build artifact to sigstore.dev.Bundler
lockfile_checksums
configuration to include checksums in fresh lockfiles.--add-checksums
to add checksums to an existing lockfile.JSON
JSON.parse
about 1.5 times faster than json-2.7.x.Tempfile
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
[Feature #20775]
Socket
Socket::ResolutionError
andSocket::ResolutionError#error_code
was added.[Feature #20018]
IRB
[Feature #20778]
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:
New:
Hash#inspect
rendering have been changed. [Bug #20433]"{user: 1}"
=>
:'{"user" => 1}'
, while previously they didn't:'{"user"=>1}'
Kernel#Float()
now accepts a decimal string with decimal part omitted. [Feature #20705]String#to_f
now accepts a decimal string with decimal part omitted. [Feature #20705]Note that the result changes when an exponent is specified.
Refinement#refined_class
has been removed. [Feature #19714]Stdlib compatibility issues
DidYouMean
DidYouMean::SPELL_CHECKERS[]=
andDidYouMean::SPELL_CHECKERS.merge!
are removed.Net::HTTP
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
Timeout
Timeout.timeout
. [Bug #20795]URI
[Bug #19266]
C API updates
rb_newobj
andrb_newobj_of
(and corresponding macrosRB_NEWOBJ
,RB_NEWOBJ_OF
,NEWOBJ
,NEWOBJ_OF
) have been removed. [Feature #20265]rb_gc_force_recycle
. [Feature #18290]Implementation improvements
by attempting IPv6 and IPv4 concurrently, is used in
Socket.tcp
andTCPSocket.new
.To disable it globally, set the environment variable
RUBY_TCP_NO_FAST_FALLBACK=1
orcall
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]
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
orWarning[:strict_unused_block] = true
.[Feature #15554]
Redefining some core methods that are specially optimized by the interpreter
and JIT like
String#freeze
orInteger#+
now emits a performance classwarning (
-W:performance
orWarning[:performance] = true
).[Feature #20429]
The text was updated successfully, but these errors were encountered: