Project

General

Profile

Activity

From 05/03/2025 to 05/09/2025

05/09/2025

11:28 PM Bug #21319: Namespaces do not support including mixins
Maybe the root cause is _enabling_ namespaces with `RUBY_NAMESPACE=1`. fxn (Xavier Noria)
11:02 PM Bug #21319 (Closed): Namespaces do not support including mixins
The following program
```ruby
module M
end
class C
include M
end
```
fails under a namespace with error
```
'Module#include': Cannot include refinement (TypeError)
```
fxn (Xavier Noria)
11:27 PM Bug #21321: Namespaces do not support extending mixins
Maybe the root cause is _enabling_ namespaces with `RUBY_NAMESPACE=1`. fxn (Xavier Noria)
11:22 PM Bug #21321 (Closed): Namespaces do not support extending mixins
The program
```ruby
module M
end
class C
extend M
end
```
fails under a namespace with error:
```
'Kernel#extend': Cannot extend object with refinement (TypeError)
```
fxn (Xavier Noria)
11:15 PM Revision 3306d7d2 (git): Only clear Ractor cache in child
This avoids a race condition where we were clearing the cache from
another ractor while it was in use. Oops!
Fixes this failure http://ci.rvm.jp/results/master@oci-aarch64/5750416
jhawthorn (John Hawthorn)
11:07 PM Bug #21320 (Open): Namespaces leak with constant lookup
The following program
```ruby
X = :top
class C
X = :super
end
class D < C
p X
end
```
prints `:super` normally, and `:top` if running under a namespace.
fxn (Xavier Noria)
10:54 PM Bug #21318 (Open): Namespaces leak with Module.nesting
Namespaces are not transparent for this program:
```ruby
Module.nesting
```
The nesting is empty or not depending on whether it is being executed under a namespace.
fxn (Xavier Noria)
10:13 PM Revision 87b621bd (git): Update default gems list at 58c008e68f31a8056df508cc46e17c [ci skip]
git[bot]
10:12 PM Revision 58c008e6 (git): [ruby/psych] Bump version for release
https://github.com/ruby/psych/commit/dbf9e36583 tenderlovemaking (Aaron Patterson)
10:08 PM Bug #21317 (Closed): Namespaces leak with object IDs
Namespaces are not transparent for this program
```ruby
if mod1.object_id == mod2.object_id
mod1.constants == mod2.constants
end
```
because it may fail for `mod1 = Object; mod2 = ns::Object`, which have the same object ID.
fxn (Xavier Noria)
10:05 PM Bug #21316 (Open): Namespaces leak with permanent names
Namespaces are not transparent for this program
```ruby
C = Class.new
C.name == 'C'
```
because under a non-main user namespace, the name of `C` has the namespace as a prefix.
fxn (Xavier Noria)
10:01 PM Feature #15408: Deprecate ObjectSpace._id2ref
> The question is rather why you want _id2ref to be deprecated
I want it removed, actually! 😀
You have seen all the reasons why it is problematic, but on top of all that it was never intended to be an official API in the first plac...
headius (Charles Nutter)
08:20 PM Feature #15408: Deprecate ObjectSpace._id2ref
headius (Charles Nutter) wrote in #note-44:
> I'd also like to know **why** you want `_id2ref` to stick around.
I think that question is backwards. There is no need for any reason to keep existing functionality; backward compatibilit...
Dan0042 (Daniel DeLorme)
07:19 AM Feature #15408 (Closed): Deprecate ObjectSpace._id2ref
Applied in changeset commit:git|4de049a3f9709ab8b0b192c40e83b910b80d6de3.
----------
Deprecate `ObjectSpace._id2ref`
[Feature #15408]
Matz decided to deprecate it for Ruby 2.6 or 2.7 but that never
actually happened.
Given the object...
byroot (Jean Boussier)
06:34 AM Feature #15408: Deprecate ObjectSpace._id2ref
I was hoping for a removal timeline, but alright. I'll merge my PR. byroot (Jean Boussier)
03:14 AM Feature #15408: Deprecate ObjectSpace._id2ref
This was discussed at the dev meeting, and @matz agreed to add the deprecation warning. mame (Yusuke Endoh)
09:22 PM Revision 4a2f489c (git): Fix rb_range_beg_len() and rb_arithmetic_sequence_beg_len_step() spec
* The begp, lenp and stepp might not be written to, so they need default values. Eregon (Benoit Daloze)
09:22 PM Revision 2a923636 (git): Try removing building C API specs in CRuby makefiles entirely
* Since it does not work when using some configure options such as:
.../configure --with-ext=-test-/cxxanyargs,+ --enable-shared
as the CI does.
* It also duplicates the logic of spec/ruby/optional/capi/spec_helper.rb incorrectly.
...
Eregon (Benoit Daloze)
09:22 PM Revision 29be534f (git): Try fixing building C API specs with make
* But it doesn't work because there is no .ext/include/ruby/digest.h
when using .../configure --with-ext=-test-/cxxanyargs,+ --enable-shared
as the CI does.
andrykonchin (Andrew Konchin)
09:22 PM Revision 78a2ffa0 (git): Fix digest specs when run in CRuby via make test-spec
andrykonchin (Andrew Konchin)
09:22 PM Revision cb4a4418 (git): Fix formatting in digest_spec.c
andrykonchin (Andrew Konchin)
09:22 PM Revision 269ad29d (git): Update to ruby/spec@d8bacef
andrykonchin (Andrew Konchin)
08:04 PM Bug #21315: Finalizers violate the `rb_ractor_confirm_belonging` assertion
Eregon (Benoit Daloze) wrote in #note-3:
> it clearly seems to exhibit that behavior
To clarify what I mean:
```
$ ruby -e 'OBJ = Object.new; ObjectSpace.define_finalizer(OBJ) { puts "finalizer ran" }'
finalizer ran
```
But clea...
Eregon (Benoit Daloze)
07:45 PM Bug #21315: Finalizers violate the `rb_ractor_confirm_belonging` assertion
> When a Ractor terminates just before it actually does so it should probably run the remaining finalizers
Objects aren't necessarily unreferenced/garbage collectable at this point (they could have been made shareable, or be the retur...
jhawthorn (John Hawthorn)
07:13 PM Bug #21315: Finalizers violate the `rb_ractor_confirm_belonging` assertion
When a Ractor terminates just before it actually does so it should probably run the remaining finalizers, AFAIK, this is what CRuby does when the process is about to terminate and there are finalizers not run yet (but I might be wrong, t... Eregon (Benoit Daloze)
06:56 PM Bug #21315: Finalizers violate the `rb_ractor_confirm_belonging` assertion
> Run each finalizer in the Ractor that created it (what do we do about terminated ractors?)
That one I think would be doable, we could record the current ractor in with the finalizer.
For terminated Ractors I don't think it's a bi...
byroot (Jean Boussier)
06:51 PM Bug #21315: Finalizers violate the `rb_ractor_confirm_belonging` assertion
It does seem like it's a problem that this is a way to have access to an unshareable object from multiple ractors
``` ruby
def build_finalizer(object)
previous_ractor = Ractor.current
proc { puts "finalizing on #{Ractor.current} (wa...
jhawthorn (John Hawthorn)
04:19 PM Bug #21315 (Assigned): Finalizers violate the `rb_ractor_confirm_belonging` assertion
Reproduction (with assertions enabled):
```ruby
require "tempfile"
Ractor.new do
10.times do
Tempfile.new
end
end.take
GC.start
```
```
<OBJ_INFO:rb_ractor_confirm_belonging@../src/ractor_core.h:375> (File)
...
byroot (Jean Boussier)
06:45 PM Revision 3135eddb (git): Refactor `FIRST_T_OBJECT_SHAPE_ID` to not be used outside `shape.c`
byroot (Jean Boussier)
06:07 PM Feature #21311: Namespace on read (revised)
This feature proposal is quite exceptional. Because this is a feature strongly driven by @matz himself, and Ruby is matz's language.
@tagomoris has been working closely with Matz for several years to design and implement it. Although ...
mame (Yusuke Endoh)
12:16 PM Feature #21311: Namespace on read (revised)
Let me add.
This is not a case of "let's merge and polish". Problem is, it has to be seen if you can satisfy the goals with this approach at all. Because, you cannot be dazzled by the stated goals, you have to carefully check if the goa...
fxn (Xavier Noria)
11:29 AM Feature #21311: Namespace on read (revised)
I am aligned with @eregon.
There are several important issues.
Another one that has not been mentioned (I think) is that the design trivially allows for two objects with the same object ID to be different entities. The Ruby programmer ...
fxn (Xavier Noria)
11:02 AM Feature #21311: Namespace on read (revised)
In https://github.com/ruby/dev-meeting-log/blob/master/2025/DevMeeting-2025-05-08.md#discussion
> mame: Are there any strong opponents?
I guess I am one.
There are many concerns from several people that have been raised here, many unans...
Eregon (Benoit Daloze)
05:53 PM Revision e2f5e233 (git): [ruby/psych] exception tests
https://github.com/ruby/psych/commit/1e9b79f699 OrenGitHub
05:53 PM Revision 42328d4e (git): [ruby/psych] more special cases
https://github.com/ruby/psych/commit/b33bf8b060 OrenGitHub
05:53 PM Revision 451e1dcf (git): [ruby/psych] duplicate more tests
https://github.com/ruby/psych/commit/a3be6429bf OrenGitHub
05:53 PM Revision ae299cc9 (git): [ruby/psych] add first test for safe load stream
https://github.com/ruby/psych/commit/336553b412 OrenGitHub
05:53 PM Revision f0e2a41d (git): [ruby/psych] fixed bugs from testing
https://github.com/ruby/psych/commit/e954f96639 OrenGitHub
05:53 PM Revision d6931930 (git): [ruby/psych] Add safe version for load_stream
https://github.com/ruby/psych/commit/30a2a5ee94 OrenGitHub
04:43 PM Revision 011982ef (git): Fix warnings in tests for ObjectSpace._id2ref
There's a lot of warnings when running test_objectspace.rb because of
ObjectSpace._id2ref. For example:
test_objectspace.rb:19: warning: ObjectSpace._id2ref is deprecated
peterzhu2118 (Peter Zhu)
04:32 PM Revision 102063f9 (git): ZJIT: Fix a splitting condition for LHS
k0kubun (Takashi Kokubun)
02:24 PM Bug #18119 (Closed): Ractor crashes when instantiating classes
Applied in changeset commit:git|f30f0f0a22bb5cf536b5ca551f3dfa5ebb745030.
----------
Fix crash when instantiating classes in Ractors
[Bug #18119]
When we create classes, it pushes the class to the subclass list of the
superclass. This...
peterzhu2118 (Peter Zhu)
02:24 PM Revision f30f0f0a (git): Fix crash when instantiating classes in Ractors
[Bug #18119]
When we create classes, it pushes the class to the subclass list of the
superclass. This access needs to be synchronized because multiple Ractors
may be creating classes with the same superclass, which would cause race
cond...
peterzhu2118 (Peter Zhu)
01:14 PM Revision 5349c0aa (git): Align gems/bundled_gems [ci skip]
nobu (Nobuyoshi Nakada)
12:41 PM Feature #21258: Retire CGI library from Ruby 3.5
With recent commits, it seems that a cgi.gemspec is not created.
erb.gemspec shows it as a dependency?
MSP-Greg (Greg L)
04:08 AM Feature #21258 (Assigned): Retire CGI library from Ruby 3.5
We discussed this in devmeeting.
We decided the followings:
* To remove `cgi` library without `CGI.escape*` and `CGI.unescape*` methods.
* It includes `escapeURIComponent`, `unescapeURIComponent`, `escapeHTML`, `unescapeHTML`, `...
hsbt (Hiroshi SHIBATA)
10:28 AM Bug #21280: StringIO#set_encoding warns when backed by chilled string literal
https://github.com/ruby/stringio/pull/132 is a much cleaner solution, was it considered?
(https://bugs.ruby-lang.org/issues/21281 doesn't have the log yet so I can't check that, EDIT found it: https://github.com/ruby/dev-meeting-log/blob...
Eregon (Benoit Daloze)
03:28 AM Bug #21280: StringIO#set_encoding warns when backed by chilled string literal
Discussed at the dev meeting. @matz said that he prefers not to issue warnings that could be false positives, even if they are true positives in many cases.
The code `StringIO.new("").set_encoding('binary')` will work even in future a...
mame (Yusuke Endoh)
09:13 AM Revision 15e3675e (git): Remove dead code in `rb_gc_impl_ractor_cache_free`
Followup: https://github.com/ruby/ruby/pull/13286 byroot (Jean Boussier)
08:22 AM Revision ea772508 (git): Rename `RB_OBJ_SHAPE` -> `rb_obj_shape`
As well as `RB_OBJ_SHAPE_ID` -> `rb_obj_shape_id`
and `RSHAPE` is now a simple alias for `rb_shape_lookup`.
I tried to turn all these into `static inline` but I'm having
trouble with `RUBY_EXTERN rb_shape_tree_t *rb_shape_tree_ptr;`
not...
byroot (Jean Boussier)
08:22 AM Revision 0b81359b (git): Stop exposing rb_shape_frozen_shape_p
byroot (Jean Boussier)
08:22 AM Revision becc45ff (git): Eliminate some `rb_shape_t *` usages outside of `shape.c`.
byroot (Jean Boussier)
08:22 AM Revision a970d35d (git): Get rid of `rb_shape_get_parent`.
byroot (Jean Boussier)
08:22 AM Revision 5782561f (git): Rename `rb_shape_get_shape_id` -> `RB_OBJ_SHAPE_ID`
And `rb_shape_get_shape` -> `RB_OBJ_SHAPE`. byroot (Jean Boussier)
08:22 AM Revision a0075754 (git): Remove unused `rb_shape_object_id_index`
byroot (Jean Boussier)
08:22 AM Revision c9b08882 (git): Refactor `rb_shape_get_next` to return an ID
Also rename it, and change parameters to be consistent with
other transition functions.
byroot (Jean Boussier)
08:22 AM Revision e0200cfb (git): Refactor `rb_shape_transition_shape_remove_ivar` to not take a shape pointer
It's more consistent with other transition functions. byroot (Jean Boussier)
08:22 AM Revision 3f7c0af0 (git): Rename `rb_shape_obj_too_complex` -> `rb_shape_obj_too_complex_p`
byroot (Jean Boussier)
08:22 AM Revision 677d075c (git): Refactor `rb_shape_transition_too_complex` to return an ID.
byroot (Jean Boussier)
08:22 AM Revision f82523f1 (git): Refactor `rb_shape_transition_frozen` to return a `shape_id`.
byroot (Jean Boussier)
08:22 AM Revision 31d0a581 (git): Get rid of useless SHAPE_MASK
byroot (Jean Boussier)
08:22 AM Revision 334ebba2 (git): Rename `rb_shape_get_shape_by_id` -> `RSHAPE`
byroot (Jean Boussier)
08:22 AM Revision 9966de11 (git): Refactor `rb_shape_get_next_iv_shape` to take and return ids.
byroot (Jean Boussier)
08:22 AM Revision df7d25bb (git): Stop exposing rb_shape_get_root_shape
byroot (Jean Boussier)
08:22 AM Revision 62eb2007 (git): Remove unused rb_obj_debug_shape
byroot (Jean Boussier)
08:22 AM Revision e4f97ce3 (git): Refactor `rb_shape_depth` to take an ID rather than a pointer.
As well as `rb_shape_edges_count` and `rb_shape_memsize`. byroot (Jean Boussier)
08:22 AM Revision f8b3fc52 (git): Refactor `rb_shape_traverse_from_new_root` to not expose `rb_shape_t`
byroot (Jean Boussier)
08:22 AM Revision 7116b0a7 (git): Extract `rb_shape_free_all`
byroot (Jean Boussier)
08:19 AM Bug #20165 (Closed): Ractors moving a Struct breaks beyond the first 3 fields
Duplicate of: [Bug #20271] [Bug #20267] [Bug #20255]
This was fixed in 0350290262ea0fbc4e1807901797ee8a6970c2b9 and a few followups.
byroot (Jean Boussier)
08:16 AM Bug #20897 (Closed): resolv: not usable across ractors
The linked PR was merged. byroot (Jean Boussier)
07:55 AM Revision 30ef0f18 (git): Fix allocation count when forking with Ractors
After fork we reset to single ractor mode (which IMO we shouldn't do,
but it requires more work to fix) and so we need to add the pending
object counts back to the main heap.
jhawthorn (John Hawthorn)
07:19 AM Revision 4de049a3 (git): Deprecate `ObjectSpace._id2ref`
[Feature #15408]
Matz decided to deprecate it for Ruby 2.6 or 2.7 but that never
actually happened.
Given the object_id table is a contention point for Ractors
it seems sensible to finally deprecate this API so we can
generate and stor...
byroot (Jean Boussier)
06:55 AM Misc #21100 (Closed): DevMeeting before RubyKaigi 2025
Meeting log is here: https://github.com/ruby/dev-meeting-log/blob/master/2025/DevMeeting-2025-04-15.md hsbt (Hiroshi SHIBATA)
06:37 AM Feature #21309: Can Thread::Mutex be Ractor shareable?
> Should I create a ticket here?
You can directly open a PR on https://github.com/ruby/net-http/.
If it doesn't get noticed after a while, you can open a corresponding ticket here.
byroot (Jean Boussier)
05:04 AM Feature #21309: Can Thread::Mutex be Ractor shareable?
> Maybe Net::HTTP could use `IO.select`?
That sounds like a good idea and I'd like to try it. I have checked some previous attempts. Should I create a ticket here?
osyoyu (Daisuke Aritomo)
06:37 AM Revision 4ef324c7 (git): Added https://bugs.ruby-lang.org/issues/21258 to NEWS.md
hsbt (Hiroshi SHIBATA)
05:28 AM Revision dcd0a35c (git): Update default gems list at d3c472781dec4fe415203fbb898d8b [ci skip]
git[bot]
05:27 AM Revision d3c47278 (git): Replaced CGI.parse with URI.decode_www_form
hsbt (Hiroshi SHIBATA)
05:27 AM Revision ab19b1f6 (git): Use CGI 0.5.0.beta1
hsbt (Hiroshi SHIBATA)
05:27 AM Revision 5e1c9067 (git): Added cgi for bundler testing. rack depends cgi/cookie.rb
hsbt (Hiroshi SHIBATA)
05:27 AM Revision 5aade8a8 (git): Added migration wrapper for cgi.rb and cgi/util.rb
hsbt (Hiroshi SHIBATA)
05:27 AM Revision ce6c1778 (git): Guard CGI examples with Ruby 3.5 and use cgi/escape for related examples
hsbt (Hiroshi SHIBATA)
05:27 AM Revision 600c6165 (git): Removed CGI library without CGI::Escape features
hsbt (Hiroshi SHIBATA)
05:27 AM Revision a61f51f6 (git): Use cgi/escape instead of cgi/util
hsbt (Hiroshi SHIBATA)
05:27 AM Revision 56423d43 (git): Reduce loading class/module on CGIUtilTest and CGIEscapeTest
hsbt (Hiroshi SHIBATA)
05:27 AM Revision 382be44f (git): Extract CGIEscapeTest from CGIUtilTest
hsbt (Hiroshi SHIBATA)
05:27 AM Revision 8a1d4514 (git): Support `require 'cgi/escape'` with extracting CGI::Escape from CGI::Util
hsbt (Hiroshi SHIBATA)
04:51 AM Revision c6676837 (git): Added instruction for initial setup of depend file
hsbt (Hiroshi SHIBATA)
04:50 AM Bug #19387: ObjectSpace.each_objects only returns shareable objects after starting a Ractor
I also ran into this, so I opened an pull request document this behavior.
https://github.com/ruby/ruby/pull/13278
osyoyu (Daisuke Aritomo)
03:52 AM Bug #21314 (Open): Kernel#autoload requires the wrong file (?)
While discussing #21154 with some people at the dev meeting, I found a weird behavior of `Kernel#autoload` that's hard to explain.
I haven't yet looked at it carefully, but I was asked to create a ticket anyway.
```ruby
# main.rb
a...
mame (Yusuke Endoh)
03:43 AM Feature #21274 (Closed): Show performance warnings for easily avoidable unnecessary implicit splat allocations
jeremyevans0 (Jeremy Evans)
03:18 AM Feature #21274: Show performance warnings for easily avoidable unnecessary implicit splat allocations
This was discussed at the dev meeting, but @matz was negative about adding this warning. He prefers fluent code over performance, so from Ruby's perspective, he did not want to encourage rewriting:
```ruby
order!(argv, **keywords, &n...
mame (Yusuke Endoh)
03:31 AM Feature #21307 (Assigned): A way to strictly validate time input
mame (Yusuke Endoh)
03:30 AM Feature #21307: A way to strictly validate time input
Discussed at the dev meeting. This proposal was accepted as `struct: true` keyword argument, like
```ruby
Time.new(2025, 2, 29, 0, 0, 0, "+00:00", strict: true) #=> ArgumentError
```
mame (Yusuke Endoh)
03:19 AM Feature #21287: Remove SortedSet autoload and set/sorted_set
Discussed at the dev meeting, and @matz said "go ahead".
mame (Yusuke Endoh)

05/08/2025

11:03 PM Bug #19408 (Closed): Object no longer frozen after moved from a ractor
Fixed by a5ba7124bcc112f537a29564f644dea67f2b532d jhawthorn (John Hawthorn)
10:43 PM Bug #17678 (Closed): Ractors do not restart after fork
Sorry @jeremyevans0 I think Aaron and I missed that PR, but we did the same thing in https://github.com/ruby/ruby/pull/12982 which should fix this.
One thing we didn't do that's in your PR is forbid forking from within a Ractor, but t...
jhawthorn (John Hawthorn)
08:34 PM Revision 7a660d7c (git): [DOC] Tweaks for What's Here
burdettelamar (Burdette Lamar)
08:25 PM Bug #18119: Ractor crashes when instantiating classes
I have a fix here: https://github.com/ruby/ruby/pull/13284 peterzhu2118 (Peter Zhu)
07:48 PM Revision b67711b1 (git): Fix `remove_instance_variable` on complex objects
Introduced in: https://github.com/ruby/ruby/pull/13159
Now that there is no longer a unique TOO_COMPLEX shape with
no children, checking `shape->type == TOO_COMPLEX` is incorrect.
byroot (Jean Boussier)
06:05 PM Feature #15408: Deprecate ObjectSpace._id2ref
@Dan0042 I think @Eregon covered what I was going to say, but I'd also like to know **why** you want `_id2ref` to stick around. There's generally better ways (more reliable, easier for VMs to implement) to everything I have seen it used ... headius (Charles Nutter)
02:47 PM Feature #15408: Deprecate ObjectSpace._id2ref
https://byroot.github.io/ruby/performance/2025/04/26/unlocking-ractors-object-id.html explains the problems of `_id2ref` in details, and how it changed. Eregon (Benoit Daloze)
02:46 PM Feature #15408: Deprecate ObjectSpace._id2ref
@Dan0042 It still is, CRuby has to keep a weak map of all objects for which the object_id was asked in case `_id2ref` is used.
That's a big footprint and performance overhead.
It's also impossible to implement this efficiently, as the ...
Eregon (Benoit Daloze)
01:30 AM Feature #15408: Deprecate ObjectSpace._id2ref
The original reason to deprecate `_id2ref` is no longer relevant now that `object_id` is a monotonically-increasing ID. So I don't think it should be deprecated, unless there's some other benefit/reason that wasn't mentioned above. Dan0042 (Daniel DeLorme)
05:53 PM Revision e3452cfa (git): Raise error on take/send for Ractors in child processes
Ractor objects that are available in a child process should raise a
`Ractor::ClosedError` exception when called with `send` or `take`
Co-authored-by: John Hawthorn <[email protected]>
tenderlovemaking (Aaron Patterson)
05:53 PM Revision f7ff3809 (git): Clean up Ractor cache after fork
Ractors created in a parent process should be properly shut down in the
child process. They need their cache cleared and status set to
"terminated"
Co-authored-by: John Hawthorn <[email protected]>
tenderlovemaking (Aaron Patterson)
05:53 PM Revision d7ad53f2 (git): Acquire VM lock around fork
Otherwise it might be held by another Ractor, causing a deadlock in the
new process.
jhawthorn (John Hawthorn)
05:46 PM Revision c7508563 (git): Fix -Wreturn-type
../variable.c: In function ‘iterate_over_shapes_with_callback’:
../variable.c:2189:1: warning: control reaches end of non-void function [-Wreturn-type]
2189 | }
| ^
k0kubun (Takashi Kokubun)
05:31 PM Feature #20405: Inline comments
There seems to be some revival of this in the context of type checkers, and Hiroya Fujinami graciously asked for my opinion on the Sorbet Slack. I'll chime into say this:
One of the best parts of Ruby is how much freedom it gives you at...
jez (Jake Zimmerman)
04:37 AM Feature #20405: Inline comments
Using type checkers makes it difficult to write Ruby fluently. To make type checkers work effectively in Ruby, we need to add numerous annotations, and these annotations are done via comments. However, Ruby only has line comments. This r... make_now_just (Hiroya Fujinami)
05:13 PM Bug #20957: RangeError on Array#values_at with negative ranges
I found almost same behavior at Array#fill
```
[0,1,2,3].fill(10, -10..-5) #=> RangeError
[0,1,2,3].fill(10, -5..-3) #=> RangeError
[0,1,2,3].fill(10, -3..3) #=> [0, 10, 10, 10]
[0,1,2,3].fill(10, 3..10) #=> [0, 1, 2, 10, ...
kiridaruma (Keiichiro Nishiyama)
03:49 PM Bug #21267: respond_to check in Class#allocate is inconsistent
Right.
I think it's quite valuable to make those `rb_undef_alloc_func` to avoid having to handle uninitialized objects because that means extra checks (performance overhead) and less optimizations.
For example if the Class#superclass i...
Eregon (Benoit Daloze)
04:55 AM Bug #21267: respond_to check in Class#allocate is inconsistent
> Or core types could actually define dup & clone as overridden methods, and not use the alloc function at all and so use rb_undef_alloc_func().
That seems the cleanest actually, WDYT?
Yes. The only options that work are to `rb_undef...
jhawthorn (John Hawthorn)
03:21 PM Feature #21311: Namespace on read (revised)
I think it would be good to compare this to "isolated execution contexts" which is the well-known approach to get such isolation, e.g.:
* CPython has sub-interpreters
* V8 (JavaScript) has isolates
* MRuby has mrb_state/mrb_open() (ba...
Eregon (Benoit Daloze)
01:34 PM Feature #21311: Namespace on read (revised)
I'll do that, thank you! fxn (Xavier Noria)
12:53 PM Feature #21311: Namespace on read (revised)
fxn (Xavier Noria) wrote in #note-44:
> Congrats @tagomoris :).
> ...
Thank you :D
I'm totally open to consider changing the current behavior around permanent classpath including namespace.
But I'll focus on fixing some minor issue...
tagomoris (Satoshi Tagomori)
07:32 AM Feature #21311: Namespace on read (revised)
Congrats @tagomoris :).
Would you be open to consider having the permanent name of classes and modules be constant paths?
fxn (Xavier Noria)
05:23 AM Feature #21311: Namespace on read (revised)
I added committer grants to @tagomoris. Please let me know if you have extra permission or something. hsbt (Hiroshi SHIBATA)
04:34 AM Feature #21311: Namespace on read (revised)
> I nominate @tagomoris (Satoshi Tagomori) for committer.
+1
mame (Yusuke Endoh)
04:25 AM Feature #21311: Namespace on read (revised)
@tagomoris Can you share your required/optional information to me? see https://github.com/ruby/ruby/wiki/Committer-How-To#required hsbt (Hiroshi SHIBATA)
04:21 AM Feature #21311: Namespace on read (revised)
Let's just merge and experiment. We won't know until we actually try it. Also, I nominate @tagomoris for committer.
Matz.
matz (Yukihiro Matsumoto)
02:40 PM Feature #21309 (Rejected): Can Thread::Mutex be Ractor shareable?
osyoyu (Daisuke Aritomo) wrote in #note-5:
> I am not sure about this. Sending HTTP request using net/http inside an Ractor should be a valid use case, and `Timeout` is blocking this (it is internally used to implement `open_timeout` `r...
Eregon (Benoit Daloze)
01:38 PM Feature #21309: Can Thread::Mutex be Ractor shareable?
> if we got some shareable mutable state, then we'd need a shareable mutex
Come to think of it, I now do think that `Mutex`es themselves are not the problem. So yes I agree with you, and am okay to close this ticket (I can come back w...
osyoyu (Daisuke Aritomo)
02:36 PM Revision c18bedcd (git): Remove dependency on debug_counter.h when BUILDING_MODULAR_GC
This allows the default GC to not need debug_counter.h when building as a
modular GC.
peterzhu2118 (Peter Zhu)
02:36 PM Revision 3f5080e7 (git): Stop checking for USE_DEBUG_COUNTER in default.c
We don't need to check for USE_DEBUG_COUNTER because the code is no-op
if USE_DEBUG_COUNTER is not enabled.
peterzhu2118 (Peter Zhu)
02:31 PM Revision 46a82408 (git): [DOC] Tweaks for String#-@
burdettelamar (Burdette Lamar)
01:30 PM Misc #21290: Unable to build ruby extension on Fedora 42 due to possible GCC 15 issues
Just adding that I am also experiencing this with ed25519 and ruby-prof, as well as appsignal.
* **Ruby Version:** 3.3.5 (installed via `rbenv`)
* **Gem causing the issue:** `ed25519` (v1.3.9), `ruby-prof` (v1.7.1), `appsignal` (v4.5...
definiv (Jake W)
08:37 AM Misc #21290: Unable to build ruby extension on Fedora 42 due to possible GCC 15 issues
I also stumbled over this issue and falsely addressed it to mongodb/bson
Here is a Dockerfile which lets you reproduce the issue
https://github.com/mongodb/bson-ruby/discussions/351#discussioncomment-13059541
AUlrich (Andreas Ulrich)
03:03 AM Misc #21290: Unable to build ruby extension on Fedora 42 due to possible GCC 15 issues
Hi,
I am also experiencing a similar issue when trying to install a Ruby gem with C extensions (`blurhash` and `ruby-prof`) on Ruby 3.4.3. The compilation fails with errors related to `bool` and `stdbool.h`, similar to what has been d...
hongminhee (Minhee Hong)
12:22 PM Revision 5e534849 (git): ZJIT: Temporarily revert path compression
For reasons I don't understand yet, this causes an issue when trying to
boot yjit-bench. Temporarily revert it.
Max Bernstein
09:59 AM Bug #21286: Windows - MSYS2 just updated to GCC 15.1.0, builds failing
ruby_3_4 merged commit:7e44df91b6d01be68391a029997f5ccdabe80603 alanwu (Alan Wu)
09:20 AM Revision f3006c26 (git): Add depend files under ext/-test-
nobu (Nobuyoshi Nakada)
09:07 AM Feature #21042: Add and expose Thread#memory_allocations memory allocation counters
only 3 statistics are acceptable.
I don't want to increase more and more measurements from performance perspective.
ko1 (Koichi Sasada)
09:03 AM Revision a41eed99 (git): [rubygems/rubygems] Update `TarWriter` test to store mtime in a variable
https://github.com/rubygems/rubygems/commit/0e2cec3fa3 Ellen Marie Dash
09:03 AM Revision 819ecd11 (git): [rubygems/rubygems] Add mtime to Gem::Package::TarWriter#add_file argument
Since 9e21dd9, Gem::Package::TarWriter#add_file adds the file to
the tar with Gem.source_date_epoch for its mtime.
This behavior breaks the code depending on the previous add_file
behavior.
Therefore, add_file accepts mtime as an argumen...
unasuke (Yusuke Nakamura)
09:03 AM Revision 8685a81e (git): [ruby/strscan] jruby: Check if len++ walked off the end
(https://github.com/ruby/strscan/pull/153)
Fix https://github.com/ruby/strscan/pull/152
CRuby can walk off the end because there's always a null byte. In JRuby,
the byte array is often (usually?) the exact size of the string. So we
nee...
headius (Charles Nutter)
09:03 AM Revision 5a0306f9 (git): [ruby/strscan] jruby: Pass end index to byteListToInum
(https://github.com/ruby/strscan/pull/150)
These parse methods take begin and end indices, not begin and length. A
test is included.
Fixes https://github.com/jruby/jruby/issues/8823
https://github.com/ruby/strscan/commit/9690e39e73
headius (Charles Nutter)
09:03 AM Revision 61b6f226 (git): [ruby/json] Constify static data in fpconv.c
https://github.com/ruby/json/commit/3b605d9b1e nobu (Nobuyoshi Nakada)
09:03 AM Revision 1f2a9dc2 (git): [ruby/psych] Refine Ruby 3.5 Set support.
Use feature testing to detect native Set,
and don't rely on `Set#to_h` which wasn't intended
as a public method.
https://github.com/ruby/psych/commit/d58cff11af
byroot (Jean Boussier)
07:50 AM Revision 49b4e035 (git): Make test/ruby/test_env.rb#test_delete_if_in_ractor easier to debug
byroot (Jean Boussier)
07:50 AM Revision 71baa694 (git): variable.c: Fix compilation warnings
```
variable.c: In function ‘iterate_over_shapes_with_callback’:
variable.c:2188:1: warning: control reaches end of non-void function [-Wreturn-type]
2188 | }
| ^
variable.c: In function ‘rb_field_get’:
variable.c:...
byroot (Jean Boussier)
05:58 AM Revision cf9046c0 (git): Refactor `id_to_obj_tbl` compaction
Use `st_foreach_with_replace` rather than to call `st_insert`
from inside `st_foreach`, this saves from having to disable GC.
Co-Authored-By: Peter Zhu <[email protected]>
byroot (Jean Boussier)
05:58 AM Revision 2d1241ba (git): Get rid of RB_GC_VM_ID_TO_OBJ_TABLE_KEYS
byroot (Jean Boussier)
05:58 AM Revision f48e45d1 (git): Move `object_id` in object fields.
And get rid of the `obj_to_id_tbl`
It's no longer needed, the `object_id` is now stored inline
in the object alongside instance variables.
We still need the inverse table in case `_id2ref` is invoked, but
we lazily build it by walking ...
byroot (Jean Boussier)
05:58 AM Revision d34c1505 (git): shape.c: refactor frozen shape to no longer be final
This opens the door to store more informations in shapes, such
as the `object_id` or object address in case it has been observed
and the object has to be moved.
byroot (Jean Boussier)
05:58 AM Revision 6c9b3ac2 (git): Refactor OBJ_TOO_COMPLEX_SHAPE_ID to not be referenced outside shape.h
Also refactor checks for `->type == SHAPE_OBJ_TOO_COMPLEX`. byroot (Jean Boussier)
05:58 AM Revision 0ea210d1 (git): Rename `ivptr` -> `fields`, `next_iv_index` -> `next_field_index`
Ivars will longer be the only thing stored inline
via shapes, so keeping the `iv_index` and `ivptr` names
would be confusing.
Instance variables won't be the only thing stored inline
via shapes, so keeping the `ivptr` name would be conf...
byroot (Jean Boussier)
03:51 AM Feature #21274: Show performance warnings for easily avoidable unnecessary implicit splat allocations
> The term premature optimization typically refers to cases where you optimize, and later, the optimization results in a negative effect.
I have to disagree here. Premature optimization typically refers to cases where you optimize cod...
Dan0042 (Daniel DeLorme)
03:25 AM Feature #21274: Show performance warnings for easily avoidable unnecessary implicit splat allocations
Dan0042 (Daniel DeLorme) wrote in #note-2:
> I appreciate the effort here, but I wonder if this might be a case of premature micro-optimization. Was there a measureable performance improvement from these changes? If the gains are neglig...
jeremyevans0 (Jeremy Evans)
03:06 AM Feature #21274: Show performance warnings for easily avoidable unnecessary implicit splat allocations
I appreciate the effort here, but I wonder if this might be a case of premature micro-optimization. Was there a measureable performance improvement from these changes? If the gains are negligible, we should be cautious about encouraging ... Dan0042 (Daniel DeLorme)
03:34 AM Revision 4e30b77b (git): Added depend file for test/-ext-/econv/test_append.rb
https://github.com/ruby/ruby/commit/ce51ef30df5bf07ec3881a377f0011b8f20ec507 broke
ext/-test-/econv/append.o. We should rebuild that object file when dependencies are updated.
hsbt (Hiroshi SHIBATA)
01:59 AM Feature #21279: Bare "rescue" should not rescue NameError
byroot (Jean Boussier) wrote in #note-5:
> 99% of the time, when I use a bare `rescue` it's because I'll call `raise` again, or calling unknown code and I need to not crash, etc.
> ...
Fully agree with the above.
I understand the ra...
Dan0042 (Daniel DeLorme)

05/07/2025

05:29 PM Feature #21311: Namespace on read (revised)
Eregon (Benoit Daloze) wrote in #note-12:
> Unless they truly need to communication at all between namespaces, but then different processes (or multiple interpreters in a process) might be a better trade-off (notably can run in parallel...
Eregon (Benoit Daloze)
05:20 PM Feature #21311: Namespace on read (revised)
Basically, I believe the idea is to have isolated execution contexts without forking, but is hard to achieve that by subclassing Module and tweeking things. Could be wrong, but it is my hunch. As I said, I believe this might need a new e... fxn (Xavier Noria)
05:18 PM Feature #21311: Namespace on read (revised)
tagomoris (Satoshi Tagomori) wrote in #note-28:
> Mounting server-less applications (run on AWS Lambda, separated on processes in production) on a single app server for development
Why not simply using different processes for that? C...
Eregon (Benoit Daloze)
05:09 PM Feature #21311: Namespace on read (revised)
tagomoris (Satoshi Tagomori) wrote:
> Root namespace is a unique namespace to be defined when a Ruby process starts. It only contains built-in classes/modules/constants, which are available without any `require` calls, including RubyGem...
Eregon (Benoit Daloze)
05:07 PM Feature #21311: Namespace on read (revised)
Aaron that is a concern I have also in mind that I have not expressed yer.
The current proposal allows access to the user namespaces from the creating one And believe some use cases in this thread re dogfood need that communication.
...
fxn (Xavier Noria)
05:01 PM Feature #21311: Namespace on read (revised)
Eregon (Benoit Daloze) wrote in #note-12:
> * Any user-defined class instance won't be `is_a?` in another namespace and this might be particularly confusing for stdlib/default gems/bundled gems, e.g. a Date or Pathname created in `ns1` ...
tenderlovemaking (Aaron Patterson)
04:36 PM Feature #21311: Namespace on read (revised)
Dan0042 (Daniel DeLorme) wrote in #note-19:
> I'm not sure if this can be achieved with TruffleRuby sub-interpreters or how you would go about it.
It's easy with sub-interpreters, you would create a sub-interpreter instead of a names...
Eregon (Benoit Daloze)
02:57 PM Feature #21311: Namespace on read (revised)
@tagomoris thanks for your replies, even more with such a busy thread :). Let me followup:
> There should be no needs for library developers to consider such things.
Namespace is designed to isolate side effects of "the entry point of a...
fxn (Xavier Noria)
02:24 PM Feature #21311: Namespace on read (revised)
byroot (Jean Boussier) wrote in #note-24:
> But I'd like to hear about common green path, day to day, use cases, not fringe needs.
Just was reminded of another gem I wrote that utilizes this pattern.
I use it two ways.
1. When I am wr...
peter.boling (Peter Boling)
02:09 PM Feature #21311: Namespace on read (revised)
Thank you for expanding on the motivation, the design makes more sense to me now.
I'm still not convinced the tradeoff is worth it, but at least it makes sense.
Out of curiosity, have to ran the `yjit-bench` suite? I know it's a pr...
byroot (Jean Boussier)
02:04 PM Feature #21311: Namespace on read (revised)
@fxn
> So, I guess spawning does not create hierarchy. A namespace may not have a pointer to the namespace where it was born (or I don't see the need for it after creation). It is conceptually just one flat layer of independent user n...
tagomoris (Satoshi Tagomori)
01:48 PM Feature #21311: Namespace on read (revised)
I'm sorry that I skipped to make effort to describe the motivation and copied the motivation section from the past ticket (and it was not well described enough).
Let me explain the motivation in detail. I had some mixed points below:
...
tagomoris (Satoshi Tagomori)
07:08 AM Feature #21311: Namespace on read (revised)
I have compiled the branch and I am playing around a bit with `miniruby` to test my understanding of the feature.
Something that has caught my attention is that class and module names do not return constant paths. That is, the following...
fxn (Xavier Noria)
02:19 AM Feature #21311: Namespace on read (revised)
FYI: you can try namespace PR on https://ruby.github.io/play-ruby/?run=14855772787&options=%7B%22arguments%22%3A%5B%5D%2C%22env%22%3A%7B%22RUBY_NAMESPACE%22%3A1%7D%7D&code=%0Adef+foo+%3D+%3Amain%0A%0Ans1+%3D+Namespace.new%0Ans1.require%2... ko1 (Koichi Sasada)
05:09 PM Feature #21254 (Closed): Inlining Class#new
mame (Yusuke Endoh) wrote in #note-10:
> @tenderlovemaking Can we close this?
Yes, sorry. I thought I had closed this.
Merged in 8ac8225c504dee57454131e7cde2c47126596fdc
tenderlovemaking (Aaron Patterson)
06:37 AM Feature #21254: Inlining Class#new
Note: https://github.com/ruby/ruby/pull/13080 has been merged. hsbt (Hiroshi SHIBATA)
06:36 AM Feature #21254: Inlining Class#new
@tenderlovemaking Can we close this? mame (Yusuke Endoh)
05:04 PM Revision 7e44df91 (git): Fix C23 (GCC 15) WIN32 compatibility for rb_define_* functions
Backport [Bug #21286] alanwu (Alan Wu)
03:47 PM Revision 3e94b5f9 (git): Remove dependence on internal/hash.h for default GC
peterzhu2118 (Peter Zhu)
06:07 AM Bug #18878 (Assigned): parse.y: Foo::Bar {} is inconsistently rejected
mame (Yusuke Endoh)
05:01 AM Misc #21281: DevMeeting-2025-05-08
* [Feature #21258] Retire CGI library from Ruby 3.5
* Can I remove CGI library without `CGI::Util` ?
* What's the preferred migration process?
1. We keep only cgi/escape (C impl)feature in Ruby.
2. We keep `cgi/util` with `c...
hsbt (Hiroshi SHIBATA)

05/06/2025

11:50 PM Bug #21312 (Assigned): ruby 3.5-dev installs a gemspec for rdoc that misses dependencies
hsbt (Hiroshi SHIBATA)
05:46 PM Bug #21312 (Closed): ruby 3.5-dev installs a gemspec for rdoc that misses dependencies
Similarly to https://bugs.ruby-lang.org/issues/20581, installing ruby 3.5-dev installs a gemspec for rdoc that it's missing its own dependency on psych.
This causes issues when using Bundler, as reported at https://github.com/rubygems...
deivid (David Rodríguez)
10:35 PM Revision 4aac1506 (git): Skip an unstable Ractor test
k0kubun (Takashi Kokubun)
10:34 PM Revision 7afa08ce (git): YJIT: End the block after OPTIMIZE_METHOD_TYPE_CALL
k0kubun (Takashi Kokubun)
10:32 PM Bug #21310 (Feedback): YJIT optimization causes incorrect is_a? method evaluation
I think it's most likely fixed by https://github.com/ruby/ruby/pull/13245. It's going to be shipped in the next release. I'm thinking of releasing it as soon as we address a few other similar cases. k0kubun (Takashi Kokubun)
01:08 AM Bug #21310 (Closed): YJIT optimization causes incorrect is_a? method evaluation
Our Rails application contains code like the following:
```ruby
result = a_proc.call
if result.is_a?(Result) && result.nil?
puts('This should be impossible')
end
```
With YJIT enabled in dev mode and the `yjit-call-thresho...
ravron-hb (Riley Avron)
10:32 PM Revision d6d63b27 (git): Enabled debug mode for CodeQL
hsbt (Hiroshi SHIBATA)
08:00 PM Feature #21311: Namespace on read (revised)
Agreed on all points. I have little concept of the complexity of the implementation, and defer to you on that. I think there is value in considering that we can't entirely know how it might be used since we don't have it yet, and that ... peter.boling (Peter Boling)
07:03 PM Feature #21311: Namespace on read (revised)
peter.boling (Peter Boling) wrote in #note-23:
> One use case for this is to benchmark libraries that do the same thing against each other. Very frequently libraries doing the same thing are forks of each other, and just as frequentl...
byroot (Jean Boussier)
06:41 PM Feature #21311: Namespace on read (revised)
byroot (Jean Boussier) wrote in #note-13:
> > Avoiding name conflicts between libraries: Applications can require two different libraries safely which use the same module name.
> ...
One use case for this is to benchmark libraries that d...
peter.boling (Peter Boling)
06:01 PM Feature #21311: Namespace on read (revised)
Dan0042 (Daniel DeLorme) wrote in #note-19:
> It's not about "working around" libraries. It's about loading entirely different and independent apps within the same process.
So that's not something I understood for the issue descripti...
byroot (Jean Boussier)
04:47 PM Feature #21311: Namespace on read (revised)
If my interpretation is correct, the entry point of a library will be executed as many times as user namespaces require it, in the same operating system process.
That is a potential gotcha to have in mind too, since nowadays you can k...
fxn (Xavier Noria)
04:38 PM Feature #21311: Namespace on read (revised)
My interpretation of the vocabulary is as following:
1. The interpreter boots in a `root` namespace.
1. The "state" when this process ends is somehow snapshotted into `S` or something, conceptually (plenty of details here, but I am talk...
fxn (Xavier Noria)
03:13 PM Feature #21311: Namespace on read (revised)
byroot (Jean Boussier) wrote in #note-13:
> I personally see namespaces as a feature libraries can use to write more robust and isolated code. Not as a feature applications can use to workaround libraries.
It's not about "working aro...
Dan0042 (Daniel DeLorme)
02:59 PM Feature #21311: Namespace on read (revised)
> The main and user namespaces are independent
@eregon the description says
> ...
The vocabulary is not very clear to me. What is a "script", is `active_record.rb` a script? If "User namespace is a namespace to run users' Ruby scri...
fxn (Xavier Noria)
12:11 PM Feature #21311: Namespace on read (revised)
@byroot makes a good point about use cases, I share the same concerns (and already did in https://bugs.ruby-lang.org/issues/19744#note-21 a while ago).
It seems easy to avoid these problems and these problems don't seem to come up frequ...
Eregon (Benoit Daloze)
12:01 PM Feature #21311: Namespace on read (revised)
Has the performance of Namespace been evaluated?
I would assume getting the current namespace to execute methods/procs is an overhead (the namespace is at least needed for constant accesses and for method lookup on builtin classes).
...
Eregon (Benoit Daloze)
11:56 AM Feature #21311: Namespace on read (revised)
(from description)
> There is no way to access App in the main namespace from the code in the different namespace ns.
Right, although of course the main namespace can do `ns1::MainApp = App` and expose its class like that.
I wonde...
Eregon (Benoit Daloze)
11:55 AM Feature #21311: Namespace on read (revised)
While I believe namespaces would be a good addition to Ruby, I'm not convinced this particular implementation of
namespaces is what Ruby needs.
First, I'm not convinced by the motivations:
> Avoiding name conflicts between librari...
byroot (Jean Boussier)
11:52 AM Feature #21311: Namespace on read (revised)
I think this addresses https://bugs.ruby-lang.org/issues/19744#note-74 by having a CoW copy of all builtin classes/modules in each namespace (including main namespace), nice.
From a quick read it sounds correct to me.
The semantics might...
Eregon (Benoit Daloze)
11:38 AM Feature #21311: Namespace on read (revised)
@fxn The main and user namespaces are independent, though the main namespace can refer to user namespace via `ns::SomeConstant`.
So the `App` from `main` here is inaccessible in `ns1`, in fact all constants defined in the main namespace...
Eregon (Benoit Daloze)
10:18 AM Feature #21311: Namespace on read (revised)
> having a block parameter on Namespace.new could provide similar UX without changing syntax.
That wouldn't handle constant definitions correctly though. Similar to how people get tricked by `Struct.new do` today.
```ruby
Foo = St...
byroot (Jean Boussier)
10:17 AM Feature #21311: Namespace on read (revised)
> any user-defined classes/modules are not defined in the root namespace.
Ah, that is key.
So, what happens in this script?
```ruby
# main.rb
App = Class.new
ns1 = Namespace.new
ns1.require("./app1") # defines/reopens Ap...
fxn (Xavier Noria)
10:01 AM Feature #21311: Namespace on read (revised)
fxn (Xavier Noria) wrote in #note-6:
> In Ruby, objects are stored in constants. Conceptually, a constant `X` storing a string object and a constant `C` storing a class object are not fundamentally different. Do you mean namespace creat...
tagomoris (Satoshi Tagomori)
09:22 AM Feature #21311: Namespace on read (revised)
Thanks @tagomoris.
> Conceptually, yes. Definitions are deeply cloned. But objects (stored on constants, etc) will not be cloned (See below).
Let me understand this one better.
In Ruby, objects are stored in constants. Conceptually, a...
fxn (Xavier Noria)
08:00 AM Feature #21311: Namespace on read (revised)
fxn (Xavier Noria) wrote in #note-2:
> A few quick questions:
> ...
Yes. At that time, `self` will be a cloned (different) object from `main` in optional namespaces.
> So, when a namespace is created, do we have to think that the en...
tagomoris (Satoshi Tagomori)
07:46 AM Feature #21311: Namespace on read (revised)
@baweaver I don't have strong opinion about adding `namespace` keyword, but having a block parameter on `Namespace.new` could provide similar UX without changing syntax.
```ruby
NamespaceOne = Namespace.new do
require "./app1"
end
...
tagomoris (Satoshi Tagomori)
06:24 AM Feature #21311: Namespace on read (revised)
A few quick questions:
Assuming a normal execution context, nesting at the top level of a file is empty. Would it be also empty if the file is loaded under a namespace?
The description mentions classes and modules, which is kind of int...
fxn (Xavier Noria)
05:46 AM Feature #21311: Namespace on read (revised)
As a proof of concept this is a very valuable idea, and will give users a chance to experiment with it.
I wonder about the long-term ergonomics of this though, and if it may make sense to potentially introduce in Ruby 4 a new keyword ...
baweaver (Brandon Weaver)
05:16 AM Feature #21311 (Assigned): Namespace on read (revised)
This replaces #19744
## Concept
This proposes a new feature to define virtual top-level namespaces in Ruby. Those namespaces can require/load libraries (either .rb or native extension) separately from other namespaces. Dependencie...
tagomoris (Satoshi Tagomori)
07:45 PM Bug #21313 (Closed): `it` in rescue/ensure on prism
```ruby
1.times do
raise
rescue
p it
#=> prism: false
#=> parse.y: 0
end
```
`it` should return 0, shouldn't it?
demo:
parse.y: https://ruby.github.io/play-ruby/?code=p+RUBY_DESCRIPTION%0A%0A1.times+do%0A++raise%...
ko1 (Koichi Sasada)
05:13 PM Revision cb772247 (git): Improve correctness contention for allocated object counts
Currently the count of allocated object for a heap is incremented
without regards to parallelism which leads to incorrect counts.
By maintaining a local counter in the ractor newobj cache, and only
syncing atomically with some granulari...
etienne (Étienne Barrié)
03:11 PM Revision 925da368 (git): Parse topn, opt_length, opt_size into HIR
Max Bernstein
11:18 AM Feature #21309: Can Thread::Mutex be Ractor shareable?
> Now, more generally, if we got some shareable mutable state, then we'd need a shareable mutex. I just haven't yet encountered that case.
Yes, and the shareable mutable state can't be accessed by Ractor, as Ractor prevents shareable ...
Eregon (Benoit Daloze)
10:14 AM Feature #21309: Can Thread::Mutex be Ractor shareable?
I'm not sure I see the use case for `Mutex` to be shareable, at least in this specific scenario.
To take the `Timeout.timeout` example, making the mutex accessible from other ractors wouldn't solve the problem, because ultimately you ...
byroot (Jean Boussier)
08:19 AM Feature #21309: Can Thread::Mutex be Ractor shareable?
> At least for Queue it's not that simple, because it contains objects
Indeed, you're right about Queue. I overlooked that. Since Queue isn't really a concurrency primitive, I think it'd be fine remaining Ractor unshareable.
On the...
osyoyu (Daisuke Aritomo)
09:19 AM Feature #21308: Replacing the Float#to_s (dtoa.c) implementation with a modern algorithm
The interface of `fpconv_dtoa()` looks quite different from `dtoa()` in missing/dtoa.c.
Rather `grisu2()` itself is closer?
nobu (Nobuyoshi Nakada)
05:23 AM Feature #19744 (Closed): Namespace on read
jeremyevans0 (Jeremy Evans)
05:19 AM Feature #19744: Namespace on read
This is replaced by #21311.
Could someone close this?
tagomoris (Satoshi Tagomori)
05:06 AM Revision 1c68aae9 (git): Check LoadError first
The message from dlerror is not our concern. nobu (Nobuyoshi Nakada)
05:06 AM Revision 54950b1f (git): Added assertion strings with Xcode 16.3 beta
hsbt (Hiroshi SHIBATA)
03:11 AM Bug #21286: Windows - MSYS2 just updated to GCC 15.1.0, builds failing
ruby_3_3 commit:ffd469bd6d06df10057325a5b8c773fca009af8d merged revision(s) commit:719486a642f0e282b02b958069b8b39b85b3aa1e. nagachika (Tomoyuki Chikanaga)
02:29 AM Revision ffd469bd (git): merge revision(s) 719486a642f0e282b02b958069b8b39b85b3aa1e: [Backport #21286]
Fix C23 (GCC 15) WIN32 compatibility for rb_define_* functions
Fixes [Bug #21286]
nagachika (Tomoyuki Chikanaga)

05/05/2025

09:26 PM Bug #21030: Bug: #step with Range<ActiveSupport::Duration> behavior broken on Ruby 3.4.1
I also verified the fix in 3.4.3 in my app. The behavior is correct. johnnyshields (Johnny Shields)
08:09 PM Bug #21030: Bug: #step with Range<ActiveSupport::Duration> behavior broken on Ruby 3.4.1
@jamesst20 https://github.com/ruby/ruby/commit/6d2c7d4304bbf8450d31b624f5dc40a92e44f00b is in 3.4.3 though.
And I don't see any revert in https://github.com/ruby/ruby/compare/v3_4_2...v3_4_3
Are you sure it's not fixed in 3.4.3?
It's eve...
Eregon (Benoit Daloze)
06:44 PM Bug #21030: Bug: #step with Range<ActiveSupport::Duration> behavior broken on Ruby 3.4.1
jamesst20 (James St-Pierre) wrote in #note-8:
> According to the changelogs for v3.4.2, this wasn't included?
> ...
To add more details, this fix was also not included in v3.4.3.
The fix: https://github.com/ruby/ruby/commit/f56f3eaa...
jamesst20 (James St-Pierre)
08:35 PM Revision cbf9c088 (git): YJIT: End the block after OPTIMIZE_METHOD_TYPE_CALL (#13245)
k0kubun (Takashi Kokubun)
08:04 PM Feature #21309: Can Thread::Mutex be Ractor shareable?
At least for Queue it's not that simple, because it contains objects, and the invariants of Ractor (without which it would just segfault) are:
1. no object can be accessed by multiple Ractors, unless it is a shareable object.
2. Sharea...
Eregon (Benoit Daloze)
04:46 PM Feature #21309 (Rejected): Can Thread::Mutex be Ractor shareable?
## Background
Keeping a `Mutex` object in a constant or a class instance variable is a common pattern seen in code with thread safety in mind. However, this kind of code does not play well with Ractors:
```ruby
require 'thread'
...
osyoyu (Daisuke Aritomo)
04:04 PM Revision 4621feb6 (git): ZJIT: Use 2024 edition for rustc-only release builds
alanwu (Alan Wu)
01:55 PM Revision e042e106 (git): vm_dump.c: avoid `USE_MN_THREADS` is not defined warning
byroot (Jean Boussier)
01:34 PM Revision 3a2e56e6 (git): Fix `USE_MN_THREADS=0` builds on macOS
This was recently broken. byroot (Jean Boussier)
12:44 PM Revision a3af4e90 (git): Make rb_shape.capacity an `attr_index_t`
byroot (Jean Boussier)
12:44 PM Revision bbea71fa (git): variable.c: Fix too_complex shape initialization
`SHAPE_OBJ_TOO_COMPLEX` is a `shape_type` not a `shape_id_t`. byroot (Jean Boussier)
12:44 PM Revision 53ae5580 (git): Improve style consistency of `rb_shape_t *`
byroot (Jean Boussier)
10:20 AM Bug #21304 (Closed): heap-use-after-free of Array#hash via mutating hash method
Applied in changeset commit:git|ce8f7da49e2fea995993b49aa7a26f7640c2e258.
----------
[Bug #21304] Reload length and pointer after `#hash` method
The receiver can be modified during the method calls.
nobu (Nobuyoshi Nakada)
10:20 AM Revision 5b1a61e2 (git): [ruby/digest] stringop-overread warning is since GCC 11
https://github.com/ruby/digest/commit/d16853fe8c nobu (Nobuyoshi Nakada)
09:40 AM Feature #21308 (Open): Replacing the Float#to_s (dtoa.c) implementation with a modern algorithm
This is a feature request to replace Ruby's `Float#to_s` implementation with a modern high-performance float-to-string conversion algorithm such as Grisu.
Currently, `Float#to_s` in Ruby uses the BSD-derived implementation in [missing...
watson1978 (Shizuo Fujita)
09:25 AM Revision bbf1130f (git): Add `RBIMPL_ATTR_NONSTRING_ARRAY()` macro for GCC 15
nobu (Nobuyoshi Nakada)
05:27 AM Bug #21298: `ObjectSpace.allocation_class_path` returns inconsistent results depending on `TracePoint` state
> Would it be possible for power_assert to avoid depending on Class#new being present in the stack trace?
I updated power_assert.
https://github.com/ruby/power_assert/pull/56
Now, it should work.
ktsj (Kazuki Tsujimoto)
12:46 AM Revision ce51ef30 (git): Save one VALUE per embedded RTypedData
This halves the amount of memory used for embedded RTypedData if they
are one VALUE (8 bytes on 64-bit platforms) over the slot size limit.
For Set, on 64-bit it uses an embedded 56-byte struct. With the
previous implementation, the em...
jeremyevans (Jeremy Evans)

05/04/2025

09:14 PM Revision 35918df7 (git): [DOC] Tweaks for String#+
burdettelamar (Burdette Lamar)
09:14 PM Revision d2de5979 (git): [DOC] Tweaks for String#*
burdettelamar (Burdette Lamar)
09:13 PM Revision d71e1714 (git): [DOC] Tweaks for String#%
burdettelamar (Burdette Lamar)
01:17 PM Misc #21290: Unable to build ruby extension on Fedora 42 due to possible GCC 15 issues
I confirm I have the same problem on arch. With multiple ruby version (3.2, 3.3, 3.4). Example of gems failing are `jaro_winkler` or `ruby-prof`.
Is there any way to fix without touching gem code? Some kind of system flag to set?
anykeyh (Yacine PETITPREZ)
07:42 AM Misc #21290: Unable to build ruby extension on Fedora 42 due to possible GCC 15 issues
Thanks for the heads-up about using `append_flags`. I used it to fix the issue for the ed25519 gem and a new version was released resolving the problem. I think this issue can be closed. dennmart (Dennis Martinez)
12:40 PM Revision ce8f7da4 (git): [Bug #21304] Reload length and pointer after `#hash` method
The receiver can be modified during the method calls. nobu (Nobuyoshi Nakada)
12:38 PM Bug #21267: respond_to check in Class#allocate is inconsistent
I think it makes sense to replace or remove that "incorrect" check given it doesn't apply to `new`.
The proper fix seems to also do the correct check in `new`.
I think it's best to keep the possibility for 3rd party C extensions to u...
Eregon (Benoit Daloze)
01:19 AM Bug #21267: respond_to check in Class#allocate is inconsistent
At RubyKaigi @byroot and I looked at this and came up with a more efficient and resilient way to do the check (https://github.com/ruby/ruby/commit/a6365cef1084191f992ee55fa661cb9aa2196c39). But coming back to this I again don't think it'... jhawthorn (John Hawthorn)
10:43 AM Bug #21302: Remove or Fix Set#to_h
I agree to remove it. nobu (Nobuyoshi Nakada)
02:05 AM Bug #21301: Invalid Dates Accepted When Using "UTC" in Time.new
Ah yeah, rolling over seconds seems trickier. I think the time with the offset doesn't have to deal with all that because it doesn't set the `vtm` struct right away. Instead, it only sets the `timew` (a kind of timestamp) and then calcul... dodecadaniel (Daniel Colson)
01:26 AM Misc #21281: DevMeeting-2025-05-08
* [Feature #21267] `respond_to` check in `Class#allocate` is inconsistent
* `Class#allocate` does a slow `respond_to` check to try to prevent uninitialized values via `method(:allocate).bind_call` on `MatchData`, `Refinement`, `Module...
jhawthorn (John Hawthorn)

05/03/2025

07:11 PM Bug #21306 (Closed): heap-use-after-free in set initialization via clearing the array while it’s being iterated
Applied in changeset commit:git|21035c826db5933cf836a4a12fb74b696a76b255.
----------
Handle mutating of array passed to Set.new during iteration
This avoids a heap-use-after-free.
Fixes [Bug #21306]
jeremyevans (Jeremy Evans)
06:23 PM Bug #21306: heap-use-after-free in set initialization via clearing the array while it’s being iterated
Potential fix in https://github.com/ruby/ruby/pull/13253
I'm not sure ASAN is supported on OpenBSD, so I'm not sure I can test with ASAN. If you could test to confirm the fix, I would appreciate it.
jeremyevans0 (Jeremy Evans)
01:26 PM Bug #21306 (Closed): heap-use-after-free in set initialization via clearing the array while it’s being iterated
Hi, we found a heap-use-after-free in set initialization
via clearing the array while it’s being iterated. Here is the PoC.
```
$a = (1..100).to_a
s = Set.new($a) { |x|
$a.clear
}
```
Initializing a Set with an array th...
cyruscyliu (Qiang Liu)
07:11 PM Bug #21305 (Closed): heap-use-after-free of set#merge via mutating hash method
Applied in changeset commit:git|be665cf855d7b35ce166ea1137d4f8d0cac1010b.
----------
Handle mutation of array being merged into set
Check length of array during every iteration, as a #hash method
could truncate the array, resulting in ...
jeremyevans (Jeremy Evans)
06:23 PM Bug #21305: heap-use-after-free of set#merge via mutating hash method
Potential fix in https://github.com/ruby/ruby/pull/13253
I'm not sure ASAN is supported on OpenBSD, so I'm not sure I can test with ASAN. If you could test to confirm the fix, I would appreciate it.
jeremyevans0 (Jeremy Evans)
01:19 PM Bug #21305 (Closed): heap-use-after-free of set#merge via mutating hash method
Hi, we found a heap-use-after-free of set#merge via mutating hash method. Here
is the PoC.
```
class C
def hash
$a.clear
return 0
end
end
$a = (1..100).to_a
$a.insert(0, C.new)
$b = Set.new([])
$b....
cyruscyliu (Qiang Liu)
07:10 PM Revision 21035c82 (git): Handle mutating of array passed to Set.new during iteration
This avoids a heap-use-after-free.
Fixes [Bug #21306]
jeremyevans (Jeremy Evans)
07:10 PM Revision be665cf8 (git): Handle mutation of array being merged into set
Check length of array during every iteration, as a #hash method
could truncate the array, resulting in heap-use-after-free.
Fixes [Bug #21305]
jeremyevans (Jeremy Evans)
06:39 PM Bug #21302: Remove or Fix Set#to_h
I think you can just remove it. I used it in Pysch because it was there, if it wasn't intended to be added, just remove it and psych will use something else. byroot (Jean Boussier)
07:35 AM Bug #21302 (Closed): Remove or Fix Set#to_h
When backwards-compatible marshalling support for Set was added in commit:926411171d296859839745a536aa86bc1e18aa76, Set#to_h was added. I'm not sure if intentionally or accidentally (@nobu knows). The method is not backwards compatible... jeremyevans0 (Jeremy Evans)
06:25 PM Misc #21281: DevMeeting-2025-05-08
* [Feature #21307] A way to strictly validate time input (mame)
* I want to confirm that the current tolerant behavior of Time.new is intentional, and if so, want a strict variant of Time.new.
mame (Yusuke Endoh)
07:43 AM Misc #21281: DevMeeting-2025-05-08
* [Feature #21274] Show performance warnings for easily avoidable unnecessary implicit splat allocations (jeremyevans0)
* This warning only shows method calls that are allocating unnecessarily, where allocation can be avoided by using...
jeremyevans0 (Jeremy Evans)
06:17 PM Feature #21307 (Assigned): A way to strictly validate time input
Currently, `Time.new` sometimes silently rolls over invalid date/time values:
```ruby
Time.new(2025, 2, 29, 0, 0, 0, "+00:00") #=> 2025-03-01 00:00:00
Time.new(2025, 1, 1, 24, 0, 0, "+00:00") #=> 2025-01-02 00:00:00
Time.new(2025, ...
mame (Yusuke Endoh)
05:22 PM Bug #21304: heap-use-after-free of Array#hash via mutating hash method
Thanks for the clear bug report! https://github.com/ruby/ruby/pull/13250 mame (Yusuke Endoh)
01:14 PM Bug #21304 (Closed): heap-use-after-free of Array#hash via mutating hash method
Hi, we found a heap-use-after-free of Array#hash via mutating hash method. Here
is the PoC.
```
class C
def hash()
puts $a
$a.push(*1..100000)
return 0
end
end
c = C.new
$a = [c]
$a.push(*1...
cyruscyliu (Qiang Liu)
05:20 PM Bug #21303 (Closed): heap-buffer-overflow of Array#difference via mutating hash method
Applied in changeset commit:git|f3246ccebb0ccb8667fc6f143e69ecc2a9e3fb3c.
----------
Fix an ASAN error in Array#difference
[Bug #21303]
mame (Yusuke Endoh)
04:48 PM Bug #21303: heap-buffer-overflow of Array#difference via mutating hash method
Thanks! I created a PR: https://github.com/ruby/ruby/pull/13249 mame (Yusuke Endoh)
12:55 PM Bug #21303 (Closed): heap-buffer-overflow of Array#difference via mutating hash method
Hi, we found a heap-buffer-overflow of Array#difference via mutating hash
method. Here is the PoC.
```
class C
def hash
$a.clear
return 0
end
def eql?(other)
return true
end
end
$...
cyruscyliu (Qiang Liu)
05:20 PM Revision f3246cce (git): Fix an ASAN error in Array#difference
[Bug #21303] mame (Yusuke Endoh)
04:34 PM Bug #21301: Invalid Dates Accepted When Using "UTC" in Time.new
Thanks. Actually, the same issue also occurs with a value of 60 for seconds:
```ruby
Time.new(2025, 1, 1, 0, 0, 60, "UTC") #=> 2025-01-01 00:00:60 UTC # invalid
Time.new(2025, 1, 1, 0, 0, 60, "+00:00") #=> 2025-01-01 00:01:00 +...
mame (Yusuke Endoh)
03:35 AM Bug #21301: Invalid Dates Accepted When Using "UTC" in Time.new
Possible fix: https://github.com/ruby/ruby/pull/13246 dodecadaniel (Daniel Colson)
12:39 PM Revision 2be117a9 (git): Fix `heap-use-after-free` in `free_fast_fallback_getaddrinfo_entry` (#13231)
This change addresses the following ASAN error:
```
==36597==ERROR: AddressSanitizer: heap-use-after-free on address 0x512000396ba8 at pc 0x7fcad5cbad9f bp 0x7fff19739af0 sp 0x7fff19739ae8
WRITE of size 8 at 0x512000396ba8 thread T0
...
Misaki Shioi
06:58 AM Bug #21280: StringIO#set_encoding warns when backed by chilled string literal
It seems like most developers are against treating chilled strings differently than unfrozen strings in this case. I can understand that, since that's usually the best course of action.
As an alternative, we could remove the setting ...
jeremyevans0 (Jeremy Evans)
 

Also available in: Atom