Activity
From 08/27/2025 to 09/02/2025
09/02/2025
-
11:21 PM Revision de6df750 (git): test_io_wait.rb: Increase a timeout for a flaky test
- like 68682a5d2b2
https://github.com/ruby/ruby/actions/runs/17417763247/job/49449895757?pr=14433 -
10:57 PM Revision 85fd5d5a (git): ZJIT: Use Copy instead of Clone
-
10:57 PM Revision d51ea6be (git): ZJIT: Remove unnecessary return statements
-
10:57 PM Revision efd2746b (git): ZJIT: Remove unnecessary .into calls
-
10:57 PM Revision 8e8f2ba2 (git): ZJIT: Use copied over map(|x| *x)
-
10:57 PM Revision d0ea036e (git): ZJIT: Use .is_some_and
-
10:57 PM Revision f23d8662 (git): ZJIT: Use is_empty over compare with ""
-
10:55 PM Revision 98a88944 (git): ZJIT: Use inspect_err on Result values (#14431)
-
10:28 PM Revision 61d5fb21 (git): ext/-test-/tracepoint/gc_hook.c: Fix GC safety issue
- TestTracepointObj#test_teardown_with_active_GC_end_hook was failing on
some platforms due to a Proc that is not marked being passed around.
Neither rb_tracepoint_new() nor rb_postponed_job_preregister() promise
to mark their callback `vo... - 09:09 PM Revision 4c0b6815 (git): ZJIT: Remove unneeded test exclusions (#14430)
-
09:05 PM Feature #21557: Ractor.shareable_proc to make sharable Proc objects, safely and flexibly
- A full cfg wouldn't work 100% because of methods `catch` and `throw`, among other things like you mentioned. I think a best-effort static analysis is okay, as long as it's not a huge effort. I'm not sure that we actually need captured va...
-
07:53 PM Revision c1c0b324 (git): test_gc.rb: Attempt to stabilize test_interrupt_in_finalizer
- This fails way too often across many environments. I don't think this
test is healthy.
https://github.com/ruby/ruby/actions/runs/17343611722/job/49240735401
Before we give up on it, let me see if this helps. -
07:46 PM Revision e21988c9 (git): test_settracefunc.rb: Increase a timeout
- https://github.com/ruby/ruby/actions/runs/17413734881/job/49436975287
- 07:20 PM Revision 77a421fb (git): ZJIT: Clear jit entry from iseqs after TracePoint activation (#14407)
- ZJIT: Remove JITed code after TracePoint is enabled
-
06:58 PM Revision e0a7da93 (git): ZJIT: Rename gen_save_pc to gen_prepare_call_with_gc (#14427)
-
06:28 PM Revision bdaff44b (git): ZJIT: Propagate and count CompileError on exits (#14408)
-
05:43 PM Revision f210e813 (git): Update rbs sha to the latest aaa-3.9.x (#14426)
-
05:41 PM Revision c0266272 (git): ZJIT: NewRangeFixnum instruction (#14409)
- * Failing optimization tests for NewRangeFixnum
* NewRangeFixnum general idea
* Use gen_prepare_call_with_gc on gen_new_range_fixnum; add additional hir tests
* Remove unused NewRange rewrite trigger when neither range is Fixnum liter... -
05:38 PM Revision 8e1b5cba (git): test_socket.rb: Permit ProxyError for Windows
- https://github.com/ruby/ruby/actions/runs/17410747983/job/49427074277
-
05:34 PM Revision b1b4984f (git): test_thread_cv.rb: Increase a timeout for a thread test
- https://github.com/ruby/ruby/actions/runs/17410747983/job/49427074277
-
05:07 PM Revision 9158b19b (git): test_transcode.rb: Increase a timeout for Ractor tests
- https://github.com/ruby/ruby/actions/runs/17408924679/job/49420774667
- 05:04 PM Revision a8df3f66 (git): ZJIT: Unskip a Ractor bootstrap test (#14421)
- ZJIT: Unskip Ractor bootstrap test
-
03:50 PM Revision f0cc93c1 (git): ZJIT: Bump default --zjit-call-threshold to 30 (#14410)
-
01:22 PM Revision 636da19e (git): Output parent object info when marking T_NONE
-
01:22 PM Revision 8c73da9e (git): Output T_NONE object info to bug report
- rb_obj_info_dump outputs to stderr, which is not outputted to the bug
report, so this information is lost. -
01:22 PM Revision eec38310 (git): Refactor T_NONE checking in default.c
-
11:34 AM Feature #17398: SyntaxError in endless method
- It is easy for prism to accept this as well: https://github.com/ruby/prism/pull/3632
I checked the above examples and prism seems to interpret them in the same way. -
03:22 AM Feature #17398 (Assigned): SyntaxError in endless method
- Ok, then we need a patch for prism
-
03:13 AM Feature #17398: SyntaxError in endless method
- Sounds reasonable, considering existing grammar.
Matz.
-
09:01 AM Feature #20437: Could the licensing conditions be made less ambiguous?
- Coming back here looking at https://github.com/ruby/rdoc/issues/401#issuecomment-209224627 . I'd still be interested to hear from @Matz and wish the license was clearer.
09/01/2025
-
11:50 PM Bug #21559: Unicode normalization nfd -> nfc -> nfd is not reversible
- @duerst Thank you, I appreciate you taking care of it.
-
04:09 AM Bug #21559: Unicode normalization nfd -> nfc -> nfd is not reversible
- @ima1zumi Not sure this is even allowed, but I'm sure I'm responsible for this behavior, and want to fix it myself, so I change the Assignee to myself.
-
12:50 AM Bug #21559: Unicode normalization nfd -> nfc -> nfd is not reversible
- This looks like a bug. Per Unicode TR15, the identity toNFD(x) == toNFD(toNFC(x)) must be maintained. https://unicode.org/reports/tr15/#Design_Goals
It seems the NFC process is combining characters across U+11930, even though its CCC is... -
06:38 PM Bug #21558: Regexp.union with multiple regexps returns a non-shareable object (should be shareable if possible)
- There is also #8948. I didn't get time to try it, but anyone is welcome to try and find if there are any failures in CI/the test suites and if so how to fix them.
-
01:50 PM Feature #21556: Add true? and false? methods to NilClass, TrueClass, FalseClass, and String
- shan (Shannon Skipper) wrote in #note-4:
> I wonder if the inclusion of the String variant could be considered again even though it has been merged? Is there a domain where `"true"` and `"false"` Strings are used? The Rails variant tryi... -
01:44 PM Feature #21556: Add true? and false? methods to NilClass, TrueClass, FalseClass, and String
- austin (Austin Ziegler) wrote in #note-3:
> Phalado (Raphael Cordeiro) wrote in #note-2:
> ...
Well, the idea is to recognize true/false values, ignoring truthy/falsy values because of JSON.
I also think this is something very 'Ruby' to... -
12:54 AM Feature #21556: Add true? and false? methods to NilClass, TrueClass, FalseClass, and String
- I wonder if the inclusion of the String variant could be considered again even though it has been merged? Is there a domain where `"true"` and `"false"` Strings are used? The Rails variant trying to support env vars makes more sense to m...
-
12:34 PM Bug #21534: ppc64le bootstraptest/test_ractor.rb aborted (core dumped) on configure cppflags=-DRUBY_DEBUG and -O3
- I want to lower my priority for this task, because the issue only can happen on the configuring with cppflags=-DRUBY_DEBUG and -O3. The case is not a typical workflow.
And if I find the root cause of this issue, I need to prepare a mi... -
08:34 AM Revision f9bffff3 (git): remove `Ractor#take`
- [Feature #21262]
-
06:13 AM Feature #20163: Introduce #bit_count method on Integer
- I prefer an exception for popcount to negative values.
I think an array of Fixnums (63 bit signed integers) can be used for mutable bit array.
(Ruby's Integer is immutable. So mutable bit array needs a mutable data structure.)
In... -
03:56 AM Feature #17398 (Open): SyntaxError in endless method
- Thanks, it looks good. @matz what do you think?
-
03:50 AM Feature #17398: SyntaxError in endless method
- > Note that private def hello = puts "Hello" does not parse for technical reason.
It's possible.
Patch is https://github.com/yui-knk/ruby/tree/bug_17398.
This change allows single endless method definition with command body as an ar... -
03:30 AM Bug #18878: parse.y: Foo::Bar {} is inconsistently rejected
- Note: 9930363aab6ac4b8d7034baff85cd86c17953dc9 was the commit to allow `Foo::Bar {}` in parse.y.
-
01:44 AM Bug #18878: parse.y: Foo::Bar {} is inconsistently rejected
- Patch:
* Support only `Foo::Bar {} + 1`: https://github.com/yui-knk/ruby/tree/bug_18878_2
* Support both `Foo::Bar {} + 1` and `Foo::Bar do end` (and `Foo::Bar do end + 1`): https://github.com/yui-knk/ruby/tree/bug_18878
08/31/2025
-
11:17 PM Revision ed0ffcdc (git): Remove unnecessary Enumerable#each_slice
- This method has been a built-in feature since Ruby 1.8.7, so this
fallback implementation is no longer needed.
Ref: https://docs.ruby-lang.org/en/3.4/NEWS/NEWS-1_8_7.html -
09:07 PM Bug #21559: Unicode normalization nfd -> nfc -> nfd is not reversible
- ```ruby
"s\u{11930 323 11930 307}".unicode_normalize(:nfc).dump #=> "\u1E69\u{11930}\u{11930}"
"s\u{323 307}".unicode_normalize(:nfc).dump #=> "\u1E69"
```
Are U+0323 and U+0307 composed to `s` jumping over U+11930? -
12:52 PM Bug #21559 (Closed): Unicode normalization nfd -> nfc -> nfd is not reversible
- I expect `nfd(nfc(str)) == nfd(str)` but found a string that doesn't.
~~~ruby
# Ruby 3.1 - 3.5
str = "s\u{11930}\u{323}\u{11930}\u{307}"
p str.unicode_normalize(:nfd) == str.unicode_normalize(:nfc).unicode_normalize(:nfd)
#=> fals... -
09:31 AM Revision 266393d3 (git): CI: Adjust time frame before the release
-
06:55 AM Bug #21558: Regexp.union with multiple regexps returns a non-shareable object (should be shareable if possible)
- I've found an issue that already talked about it https://bugs.ruby-lang.org/issues/17256.
-
06:42 AM Bug #21558: Regexp.union with multiple regexps returns a non-shareable object (should be shareable if possible)
- > Regexp.union creates a new instance, except for a single Regexp argument case.
Ah, that makes perfect sense now. Thank you for the detailed explanation.
```irb
irb(main):001> a = /a/
=> /a/
irb(main):002> a.__id__
=> 7232
ir... -
04:42 AM Bug #21558: Regexp.union with multiple regexps returns a non-shareable object (should be shareable if possible)
- Another example is `Range`.
All instances of `Range` are automatically frozen so they are Ractor-shareable.
Personally, I think freezing all `Regexp` instances also may be nice, but that's a different story than `Regexp.union`. -
04:25 AM Bug #21558 (Feedback): Regexp.union with multiple regexps returns a non-shareable object (should be shareable if possible)
- `Regexp.union` creates a new instance, except for a single `Regexp` argument case.
And it is impossible to revert a Ractor-shareable object to non-Ractor-shareable.
So it feels natural that the new instance is not Ractor-shareable as w... -
02:54 AM Bug #21558 (Feedback): Regexp.union with multiple regexps returns a non-shareable object (should be shareable if possible)
- Regexp.union returns a non-shareable object when given multiple Regex arguments. Is this expected behavior?
It would be preferable if the resulting Regexp were shareable, since single-argument `Regexp.union` does produce a shareable obj... -
12:00 AM Feature #21556: Add true? and false? methods to NilClass, TrueClass, FalseClass, and String
- Phalado (Raphael Cordeiro) wrote in #note-2:
> nobu (Nobuyoshi Nakada) wrote in #note-1:
> ...
If you're checking a string for the value `"true"`, you're not checking for an exact `true` or `false` value. This is a data conversion appl...
08/30/2025
-
10:58 PM Feature #21556: Add true? and false? methods to NilClass, TrueClass, FalseClass, and String
- nobu (Nobuyoshi Nakada) wrote in #note-1:
> Phalado (Raphael Cordeiro) wrote:
> ...
Data received on requests and JSON conversion. It's not unusual that a Boolean is converted to a String, or users end up filling in as a String instead... -
09:02 PM Misc #21549: DevMeeting-2025-09-11
- * [Feature #21555] Add support for predicate attribute reader names (eregon)
* As noticed by @Dan0042 there are now 7 tickets asking the same feature.
* Would matz be OK to add it? 9 years ago matz said no in https://bugs.ruby-lang... -
10:07 AM Misc #21549: DevMeeting-2025-09-11
- * [Bug #21168] Prism doesn't require argument parentheses (in some cases) when a block is present but parse.y does (earlopain)
* This was previously discussed in a dev meeting https://bugs.ruby-lang.org/issues/21134
* matz said he ... -
08:38 PM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- I wrote my detailed proposal in #21557.
-
08:38 PM Feature #21557 (Closed): Ractor.shareable_proc to make sharable Proc objects, safely and flexibly
- Following #21039 and #21550, this is a complete proposal which does not require reading these previous proposals (since that caused some confusion).
That way, it is hopefully as clear as possible.
It also explains how it solves everyth... -
06:24 PM Bug #21538 (Closed): initialize_dup not called when duping class/module
- Applied in changeset commit:git|5c7dfe85a1dc49334e2828791f0ade42eee662db.
----------
Initialize class dup/clone before calling initialize_dup/initialize_clone
Previously, you could override the class initialize_dup/initialize_clone
met... -
02:13 AM Bug #21538: initialize_dup not called when duping class/module
- I found a simple fix for all issues: https://github.com/ruby/ruby/pull/14412
-
12:16 AM Bug #21538: initialize_dup not called when duping class/module
- The example given isn't a bug. `initialize_dup` is called on the new instance (in this example, the instance of `Class`), and `dup` does not copy singleton classes. If you define `Class#inititialize_dup`, it works as expected:
```ruby... -
06:24 PM Revision 5c7dfe85 (git): Initialize class dup/clone before calling initialize_dup/initialize_clone
- Previously, you could override the class initialize_dup/initialize_clone
method and the class hierarchy would not be set correctly inside the
method before calling super.
This removes Module#initialize_copy, and instead makes Object#dup... -
01:41 PM Revision dd4e7801 (git): Add NODE SCLASS locations
- Add locations to struct `RNode_SCLASS`.
memo:
```
@ ProgramNode (location: (1,0)-(1,18))
+-- locals: []
+-- statements:
@ StatementsNode (location: (1,0)-(1,18))
+-- body: (length: 1)
+-- @ SingletonClassNode (location:... -
12:17 PM Revision 395bda2f (git): object.c: make rb_obj_class_must static inline
-
12:14 PM Revision d89e7347 (git): object.c: refactor rb_obj_class and rb_class_real
-
12:14 PM Revision f5da6395 (git): Kernel#class skip null check
- `Kernel#class` can't possibly be called on an hidden object,
hence we don't need to check for `klass == 0`.
```
compare-ruby: ruby 3.5.0dev (2025-08-30T01:45:42Z obj-class 01a57bd6cd) +YJIT +PRISM [arm64-darwin24]
built-ruby: ruby 3.5.0... -
12:14 PM Revision 01b89528 (git): object.c: improve fake_class_p to also handle T_MODULE
- This requires ensuring T_MODULE never has FL_SINGLETON set,
so RMODULE_IS_REFINEMENT had to be moved. -
12:14 PM Revision fd0c772d (git): Micro-optimize Object#class
- Since `BUILTIN_TYPE` and `RCLASS_SINGLETON_P` are both stored in
`RBasic.flags`, we can combine these two checks in a single bitmask.
This rely on `T_ICLASS` and `T_CLASS` not overlapping, and assume
`klass` is always either of these ty... -
09:56 AM Bug #21168: Prism doesn't require argument parentheses (in some cases) when a block is present but parse.y does
I found out that this was discussed in a developer meeting: https://github.com/ruby/dev-meeting-log/blob/c35441297cd397fa3626ca0aa38efd7c61e430b2/2025/DevMeeting-2025-03-13.md?plain=1#L323
matz said:
> matz: I'll reply it. I like...-
01:45 AM Revision 01a57bd6 (git): CI: Warn longstanding development revision of bundled gems
-
01:17 AM Revision d94e0a7b (git): CI: bundled_gems.yml: Split commit and push
-
12:54 AM Bug #21342: Segfault: invalid keeping_mutexes when using Mutex in Thread then Fiber after GC
- Just for the sake of cross-referencing related issues: https://bugs.ruby-lang.org/issues/18818
08/29/2025
-
10:57 PM Feature #21555: Add support for predicate attribute reader names
- Dan0042 (Daniel DeLorme) wrote in #note-2:
> Also related to #5781 #11167 #12046 #15991 #19708
> ...
Wow! There's already an open ticket for this exact issue even. I apologize for not properly searching before filing. I should have jus... -
07:16 AM Feature #21555: Add support for predicate attribute reader names
- > This feature is only supported for attr_reader and attr, not attr_writer or attr_accessor, since setter methods cannot have question marks.
Using the same logic, `attr_accessor :enabled?` could generate `#enabled?` and `#enabled=` w... -
04:07 AM Feature #21555: Add support for predicate attribute reader names
- Also related to #5781 #11167 #12046 #15991 #19708
Popular eh? -
10:50 PM Feature #21556 (Feedback): Add true? and false? methods to NilClass, TrueClass, FalseClass, and String
- Phalado (Raphael Cordeiro) wrote:
> Sometimes we need to check for an exact `true` or `false` value. This can be a string or a boolean value.
For what situation, and why mixing strings and `true`/`false`?
It sounds like depending on... -
05:28 PM Feature #21556 (Feedback): Add true? and false? methods to NilClass, TrueClass, FalseClass, and String
- Sometimes we need to check for an exact `true` or `false` value. This can be a string or a boolean value.
Usually, what I do to solve this is something like `value.to_s == true`, this way covering for strings, booleans, and nil values... -
10:40 PM Feature #20163: Introduce #bit_count method on Integer
- tenderlovemaking (Aaron Patterson) wrote in #note-16:
> When would you use a negative number unless it's a mistake in your code?
I don't have a strong argument. Raising an exception sounds good to me.
-
09:54 PM Feature #20163: Introduce #bit_count method on Integer
- It seems like the Python folks didn't have too serious a discussion about handling negative numbers.
https://github.com/python/cpython/issues/74068#issuecomment-1093743975
https://github.com/python/cpython/issues/74068#issuecomment-1... -
09:37 PM Feature #20163: Introduce #bit_count method on Integer
- garrison (Garrison Jensen) wrote in #note-15:
> [Python ignores the sign](https://docs.python.org/3/library/stdtypes.html#int.bit_count). It seems friendlier to match that behavior than throw an exception.
> ...
When would you use a ne... -
07:00 PM Feature #20163: Introduce #bit_count method on Integer
- [Python ignores the sign](https://docs.python.org/3/library/stdtypes.html#int.bit_count). It seems friendlier to match that behavior than throw an exception.
``` ruby
(-x).popcount == x.popcount
```
-
05:43 PM Feature #20163: Introduce #bit_count method on Integer
- mame (Yusuke Endoh) wrote in #note-10:
> What are the intended use cases for this proposal?
> ...
My experience is similar. I've used it for sets (like I linked above) as well as modeling [undirected graphs](https://tenderlovemaking.c... -
01:42 PM Feature #20163: Introduce #bit_count method on Integer
- > but since many other languages, even Python, provide support for popcount, why not?
Usually a higher bar than that is required for a new method to be added to Ruby.
I personally don't have an immediate use case to point to (exc... -
01:12 PM Feature #20163: Introduce #bit_count method on Integer
- x64 and ARM have specialized CPU instructions
https://godbolt.org/z/xvGvzsvd9
and Ruby already uses it internally, for instance
https://github.com/ruby/ruby/blob/dc555a48e750b4d50eb7a7000ca1bfb927fa9459/string.c#L2209
That said, ... -
12:46 PM Feature #20163: Introduce #bit_count method on Integer
- I also think popcount of a negative number should raise error because of the ambiguity.
One way to extend popcount to negative number is using a relationship below, derived from the fact that `-5 == 0b111...11111011` has 1 fewer bits co... -
10:15 AM Feature #20163: Introduce #bit_count method on Integer
- What are the intended use cases for this proposal?
My experience (in other languages) involves two use cases of popcount:
* Bitboards for game AI (like Reversi) to count pieces.
* Succinct data structures (like LOUDS Tries) for ra... -
07:09 AM Feature #20163: Introduce #bit_count method on Integer
- > What is the behavior for negative values?
IMO, the only behavior that makes sense in the context of a language with arbitrary size integers is to ignore the sign bit.
-
12:56 AM Feature #20163: Introduce #bit_count method on Integer
- What is the behavior for negative values?
The proposal describes two implenentations that returns different values.
```
p (-5).to_s(2).count("1") #=> 2
def bit_count(n)
count = 0
while n > 0
n &= n - 1 # Flip the lea... -
10:34 PM Revision 96c89385 (git): Shrink ruby_bug version guard in anticipation of 3.4.6 release
- Fix for this bug was merged into ruby_3_4 in 5a42d267bfabc86f86cae2e83de24b1b86bc316a
and should go out in the next 3.4.x release. -
10:05 PM Revision d4d510da (git): Document Makefile rules in tool/enc-unicode.rb [ci skip]
-
08:43 PM Bug #21540: prism allows `foo && return bar` when parse.y doesn't
- I got a PR https://github.com/ruby/prism/pull/3630 that aims to fix this.
- 07:55 PM Revision 3f3a54ef (git): Add rb_jit_vm_unlock and share it in ZJIT and YJIT
- 07:55 PM Revision 56105049 (git): Add rb_jit_vm_lock_then_barrier and share it in ZJIT and YJIT
- 07:55 PM Revision 2f6a9c51 (git): Add rb_jit_multi_ractor_p and share it in ZJIT and YJIT
-
07:40 PM Revision cc07159f (git): [DOC] rb_str_resurrect(): Reword to remove wrong guess; used by zlib
- 06:43 PM Revision 39f3cab8 (git): YJIT: Stop sharing rb_vm_send among different instructions (#14393)
- 05:42 PM Revision 99bf47ab (git): ZJIT: Report stats for unhandled call types
- 05:42 PM Revision 710c5c8e (git): ZJIT: Increment dynamic_send_count for Send too
-
04:58 PM Revision dba0f725 (git): Extend timeout-minutes for macOS --repeat-count=2
- https://github.com/ruby/ruby/actions/runs/17308244022/job/49136485007
I'm not sure if it's stuck forever at the end or happens to take that
much time around the end of it, but let me just try this first.
If it doesn't work, something's... -
04:46 PM Revision b6f4b539 (git): ZJIT: Specialize monomorphic GetIvar (#14388)
- Specialize monomorphic `GetIvar` into:
* `GuardType(HeapObject)`
* `GuardShape`
* `LoadIvarEmbedded` or `LoadIvarExtended`
This requires profiling self for `getinstancevariable` (it's not on the operand
stack).
This also optimizes `Ge... - 04:40 PM Revision fc4f8c87 (git): YJIT: Drop yjit-bench CI job (#14394)
-
04:32 PM Revision 7f4a6afa (git): ZJIT: Remove special case for defined?(method call) (#14401)
- This was fixed in https://github.com/ruby/ruby/pull/14308
Thanks, Stan, for noticing.
Fixes https://github.com/Shopify/ruby/issues/703 - 02:22 PM Revision df133442 (git): ZJIT: Repurpose ExitCounters for unhandled YARV insns (#14392)
-
07:25 AM Revision dc555a48 (git): Remove no longer used file [ci skip]
- 07:03 AM Revision 001299d3 (git): Update bundled gems list as of 2025-08-29
-
02:35 AM Revision 1f2a102f (git): `Module#attr` family accepts strings as well as symbols
-
01:20 AM Revision 1b6a5479 (git): Backport GH-13617 for s390x (#13757)
-
12:33 AM Revision 85eb33d9 (git): Relax thresholds for array, object, and string compaction verification
- These tests failed with RHEL10
https://rubyci.s3.amazonaws.com/rhel10/ruby-master/log/20250828T093003Z.fail.html.gz
08/28/2025
-
10:56 PM Feature #21555 (Rejected): Add support for predicate attribute reader names
- After manually aliasing predicate methods many times, I wanted to propose letting `attr_reader` take predicate method names that correspond to instance variables of the base name without a trailing question mark. https://github.com/ruby/...
-
10:46 PM Revision 51cd8776 (git): ZJIT: Add missing rb_zjit_cme_invalidate
-
10:46 PM Revision 3cc66977 (git): ZJIT: Compile Insn::Send
-
10:02 PM Revision 4992d2c2 (git): YJIT: rb_ivar_get_at skip ractor checks
- Using `assume_single_ractor_mode` we can skip all ractor safety
checks if we're in single ractor mode.
```
compare-ruby: ruby 3.5.0dev (2025-08-27T14:58:58Z merge-vm-setivar-d.. 5b749d8e53) +YJIT +PRISM [arm64-darwin24]
built-ruby: ruby... -
10:02 PM Revision 3646596e (git): YJIT: rb_ivar_get_at assume leaf-call when single ractor
- The only exception it could raise is if we're in multi ractor mode.
-
10:02 PM Revision b6d4882c (git): YJIT: getinstancevariable cache indexes for types other than T_OBJECT
- While accessing the ivars of other types is too complicated to
realistically generate the ASM for it, we can at least provide
the ivar index as to not have to lookup the shape tree every
time.
```
compare-ruby: ruby 3.5.0dev (2025-08-27... -
09:21 PM Revision b1dbcd3c (git): YJIT simplify gen_get_iver and gen_set_ivar
- The `shape_id` now includes 3 bits for the `heap_id`.
It is always non-zero for `T_OBJECT` and always zero for all
other types.
Hence all these allocator checks are no longer necessary. - 08:45 PM Revision bf3d6a17 (git): ZJIT: Add code_region_bytes stat (#14389)
- * ZJIT: Add code_region_bytes stat
* Share more logic among --zjit and --zjit-stats -
07:42 PM Feature #20163: Introduce #bit_count method on Integer
- I would also like a `popcount` method. I prefer `popcount` over `bit_count`. I wrote my own [here](https://github.com/tenderlove/bitz/blob/93cedfe8f571e106ced753b3060c92507845e178/lib/bitz/set.rb#L332-L337) (but it only deals with singl...
-
07:07 PM Bug #19288: Ractor JSON parsing significantly slower than linear parsing
- The situation with ractors has improved a lot since the last update to this thread. I encourage you to try out ruby master if you can.
```
Running benchmark "json_parse_float" (1/2)
+ /Users/luke/.rubies/master-release/bin/ruby -I h... -
06:14 PM Revision 041450ad (git): rb_ivar_delete: also re-embed T_IMEMO/fields
- Right now JITs don't generate any code to access ivar on types
other than T_OBJECT, but they might soon, so we must ensure
two IMEMO/fields can't have the same `shape_id` but diffent
embed/heap status. - 05:50 PM Revision fa3c23eb (git): ZJIT: Prepare getglobal for non-leaf call (#14387)
- Depending on the user's warning level, getting certain global variables
may lead to calling `Warning#warn`, which can be redefined by the user.
This fixes another `bootstraptest/test_yjit.rb` failure. -
05:35 PM Revision b47ea34a (git): ZJIT: Fix a flipped stat
- I'm sorry.
Another follow-up on https://github.com/ruby/ruby/pull/14378 -
05:31 PM Revision c2d99d06 (git): ZJIT: Fix a typo
- follow-up on https://github.com/ruby/ruby/pull/14378
- 05:20 PM Revision 7d670ead (git): ZJIT: Disable profiling in compile_iseq (#14385)
- This catches both the interpreter-JIT and JIT-JIT cases.
Fixes https://github.com/Shopify/ruby/issues/719 - 05:14 PM Revision 85217252 (git): ZJIT: Generate code for ArrayExtend
- 05:14 PM Revision 07e28ba4 (git): ZJIT: Generate code for DefinedIvar
- 05:14 PM Revision b108f117 (git): ZJIT: Generate code for ToArray, ToNewArray
- 05:14 PM Revision ec55b5b9 (git): ZJIT: Generate code for ArrayPush
- 05:14 PM Revision ca0ef794 (git): ZJIT: Generate code for HashDup
- 04:40 PM Revision 11f115b0 (git): ZJIT: Track if object is a T_OBJECT
- We will (for now) only cache ivar reads from T_OBJECTs.
- 04:40 PM Revision b95700f1 (git): ZJIT: Track object embedded bit
- This lets us know where to look for an ivar: in the object or indirect
elsewhere in the heap. -
04:31 PM Revision 737ffd33 (git): ZJIT: Add Ractor mode PatchPoint for ivar get/set (#14375)
- * ZJIT: Add Ractor mode PatchPoint for ivar get/set
* ZJIT: Only add single ractor patchpoint to class/module receivers
* ZJIT: Improve Ractor mode patch point comments
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
--------... - 03:58 PM Revision c4c93a07 (git): ZJIT: Refactor stats implementations (#14378)
- * ZJIT: Refactor stats implementations
* s/num_send_dynamic/dynamic_send_count/ -
02:34 PM Feature #21515: Add `&return` as sugar for `x=my_calculation; return x if x`
- vo.x (Vit Ondruch) wrote in #note-1:
> Proposal like this always reminds me:
> ...
How does `my_var&.something` read? The safe navigator is not exactly simple english - you need to know what it does. Comedically, though, it does conjur... -
02:29 PM Feature #21515: Add `&return` as sugar for `x=my_calculation; return x if x`
- nobu (Nobuyoshi Nakada) wrote in #note-3:
> Why not:
> ...
I have not seen it done this way. I will say that I started to say this did not work until I fully processed the `and` in this, so I am not sure on the legibility, but I think it... -
02:27 PM Feature #21515: Add `&return` as sugar for `x=my_calculation; return x if x`
- Earlopain (Earlopain _) wrote in #note-2:
> I would prefer it like this:
> ...
I agree that this syntax would be solid if it worked. - 01:55 PM Revision 4fc0db73 (git): CI: ubuntu-ibm.yml: Add GitHub Actions ppc64le case
- Note that the default configure option `./configure cppflags=-DRUBY_DEBUG` with
the default optimization level `-O3`, causes the following Ractor test and other
tests failing. So, we don't set the option in ppc64le case.
```
$ make btes... - 01:55 PM Revision dd09d898 (git): CI: ubuntu-ibm.yml: Refactor
- * Remove logic that was used for the ubuntu.yml, but not used for
ubuntu-ibm.yml.
* Add a dummy Ubuntu x86_64 case to make this CI pass on fork repositories.
This case only runs on fork repositories. - 01:55 PM Revision 8eb1ed56 (git): Revert "CI: Drop Ubuntu s390x temporarily."
- This reverts commit c3c74e0d31c0c7327d2eb2c79b253d6500c6f2c0.
-
01:21 PM Revision 05fc0118 (git): rb_ivar_delete: allow complex transition
- `rb_ivar_delete` would force a new shape to be created.
And in the case of a shape exhaustion, it wouldn't handle
T_CLASS/T_MODULE correctly. - 01:20 PM Revision d19a1eee (git): ZJIT: Enable no-fail-fast on zjit-test
- 01:20 PM Revision 89e18473 (git): ZJIT: Update doc about snapshot update
- 01:20 PM Revision 6b7ed4ca (git): ZJIT: Add zjit-test-update for updating insta snapshot
-
01:05 PM Revision 2edfc51a (git): Make Thread::Queue and SizedQueue support compaction
-
10:01 AM Revision 6023195f (git): Abandon `ruby` target on the others than GNU make
- The default non-transformed name, `ruby` target was added for the case
of `--program-transform-name` and similars, but it was occasionally
added even when no such option is used. -
09:02 AM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- Yes, that's the idea.
Yes it's feasible via static analysis (e.g. in `compile.c`).
It would be somewhat conservative but I think that's good enough, I'll give more details in my proposal.
I think a possible simple way is to use "if a cap... -
08:20 AM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- > I think there is a misunderstanding there: Option 4 does not prohibit writing to captured variables, it never proposed that. Ruby code can write to all local variables, always.
Ok I misunderstood.
```ruby
def sh(bl)
Ractor.... -
08:14 AM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- ko1 (Koichi Sasada) wrote in #note-15:
> So I will merge option 1 soon.
> ...
Please wait, I believe you and matz did not understand my proposal.
I will make a clear proposal ASAP. -
08:07 AM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- ko1 (Koichi Sasada) wrote in #note-14:
> @Eregon let's me clarify your proposal.
> ...
I think there is a misunderstanding there: Option 4 does *not* prohibit writing to captured variables, it never proposed that. Ruby code can write to ... -
04:18 AM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- I confirmed with Matz that
* option 2 is too complex and therefore rejected.
* option 3 is also rejected because `|;n|` represents shadowing, not capturing.
* option 1 is preferable: not the best, but the better one among these.
(I met ... -
02:08 AM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- @Eregon let's me clarify your proposal.
* Option 4 is your proposal on https://bugs.ruby-lang.org/issues/21039#note-21, which prohibit any writing to the captured outer variables from inside/outside of the block
* This proposal is cle... -
08:18 AM Feature #21539: Facilitate walking native and interpreter (and jit?) stacks from outside of the ruby process
- +1 this would be really cool as well for the [Datadog profiler](https://github.com/datadog/dd-trace-rb) as we currently rely on access to internal headers and thus are together with rbspy/rbperf on the group of "needs to be updated whene...
-
07:25 AM Revision e7fb87ee (git): Populate ivar caches for types other than T_OBJECT
- `vm_setinstancevariable` had a codepath to try to match the inline
cache for types other than T_OBJECT, but the cache population path
in `vm_setivar_slowpath` was exclusive to T_OBJECT, so `vm_setivar_default`
would never match anything.... -
06:35 AM Revision b85b2b84 (git): [ruby/error_highlight] Remove a branch for Ruby 3.1
- https://github.com/ruby/error_highlight/commit/d3063cde62
-
06:35 AM Revision 2e27f6e1 (git): [ruby/error_highlight] Drop Ruby 3.1 support
- ... as it is already EOL
https://github.com/ruby/error_highlight/commit/f15489216a -
06:27 AM Feature #21543: Point ArgumentError to the call site
- Merged at commit:85e0c98cf0537c2049bfbbc2e21228264db90e00.
-
06:26 AM Feature #21543 (Closed): Point ArgumentError to the call site
- Applied in changeset commit:git|ed8fe53e80e16f9bff592333a3082981f39216e1.
----------
Allow to get a NODE_SCOPE node of dummy stack frame of ArgumentError
Previously, it was not possible to obtain a node of the callee's
`Thread::Backtra... -
04:03 AM Feature #21543 (Assigned): Point ArgumentError to the call site
- Thank you everyone. I also talked with @matz, and he said "give it a try."
I have prepared https://github.com/ruby/error_highlight/pull/61 . Matz was reluctant to change the backtrace itself, so I implemented it without modifying the ... -
03:44 AM Feature #21543 (Closed): Point ArgumentError to the call site
- Applied in changeset commit:git|2ccb2de677849732181224cb9fd1a831dbaac4c0.
----------
Make `RubyVM::AST.of` return a parent node of NODE_SCOPE
This change makes `RubyVM::AST.of` and `.node_id_for_backtrace_location`
return a parent node... -
06:26 AM Revision 85e0c98c (git): [ruby/error_highlight] Show a dedicated snippet for "wrong number of arguments" error
- This is an experimental implementation for
https://bugs.ruby-lang.org/issues/21543.
```
test.rb:2:in 'Object#foo': wrong number of arguments (given 1, expected 2) (ArgumentError)
caller: test.rb:6
| foo(1)
^^^
cal... -
03:44 AM Revision ed8fe53e (git): Allow to get a NODE_SCOPE node of dummy stack frame of ArgumentError
- Previously, it was not possible to obtain a node of the callee's
`Thread::Backtrace::Location` for cases like "wrong number of
arguments" by using `RubyVM::AST.of`. This change allows that retrieval.
This is preparation for [Feature #21... -
03:44 AM Revision 2ccb2de6 (git): Make `RubyVM::AST.of` return a parent node of NODE_SCOPE
- This change makes `RubyVM::AST.of` and `.node_id_for_backtrace_location`
return a parent node of NODE_SCOPE (such as NODE_DEFN) instead of the
NODE_SCOPE node itself.
(In future, we may remove NODE_SCOPE, which is a bit hacky AST node.)
... -
02:29 AM Misc #21549: DevMeeting-2025-09-11
- * [Bug #18878] parse.y: Foo::Bar {} is inconsistently rejected (yui-knk)
* Do we also support `Foo::Bar do end` (and `Foo::Bar do end + 1`)?
* [Feature #17398] SyntaxError in endless method
* Patch for `private def hello = puts "Hell... -
12:37 AM Bug #21548: SEGV: gc/default/default.c with rbs tests
- Thanks @peterzhu2118. I didn't see same failure after commit:e3e87258ddadf763d9b0b11678935250f9bcc6c3
-
12:34 AM Revision 38297e47 (git): CI: windows: Skip rebuilding vcpkg packages when cache restored
-
12:34 AM Revision 958bdafd (git): CI: windows: Use possibly faster device for TMP/TEMP
-
12:34 AM Revision ffc17447 (git): Save vcpkg cache with master and stable branches
08/27/2025
-
11:02 PM Revision 47102845 (git): ZJIT: Pessimize locals in the presence of send (with block) (#14374)
- We can refine this later by some kind of analysis of the block we're
sending to: maybe it doesn't write to our locals, or at least doesn't
write to all of them. - 10:56 PM Revision 984e05a1 (git): ZJIT: Count dynamic dispatch (SendWithoutBlock)
- 10:56 PM Revision fb3d2a2a (git): ZJIT: Increment specific counter on side-exit
-
10:29 PM Bug #21503: \p{Word} does not match on \p{Join_Control} while docs say it does
- Backport for 3.4 done in commit:5a42d267bfabc86f86cae2e83de24b1b86bc316a
-
10:26 PM Bug #21535: `NoMethodError` becomes `NameError`when using `...` delegation and method call indirection
- Backport for 3.4 done in commit:0d367ce65fe4e85f207a8ca5f1f331dd90c6992e
-
06:14 PM Bug #21535 (Closed): `NoMethodError` becomes `NameError`when using `...` delegation and method call indirection - Applied in changeset commit:git|886268856ba7c70a6eaf25eeb402e6ebed9e851e.
----------
Fix bad NameError raised using sendforward instruction through vcall
If you called a VCALL method and the method takes forwarding arguments
and then y... - 10:19 PM Revision 0d367ce6 (git): Fix bad NameError raised using sendforward instruction through vcall
- If you called a VCALL method and the method takes forwarding arguments
and then you forward those arguments along using the sendforward
instruction, the method_missing class was wrongly chosen as NameError
instead of NoMethodError. This ... -
10:17 PM Revision 5a42d267 (git): Make word prop match join_control to conform to UTS 18
- See <https://bugs.ruby-lang.org/issues/19417#note-3>.
https://unicode.org/reports/tr18/#word states word should match join_control chars.
It did not previously:
```ruby
[*0x0..0xD799, *0xE000..0x10FFFF].map { |n| n.chr 'utf-8' } => al... -
09:52 PM Bug #21546: `prefix` in ruby.pc is wrong when `--enable-load-relative`
- 3.4 backport done in commit:d49c7d0661faa964099b8c28ac316e33ae641051
-
09:51 PM Bug #21402: ruby2_keywords affects methods/procs with post arguments
- 3.4 backport done in commit:fd036dbc3f39e6bdce735edf9ca187a690fe2079
-
09:29 PM Revision fd036dbc (git): Do not respect ruby2_keywords on method/proc with post arguments
- Previously, ruby2_keywords could be used on a method or proc with
post arguments, but I don't think the behavior is desired:
```ruby
def a(*c, **kw) [c, kw] end
def b(*a, b) a(*a, b) end
ruby2_keywords(:b)
b({foo: 1}, bar: 1)
```
This... -
09:19 PM Feature #21039: Ractor.make_shareable breaks block semantics (seeing updated captured variables) of existing blocks
- Rereading this, I think I misread/misunderstood some parts:
matz (Yukihiro Matsumoto) wrote in #note-28:
> We discussed at the developers' meeting, and had the conclusion that the original issue cannot be addressed if we use make_sha... -
09:13 PM Revision d49c7d06 (git): [Backport #21546] Make the generated pc file relocatable
-
09:05 PM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- Regarding `define_method`, it's as-if it would try `Ractor.shareable_proc` with option 4 semantics automatically on the block/Proc, and if that succeeds use that, if it fails then make the method not callable from a Ractor and use block/...
-
08:52 PM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- Option 3 doesn't seem good because it would break the block if the block is run on Ruby 3.4 and before, as the value of `a` would be `nil`.
One would need to have 2 copies of the block which is clearly inconvenient.
I think Ractor shoul... -
08:06 PM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- ko1 (Koichi Sasada) wrote in #note-9:
> Option 2 (allow accesses only on lexical blocks) is rejected by Matz, so I want to introduce 1 or 3.
Where did matz say that? In https://bugs.ruby-lang.org/issues/21550#note-5 he said:
> ...
`I'd ... -
07:19 PM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- ko1 (Koichi Sasada) wrote in #note-9:
> I made a patch to disallow accessing to any outer variables and I found that I can't write ostruct case:
> ...
I think 3 is a good idea, but I think we could introduce it in later versions of Rub... -
06:15 PM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- I made a patch to disallow accessing to any outer variables and I found that I can't write ostruct case:
```ruby
# ostruct-0.6.3/lib/ostruct.rb
def new_ostruct_member!(name) # :nodoc:
unless @table.key?(name) || is_method_protect... -
08:46 AM Feature #21550: Ractor.shareable_proc/shareable_lambda to make sharable Proc object
- Eregon (Benoit Daloze) wrote in #note-6:
> I wonder if the ability to capture outer local variables for shareable procs is even needed at all.
> ...
I have two examples.
One is `define_method`.
```ruby
def define_foo suffix, ivar_name ... -
07:03 PM Revision 4652879f (git): ZJIT: Specialize some Sends (#14363)
- * ZJIT: Profile and specialize Array#empty?
* ZJIT: Specialize BasicObject#==
* ZJIT: Specialize Hash#empty?
* ZJIT: Specialize BasicObject#!
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com> - 06:14 PM Revision 88626885 (git): Fix bad NameError raised using sendforward instruction through vcall
- If you called a VCALL method and the method takes forwarding arguments
and then you forward those arguments along using the sendforward instruction,
the method_missing class was wrongly chosen as NameError instead of NoMethodError.
This ... - 05:01 PM Revision 76810fc3 (git): ZJIT: Implement side exit stats (#14357)
-
04:07 PM Revision b97a159d (git): Bump PRISM version number to avoid collision with RubyGems version
-
04:07 PM Revision 1f421d09 (git): When reading from stdin, put a wrapper around the IO object
- The purpose of this commit is to fix Bug #21188. We need to detect when
stdin has run in to an EOF case. Unfortunately we can't _call_ the eof
function on IO because it will block.
Here is a short script to demonstrate the issue:
```... -
02:38 PM Bug #18878: parse.y: Foo::Bar {} is inconsistently rejected
- Do we also support `Foo::Bar do end` (and `Foo::Bar do end + 1`)?
With `ruby 3.5.0dev (2025-08-27T03:02:56Z master 5ff7b2c582)` both parse.y and prism have same behavior for do block cases like below.
```ruby
bar do end # met... -
02:34 PM Revision 61d26c35 (git): Don't pin method hooks of bmethods
-
02:34 PM Revision 6c0315d9 (git): Rename rb_hook_list_mark_and_update to rb_hook_list_mark_and_move
- 01:48 PM Revision 47d4ccee (git): CI: Use `nproc` to count only on-line CPUs for GNUMAKEFLAGS
- Use `nproc` rather than `nproc --all`. Because the number by the `nproc` is
different from the number by the `nproc --all` on GitHub Actions ppc64le/s390x.
This caused the `make` command runs much more jobs than the number of on-line
CPU... -
01:26 PM Revision 8935cf98 (git): Fix malloc_gc_disabled in Ractor lock
- We should disable GC for malloc for the current Ractor instead of the locked
Ractor because it's the current Ractor that could run code that mallocs. -
01:25 PM Revision d2ef901f (git): [DOC] Tweaks for String#length
- 01:14 PM Revision c3c74e0d (git): CI: Drop Ubuntu s390x temporarily.
- We are seeing the not-starting s390x jobs.
Until the following issue is fixed, we drop the s390x case.
https://github.com/IBM/actionspz/issues/34 -
11:10 AM Revision f7be2816 (git): [DOC] Clarify the conversion by `File.path`
-
11:10 AM Revision 08af07b2 (git): Add more `File.path` tests
-
10:41 AM Revision 5257e129 (git): Replace ROBJECT_EMBED by ROBJECT_HEAP
- The embed layout is way more common than the heap one,
especially since WVA.
I think it makes for more readable code to inverse the
flag. -
03:22 AM Feature #21553: Remove opt_aref_with and opt_aset_with instructions
- > I didn't introduce these instructions
ref: [Bug #9382], commit:58f800a278b8b70463f4afdbb23a918d8ab441ff -
03:02 AM Revision 5ff7b2c5 (git): [DOC] Add Ractor to NEWS
-
01:01 AM Revision d9e9a667 (git): JSON.generate: warn or raise on duplicated key
- Because both strings and symbols keys are serialized the same,
it always has been possible to generate documents with duplicated
keys:
```ruby
>> puts JSON.generate({ foo: 1, "foo" => 2 })
{"foo":1,"foo":2}
```
This is pretty much alwa... -
01:01 AM Revision 0e0f0dfd (git): Fix `JSON::Coder` to cast non-string keys.
-
01:01 AM Revision c3a80ca5 (git): Fix `JSON.generate` `strict: true` mode to also restrict hash keys
-
01:01 AM Revision d325e3ed (git): [ruby/json] Improve generation options documentation
- https://github.com/ruby/json/commit/3187c88c06
-
01:01 AM Revision a062b9a5 (git): [ruby/json] Remove reference to fast_generate
- https://github.com/ruby/json/commit/19bcfdd8d8
-
01:01 AM Revision 97b5df11 (git): [ruby/json] Optimize `fbuffer_append_str_repeat`
- Helps with pretty printting performance:
```
== Encoding activitypub.json (52595 bytes)
ruby 3.4.2 (2025-02-15 revision https://github.com/ruby/json/commit/d2930f8e7a) +YJIT +PRISM [arm64-darwin24]
Warming up ---------------------------... -
01:01 AM Revision f6823936 (git): [ruby/json] parser.c: Remove useless dereference
- https://github.com/ruby/json/commit/2d63648c0a
-
01:01 AM Revision 4d6b1241 (git): [ruby/json] Extract `fbuffer_append_str_repeat` function
- https://github.com/ruby/json/commit/12656777dc
-
01:01 AM Revision 66815a4c (git): [ruby/json] Silence ractor experimental warnings
- https://github.com/ruby/json/commit/e77f610b21
-
01:01 AM Revision 92bd1d9b (git): [ruby/json] Remove too big Float from fixture to avoid warning
- https://github.com/ruby/json/commit/e881e55e83
-
01:01 AM Revision 312235a4 (git): [ruby/json] Test behavior of parsing a too big Float
- https://github.com/ruby/json/commit/8510ea5c1a