Project

General

Profile

Activity

From 04/08/2026 to 04/14/2026

Today

02:25 AM Revision e31f62af (git): Bump the github-actions group across 2 directories with 4 updates
Bumps the github-actions group with 4 updates in the / directory: [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action), [actions-rust-lang/setup-rust-toolchain](https://github.com/actions-rust-lang/setup-rust-toolchain... dependabot[bot]
01:23 AM Revision d05f799e (git): Bump rand from 0.10.0 to 0.10.1 in /zjit
Bumps [rand](https://github.com/rust-random/rand) from 0.10.0 to 0.10.1.
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://gith...
dependabot[bot]
01:22 AM Revision 08792f83 (git): Bump rand from 0.10.0 to 0.10.1 in the cargo group across 1 directory
Bumps the cargo group with 1 update in the / directory: [rand](https://github.com/rust-random/rand).
Updates `rand` from 0.10.0 to 0.10.1
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/...
dependabot[bot]

04/13/2026

11:49 PM Revision ee90e8e3 (git): Concurrent set fix when encountering garbage obj in find_or_insert
When CASing the garbage key to EMPTY, if we succeed we should decrease
set->size because we're trying to re-insert into the same slot right after.
The insertion increases set->size if it succeeds. This issue can lead to
set->size being o...
Luke Gruber
11:03 PM Bug #21997 (Closed): segfault in basicobject
jhawthorn (John Hawthorn)
06:38 PM Bug #21997: segfault in basicobject
sorry, i think this is a duplicate #21992 danielchong (Daniel Chong)
06:37 PM Bug #21997 (Closed): segfault in basicobject
./ruby script.rb
```
[0, 1, -1, 10000000000000000000000, -10000000000000000000000].each do |val|
begin
class BasicObject
def initialize(v); @v = v; end
def to_s; @v.to_s; end
end
obj = BasicObject.new(...
danielchong (Daniel Chong)
04:52 PM Bug #21996 (Open): Crash when modifying instance variables during inspect or Marshal dump
In #15968 describes an issue where instance variables being modified lead to incorrect Marshal output being generated, which was partially solved by checking for the number of IVs changing and raising an exception. However, if enough IVs... jhawthorn (John Hawthorn)
04:39 PM Feature #20205: Enable `frozen_string_literal` by default
I wonder if having something like [freezolite](https://github.com/ruby-next/freezolite) but doing the opposite (disable frozen string literals for specific folders) could help to increase the adoption of the “freeze all literals” mode (`... palkan (Vladimir Dementyev)
03:46 PM Revision ab324956 (git): Avoid array resize in rb_obj_instance_variables
We know (an estimate of) the ivar count upfront (+/- hidden internal
fields), from the shape, so we should reserve the expected length
upfront.
jhawthorn (John Hawthorn)
03:46 PM Revision 3a90afd1 (git): Avoid atomic exchange in rb_free_tmp_buffer
Usually RB_ALLOCV_N uses alloca for small allocations, and in that case
the value is 0, and we should not need to atomic exchange it back to 0.
I'm actually not sure why we need atomic operations here anyways.
jhawthorn (John Hawthorn)
03:43 PM Bug #21994: If there is a local variable `foo`, calls to a method `foo` with a regexp literal as first argument is always a SyntaxError without parentheses
I know very little about parser, so perhaps what I'm about to suggest is entirely impossible, but could we refine that warning as to only trigger it if the other interpretation would be valid syntax?
e.g.:
- `p -1`
- Both `p(-1)...
byroot (Jean Boussier)
03:00 PM Bug #21994: If there is a local variable `foo`, calls to a method `foo` with a regexp literal as first argument is always a SyntaxError without parentheses
I should say that I think the *worst* solution to this would be to warn in both cases. It would effectively require us to rewrite our DSL across every rule for every language we support. My ideal world is one where we could go back to us... jneen (Jeanine Adkisson)
04:16 AM Bug #21994 (Open): If there is a local variable `foo`, calls to a method `foo` with a regexp literal as first argument is always a SyntaxError without parentheses
## Quick version:
```bash
ruby -e 'p /hello/' # => /hello/ (warning)
ruby -e 'p = 1; p /hello/' # syntax error
ruby -e 'p %r/hello/' # => /hello/ (no warning)
ruby -e 'p = 1; p %r/hello/' # syntax error
```
## Context
In Roug...
jneen (Jeanine Adkisson)
09:24 AM Bug #21995: mkmf generates a non-deterministic log file
I created a [pull request](https://github.com/ruby/ruby/pull/16734) about this. gemmaro (Gemma Kosaka)
09:18 AM Bug #21995 (Open): mkmf generates a non-deterministic log file
Hello,
When compiling Ruby's C extensions with mkmf, it can generate a `mkmf.log` file with non-deterministic content, especially at the line below:
```txt
ld: /tmp/rubytest.h8pay9/cc3fbuGm.o: in function `t':
^^^^^^^^^^^^^^^...
gemmaro (Gemma Kosaka)
05:14 AM Bug #21870: Regexp: Warnings when using slightly overlapping \p{...} classes
That was my expectation as well, but what I observed was that it does in fact seem to preserve warning behaviour for all of the other cases discussed here, as noted both here and in the pull request description. I would definitely feel s... jneen (Jeanine Adkisson)
05:06 AM Bug #21870: Regexp: Warnings when using slightly overlapping \p{...} classes
I think you mean [k-takata/Onigmo#175](https://github.com/k-takata/Onigmo/pull/175).
This PR looks to remove **all** warnings for character class overlapping, not only Unicode properties.
nobu (Nobuyoshi Nakada)
04:30 AM Bug #21870: Regexp: Warnings when using slightly overlapping \p{...} classes
As a point of order - I opened a pull request against Onigmo, should that have been to Ruby instead? I'm happy to do either or both. It is a fairly simple fix, but there are some tests in Ruby main that would need to change to reflect th... jneen (Jeanine Adkisson)
02:32 AM Revision 1ffe16ce (git): Bump the github-actions group across 2 directories with 4 updates
Bumps the github-actions group with 3 updates in the / directory: [ruby/setup-ruby](https://github.com/ruby/setup-ruby), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [taiki-e/install-action](https://github.co... dependabot[bot]

04/12/2026

02:40 PM Bug #21992: Defining BasicObject#initialize causes segmentation fault
> 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED, 4.0: REQUIRED
I don't know if this bug actually qualify for 3.3 (and more so 3.2) backport, but in doubt I made the PRs:
- 4.0: https://github.com/ruby/ruby/pull/16726
- 3.4: http...
byroot (Jean Boussier)
02:25 PM Bug #21992 (Closed): Defining BasicObject#initialize causes segmentation fault
Applied in changeset commit:git|6593cc52d6153c5535968a8faff6cf4ac83a11fe.
----------
iseq.c: rb_estimate_iv_count handle no superclass
[Bug #21992]
When redefining `BasicObject#initialize` there's no super class to
access.
byroot (Jean Boussier)
01:15 PM Bug #21992: Defining BasicObject#initialize causes segmentation fault
The fix is pretty trivial: https://github.com/ruby/ruby/pull/16725
Not the first time we fail to handle the fact that `RClass.superclass` may be `Qnil`, e.g. [Bug #21694]
byroot (Jean Boussier)
11:35 AM Bug #21992: Defining BasicObject#initialize causes segmentation fault
nobu (Nobuyoshi Nakada) wrote in #note-1:
> `BasicObject#initialize` is not defined, so "redefining" may be questionable.
It seems it is defined:
```
$ ruby -ve 'p Class.new.instance_method :initialize'
ruby 3.4.9 (2026-03-11 rev...
Eregon (Benoit Daloze)
04:52 AM Bug #21992: Defining BasicObject#initialize causes segmentation fault
petercooper (Peter Cooper) wrote:
> In Ruby HEAD, 4.0.2, 3.4.7, and 3.3.11 on macOS, this leads to an immediate segmentation fault. I also got this on Ruby 3.4.1 on Linux.
It looks like since 3.2 (commit:9c5e3671ebd9c07c178ca5dac08ad...
nobu (Nobuyoshi Nakada)
02:25 PM Revision 6593cc52 (git): iseq.c: rb_estimate_iv_count handle no superclass
[Bug #21992]
When redefining `BasicObject#initialize` there's no super class to
access.
byroot (Jean Boussier)
12:59 PM Revision 8e96d6f7 (git): rb_gc_obj_optimal_size: don't enlarge small AR table hashes
Ref: https://github.com/ruby/ruby/pull/16653
Frozen hashes backed by AR tables can be smaller than 160B.
byroot (Jean Boussier)
07:58 AM Revision d0ef5d13 (git): Update ruby-bench to update stackprof
nobu (Nobuyoshi Nakada)
07:51 AM Revision b66b5008 (git): Remove postponed job APIs deprecated for 2 years
nobu (Nobuyoshi Nakada)
02:47 AM Revision 4affbf79 (git): Fixed the error message for `ibf_load_builtin`
`ibf_load_ptr` returns a pointer to the loaded data without a NUL
terminator. Like as the debug output above, the length of the loaded
data must explicitly specified.
nobu (Nobuyoshi Nakada)

04/11/2026

09:43 PM Revision bf008f07 (git): [ruby/rubygems] Clarify the name and meaning of the first argument
to `gem spec`
(https://github.com/ruby/rubygems/pull/9476)
* GEMFILE sound like Bundler Gemfile but this is unrelated.
https://github.com/ruby/rubygems/commit/3e3addb8d2
Eregon (Benoit Daloze)
05:48 PM Bug #21933 (Closed): Ruby::Box: named capture local variable can become nil after non-matching lines
tagomoris (Satoshi Tagomori)
05:47 PM Revision 8ad6baa0 (git): Use box_ready for $&, $`, $\', $+
These variables have rb_gvar_readonly_setter, so box_ready is sufficient.
Only $~ needs box_dynamic due to its custom match_setter.
afurm (Andrii Furmanets)
05:47 PM Revision 526344b5 (git): Fix Box regexp match vars after non-match
afurm (Andrii Furmanets)
02:56 PM Bug #21993 (Open): `rb_gc_update_tbl_refs` is incorrectly documented as the dcompact pair for `rb_mark_tbl_no_pin`, and is unsafe for `st_table`s with non-VALUE keys
Hey!
I work for Datadog on the [Ruby profiler](https://github.com/datadog/dd-trace-rb) and I've been exploring the TypedData GC API to understand the correct patterns for writing compaction-aware extensions.
While reading through t...
ivoanjo (Ivo Anjo)
01:27 PM Bug #21992 (Closed): Defining BasicObject#initialize causes segmentation fault
Simplest reproduction:
``` ruby
class BasicObject
def initialize
end
end
```
In Ruby HEAD, 4.0.2, 3.4.7, and 3.3.11 on macOS, this leads to an immediate segmentation fault. I also got this on Ruby 3.4.1 on Linux.
What I...
petercooper (Peter Cooper)
12:02 PM Revision f70c081b (git): Always allocate CDHASH in 80B slots
Up to size 8, `rb_hash_new_with_size()` will allocate a 160B
slot to fit a full `ar_table`.
But in the case of CDHASH, we immediately assign a custom hash
type, which trigger the conversion into an `st_table`, potentially
wasting 80B.
byroot (Jean Boussier)
06:14 AM Bug #21990: [ruby-talk:444791] Regression: Ruby 4.0 constantly crashing
The C backtrace in the crash report seem bogus. Almost none of it make sense. Most of the functions on the stack can't possibly call each others.
Using `gdb` or `lldb` to produce a backtrace from a core dump might help.
byroot (Jean Boussier)
05:57 AM Bug #21952 (Closed): Ruby::Box double free at process exit when `fiddle/import` is required in multiple boxes
Applied in changeset commit:git|c0d86a0103de7130943d54b4a290b76ec7e0c135.
----------
class.c: rb_class_duplicate_classext also dup content of cvc_tbl
[Bug #21952]
Shallow copying the table result in the same memory being shared
betwee...
byroot (Jean Boussier)
04:13 AM Bug #21952: Ruby::Box double free at process exit when `fiddle/import` is required in multiple boxes
As I commented, https://github.com/ruby/ruby/pull/16595 looks good to me. tagomoris (Satoshi Tagomori)
05:57 AM Revision c0d86a01 (git): class.c: rb_class_duplicate_classext also dup content of cvc_tbl
[Bug #21952]
Shallow copying the table result in the same memory being shared
between multiple box, causing double free when one of the box
is garbage collected.
byroot (Jean Boussier)

04/10/2026

09:34 PM Bug #21991 (Open): `$!` stays as the first exception in Ruby Box
Description
---
When Ruby Box is enabled (`RUBY_BOX=1`), `$!` inside `rescue` does not change after the first exception.
`$!` is expected to show the exception for each `rescue` block, but it always shows the first one.
Steps t...
tikkss (Tsutomu Katsube)
09:09 PM Revision 044a43f4 (git): ZJIT: Trace infer_types as a sub-pass of other passes (#16714)
This helps us see how much time it takes in compiler tracing. Max Bernstein
08:06 PM Bug #21990 (Open): [ruby-talk:444791] Regression: Ruby 4.0 constantly crashing
(Filed for a user on ruby-talk who can't get registered here for some reason)
After upgrade to ruby 4.0, all our Rails applications are continuously
crashing on different nodes at different locations.
All the applications were run...
zenspider (Ryan Davis)
07:35 PM Revision 4978bfb2 (git): ZJIT: `fmt::Debug` for VALUE in hex. Shorthand for rb_obj_info()
The default `{:?}` still always prints the pointer address and never
dereferences it, but now in hex.
The "alternate" flag lets you do `println!("{my_ruby_object:#?}")` and
get a rich printout like `VALUE(0x000000010232fd00 T_CLASS/Obje...
alanwu (Alan Wu)
07:32 PM Revision 5ffaaf04 (git): ZJIT: Assert no side exits in assert_compiles()
Most of the time, we want to assert that we compile and the compiled
code runs without exiting. A small number of tests trigger side exits,
and those are changed to use assert_compiles_allowing_exits().
```console
$ rg -F 'assert_compil...
alanwu (Alan Wu)
07:26 PM Revision 304d37f7 (git): ZJIT: Fix hanging loop (#16711)
https://github.com/ruby/ruby/pull/16122 (c272297e8a9f2b8034739b915707910b4e568479) worked for maximal SSA but
does not work for "normal" SSA. This is because it used information
propagating across block args/params as a proxy for trackin...
Max Bernstein
06:39 PM Revision 573b16aa (git): Bump RDoc to latest master (4913d56) (#16713)
Update the pinned RDoc revision to pick up the latest changes from
ruby/rdoc master.
st0012 (Stan Lo)
06:15 PM Feature #21695: Optimizing Ruby performance with Ruby itself instead of Rust
ufuk (Ufuk Kayserilioglu) wrote in #note-8:
How do get from compile time code generation to runtime compilation?
I am using these hacks I mentioned and many other related hacks to make a JIT compiler. My point is that using Ruby to ...
fredlinhares (Frederico Linhares)
08:30 AM Feature #21695: Optimizing Ruby performance with Ruby itself instead of Rust
@fredlinhares
A really long time ago, while i was working with ruby and wxWidgets (C++ lib), i worked on this:
https://github.com/Hanmac/rwx/blob/master/ext/main.hpp#L538
Where I was writing C macros to help me with writing getter...
Hanmac (Hans Mackowiak)
03:42 PM Revision 678b2c1a (git): [ruby/rubygems] Update man pages date
https://github.com/ruby/rubygems/commit/087625017a Edouard CHIN
03:42 PM Revision 21836339 (git): [ruby/rubygems] fix formatting for BUNDLE_PREFER_PATCH variable in man page
https://github.com/ruby/rubygems/commit/5bdf29f86c Ivan Kuchin
02:44 PM Revision c30d74b3 (git): Ensure version from bundled_gems is used in tool/rdoc-srcdir (#16712)
Use version from bundled_gems in tool/rdoc-srcdir
Previously, `tool/rdoc-srcdir` used `Dir.glob(...).first` to find
bundled gems like rdoc and tsort. This picks the first match
alphabetically, which can select a stale older version when...
st0012 (Stan Lo)
01:30 PM Revision 4245f8e1 (git): [DOC] Harmonize ::atime and #atime methods (#16620)
burdettelamar (Burdette Lamar)
01:06 PM Revision 7f4db64f (git): Emit already initialzed constant warnings in a single call
When decorating `Warning.warn`, it's much more convenient to get
the whole warning in a single string.
byroot (Jean Boussier)
11:30 AM Feature #20205: Enable `frozen_string_literal` by default
> we would benefit from a programmatic flag
It already exists:
```ruby
RubyVM::InstructionSequence.compile_option = {frozen_string_literal: true}
```
To be set early during the boot process (typically at the top of `config/bo...
byroot (Jean Boussier)
10:45 AM Feature #20205: Enable `frozen_string_literal` by default
I'm converting my Monolith (TableCheck) today to use it, and I realized that we would benefit from a programmatic flag `Ruby.enable_frozen_string_literal` (similar to `RubyVM::YJIT.enable` and Rails' `config.yjit = true`). You'd set this... johnnyshields (Johnny Shields)
09:56 AM Feature #20205: Enable `frozen_string_literal` by default
> Perhaps we can get major app maintainers like Shopify switching on RUBYOPT="--enable-frozen-string-literal" throughout their ecosystem?
The Shopify monolith has been compatible with frozen string literals for several years, or at l...
byroot (Jean Boussier)
05:42 AM Feature #20205: Enable `frozen_string_literal` by default
Hi, can we please make a concrete plan to get this done?
Perhaps we can get major app maintainers like Shopify switching on `RUBYOPT="--enable-frozen-string-literal"` throughout their ecosystem? And a push to add `frozen_string_literal:...
johnnyshields (Johnny Shields)
09:49 AM Revision cfec60d4 (git): dir.c: cache and revalidate working directory
`rb_dir_getwd_ospath()` is called quite frequently, but
the overwhelming majority of the time, the current directory
didn't change.
We can also assume that most of the time, `PATH_MAX` is enough
for `getcwd`, hence we can first attempt ...
byroot (Jean Boussier)
09:23 AM Feature #21987: Assume `chdir(2)` isn't called and cache `rb_dir_getwd_ospath()`
> Is this still the case? I removed some of this in
My bad. My first prototype of that change was months ago, this is indeed no longer the case.
> ...
Yes, that was my backup plan from the start. The problem is that on macOS, `open(2)...
byroot (Jean Boussier)
07:56 AM Feature #21987: Assume `chdir(2)` isn't called and cache `rb_dir_getwd_ospath()`
byroot (Jean Boussier) wrote:
> For some implementations, allocating a `T_DATA` to avoid leaks in case of failure.
Is this still the case? I removed some of this in https://github.com/ruby/ruby/commit/126b657bd103a1abf4b572ade557ffdc...
jhawthorn (John Hawthorn)
06:36 AM Feature #21987: Assume `chdir(2)` isn't called and cache `rb_dir_getwd_ospath()`
Hum, that's a case i didn't think of indeed... Might be a deal breaker. byroot (Jean Boussier)
02:26 AM Feature #21987: Assume `chdir(2)` isn't called and cache `rb_dir_getwd_ospath()`
byroot (Jean Boussier) wrote:
> This however assumes that C extensions or other native libraries never call `chdir(2)` after executing Ruby, or at least always reset it before yielding back to Ruby.
And no other process renames the d...
nobu (Nobuyoshi Nakada)
07:56 AM Revision b154cfa9 (git): Add a fastpath for `rb_str_normalize_ospath`
This extra check is a hotspot for path operations on
macOS.
It was added in 9962aad7b0184e385b40c26c5a109bff7abbe43c
because of a limitation of HFS+.
But all the invalid characters are outside of ASCII range,
and most paths are ASCII, ...
byroot (Jean Boussier)
06:37 AM Revision 36b0ae02 (git): Add single byte fast path to `File.expand_path`
Similar to previous changes to `File.join` & al.
```
compare-ruby: ruby 4.1.0dev (2026-04-09T12:24:09Z master c919778017) +PRISM [arm64-darwin25]
built-ruby: ruby 4.1.0dev (2026-04-09T17:42:24Z expand-path-mbenc 4fd047f73c) +PRISM [arm6...
byroot (Jean Boussier)
03:02 AM Revision 84412ffa (git): Bump the github-actions group across 1 directory with 2 updates
Bumps the github-actions group with 2 updates in the / directory: [actions/github-script](https://github.com/actions/github-script) and [taiki-e/install-action](https://github.com/taiki-e/install-action).
Updates `actions/github-script...
dependabot[bot]
12:39 AM Revision 4c2ae6e2 (git): Always ensure room in rb_obj_embedded_size
Although the issue only occurred on debug builds, we should always be
requesting a size large enough to fit the object when it expands to the
heap, rather than just hoping the GC provides enough room.
jhawthorn (John Hawthorn)

04/09/2026

11:26 PM Revision 0c1ce03b (git): ZJIT: Make `hir::types::Class` not final and have it include metaclasses
Every class boots with a metaclass, and all metaclasses are subclasses
of Class, so `types::Class` has no business in `ExactBitsAndClass`.
In fact, we should never see an object whose RBasic::class is exactly
rb_cClass because classes ge...
alanwu (Alan Wu)
08:55 PM Revision 8aa2322b (git): Add slot size assertion to ar_force_convert_table
Co-authored-by: Luke Gruber <luke.gru@gmail.com>
Co-authored-by: Matt Valentine-House <matt@eightbitraptor.com>
jhawthorn (John Hawthorn)
08:55 PM Revision 0b5862f4 (git): Don't use fixed-size hashes for cdhash
This caused out of bounds writes because of converting to a st_table.
Co-authored-by: Luke Gruber <luke.gru@gmail.com>
Co-authored-by: Matt Valentine-House <matt@eightbitraptor.com>
jhawthorn (John Hawthorn)
06:52 PM Feature #21695: Optimizing Ruby performance with Ruby itself instead of Rust
So, what you are doing is code-generation at compile time using ERB templates, which is cool! But, I find it a stretch to call it meta-programming, since the C code isn't writing C code at runtime, everything is happening at compile time... ufuk (Ufuk Kayserilioglu)
06:21 PM Feature #21695: Optimizing Ruby performance with Ruby itself instead of Rust
Let me try to elaborate as much as I can.
Rust is not as fast as C; it is as fast as the equivalent C. However, C allows us to use some valid memory management techniques that are impossible in Rust unless you use considerable amount...
fredlinhares (Frederico Linhares)
12:50 PM Bug #21984: RubyVM::AST can't tell if an array is passed to break/next/return
The honest answer is, not really. It's probably fine to stay as is, and I would be okay with closing this.
For context, I've been building a translation layer from RubyVM::AbstractSyntaxTree to Prism, hoping it might help with a migra...
kddnewton (Kevin Newton)
10:16 AM Bug #21984: RubyVM::AST can't tell if an array is passed to break/next/return
The same thing can be also said to `a=[1,2]` and `a=1,2`.
In Prism, these are both parsed as ArrayNode with/without opening and closing.
In AbstractSyntaxTree, the non-abstract parts (bracket) are dropped. I think it's just a restricti...
tompng (tomoya ishida)
12:24 PM Revision c9197780 (git): Remove extra sentinel from shape capacities
This isn't a 0 terminated list anymore because we iterate over
heaps_count directly. So we don't need to allocate an extra byte for the
sentinel
eightbitraptor (Matt V-H)
12:24 PM Revision 3c28bb53 (git): Make it obvious that field count guard is for debug
This is because when `RVALUE_OVERHEAD` is positive, ie. when
`RACTOR_CHECK_MODE` is enabled and we need to store the pointer to the
owning ractor, we need to make sure there is enough space to store it.
With the previous size pools the ...
eightbitraptor (Matt V-H)
12:24 PM Revision 5381f0fa (git): Replace sweeping_heaps map with a counter
We implemented some bit twiddling logic with an unsigned int to have a
neat way of tracking which heaps were currently sweeping, but we
actually don't need to care which heap is sweeping right now, just
whether some are or not, so we can...
eightbitraptor (Matt V-H)
12:24 PM Revision 2fd891f2 (git): Use the pre-processor to generate slot sizes and reciprocals
eightbitraptor (Matt V-H)
12:24 PM Revision 80e3a8d2 (git): Fix zjit hir tests
eightbitraptor (Matt V-H)
12:24 PM Revision a8009c98 (git): Allow flex in heap growth threshold
Add a 7/8 multiplier to the min_free_slots checks in
gc_sweep_finish_heap and gc_marks_finish, allowing heaps to be up to
~12.5% below the free slots target without triggering a major GC or
forced growth.
With 12 heaps instead of 5, eac...
eightbitraptor (Matt V-H)
12:24 PM Revision 5c968c50 (git): Cache has_sweeping_pages as a bitfield
eightbitraptor (Matt V-H)
12:24 PM Revision aa5f1922 (git): Update tests for new pool layout
eightbitraptor (Matt V-H)
12:24 PM Revision b6658c1e (git): Introduce RVALUE_SIZE GC constant
Add GC::INTERNAL_CONSTANTS[:RVALUE_SIZE] to store the usable size
(excluding debug overhead) of the smallest pool that can hold a standard
RVALUE.
eightbitraptor (Matt V-H)
12:24 PM Revision c9b70883 (git): Introduce power-of-two size pools
Replace the RVALUE_SLOT_SIZE-multiplier based pool sizes with explicit
power-of-two (and near-power-of-two) slot sizes. On 64-bit this gives
12 heaps (32, 40, 64, 80, 96, 128, 160, 256, 512, 640, 768, 1024)
instead of 5, providing finer ...
eightbitraptor (Matt V-H)
12:24 PM Revision 2567e76e (git): Handle small pools in shape capacity calculation
When pool slot sizes can be smaller than sizeof(struct RBasic) (e.g. a
32-byte pool on 64-bit where RBasic is 16 bytes), the capacity
calculation would underflow. Guard against this by setting capacity to
0 for pools too small to hold fi...
eightbitraptor (Matt V-H)
12:24 PM Revision 93710423 (git): Guard rb_obj_embedded_size for zero fields
With smaller pool sizes (e.g. 32 bytes), an RObject with 0 embedded
fields would request a size smaller than the minimum meaningful object.
Ensure at least 1 field worth of space so the embedded size is always
large enough for a valid RO...
eightbitraptor (Matt V-H)
12:24 PM Revision 772bde30 (git): Use sizeof(VALUE) for pointer alignment checks
eightbitraptor (Matt V-H)
12:24 PM Revision ce9d6c89 (git): Rename SIZE_POOL_COUNT to HEAP_COUNT in tests
eightbitraptor (Matt V-H)
11:48 AM Bug #21988 (Closed): `return a, &b` should be syntax error
Applied in changeset commit:git|51a3f0847782095340df5dbc8fb87450dbc1fbe7.
----------
[ruby/prism] Reject `return` and similar with block pass argument
Same handling as for `yield`. Fixes [Bug #21988]
https://github.com/ruby/prism/comm...
Earlopain (Earlopain _)
11:12 AM Bug #21988: `return a, &b` should be syntax error
https://github.com/ruby/prism/pull/4072 Earlopain (Earlopain _)
10:11 AM Bug #21988 (Closed): `return a, &b` should be syntax error
`return a, &b` is syntax error in parse.y, but accepted in Prism
~~~ruby
Prism.parse_success?('return a, &b')
#=> true
RubyVM::AbstractSyntaxTree.parse('return a, &b')
#=> block argument should not be given (SyntaxError)
~~~
W...
tompng (tomoya ishida)
11:48 AM Revision 51a3f084 (git): [ruby/prism] Reject `return` and similar with block pass argument
Same handling as for `yield`. Fixes [Bug #21988]
https://github.com/ruby/prism/commit/2dd20183ad
Earlopain (Earlopain _)
10:45 AM Bug #21989 (Open): Fiber initialization failure on WASI/ruby.wasm raises TypeError instead of FiberError
## Summary
When building Ruby for WASM and using it via `ruby.wasm`, if Fiber initialization fails, the following error may occur:
```text
TypeError: wrong argument type false (expected Class)
```
instead of the expected `Fibe...
ledsun (shigeru nakajima)
09:13 AM Feature #21987 (Open): Assume `chdir(2)` isn't called and cache `rb_dir_getwd_ospath()`
### Context
I'm looking at optimizing Ruby applications boot time, and one very common operation that seems wasteful is that when interpreting relative paths
we keep calling `ruby_getcwd()`, even though its result almost never change...
byroot (Jean Boussier)
08:34 AM Revision 03757030 (git): mkmf: check for C++ compiler
It may be set to "false" if usable compiler is not found. nobu (Nobuyoshi Nakada)
06:10 AM Revision b94a7ec7 (git): Suppress rev-parse error message when out-of-place build
nobu (Nobuyoshi Nakada)
05:19 AM Revision c091c186 (git): Fix thread leaks
Wait for terminated threads to finish. nobu (Nobuyoshi Nakada)
05:13 AM Revision 4b6a467a (git): mkmf: skip if C++ compiler not found
nobu (Nobuyoshi Nakada)
05:05 AM Bug #21986 (Closed): RubyVM::AST incorrect location for literals followed by modifier `if`
Applied in changeset commit:git|4644e4f2fafe45e2c49f18bc9712d0f5fff3d341.
----------
[Bug #21986] Fix location of numeric literal
When checking for suffixes, do not flush the numeric literal token
even if no suffix is found.
nobu (Nobuyoshi Nakada)
04:32 AM Revision 4644e4f2 (git): [Bug #21986] Fix location of numeric literal
When checking for suffixes, do not flush the numeric literal token
even if no suffix is found.
nobu (Nobuyoshi Nakada)
03:18 AM Revision f4b5566d (git): mkmf: grep all occurrences in cpp output
Apple clang aborts if cpp output is closed in middle, and leaves the
preprocessed source and reproduction shell script.
nobu (Nobuyoshi Nakada)
03:18 AM Revision aaa27ee0 (git): mkmf: Redirect egrep command input
nobu (Nobuyoshi Nakada)
03:18 AM Revision f104525c (git): mkmf: cpp_command in C++ mode
nobu (Nobuyoshi Nakada)
02:25 AM Revision a4fa75ee (git): Bump taiki-e/install-action
Bumps the github-actions group with 1 update in the / directory: [taiki-e/install-action](https://github.com/taiki-e/install-action).
Updates `taiki-e/install-action` from 2.75.0 to 2.75.1
- [Release notes](https://github.com/taiki-e/i...
dependabot[bot]

04/08/2026

10:49 PM Revision 949bee21 (git): Add ruby_version_is guard to CVE-2019-8322 spec for changing displayed message
hsbt (Hiroshi SHIBATA)
10:49 PM Revision 4edfd93c (git): Merge RubyGems/Bundler 4.0.10
hsbt (Hiroshi SHIBATA)
10:49 PM Revision dc13b5ad (git): Merge RubyGems/Bundler 4.0.9
hsbt (Hiroshi SHIBATA)
10:49 PM Revision 36084c24 (git): Merge RubyGems/Bundler 4.0.8
hsbt (Hiroshi SHIBATA)
10:49 PM Revision f13b3911 (git): Merge RubyGems/Bundler 4.0.7
hsbt (Hiroshi SHIBATA)
10:49 PM Revision 019c261c (git): Merge RubyGems/Bundler 4.0.6
hsbt (Hiroshi SHIBATA)
10:18 PM Revision 6ccabf1e (git): ZJIT: Guard an array is not frozen before popping from it
Max Bernstein
10:18 PM Revision ddb60fe3 (git): ZJIT: Guard that an array is not frozen before modifying it
ArrayPush calls out to the fast-path, not checking for frozen-ness. In
debug mode, this leads to crashes. In release mode, silent erroneous
modifications.
Max Bernstein
10:18 PM Revision 9b6066c4 (git): ZJIT: Suggest correct command in bisect script
Max Bernstein
10:18 PM Revision 64a49051 (git): ZJIT: Detect bad configuration in make command in bisect script
Max Bernstein
10:18 PM Revision b2432095 (git): ZJIT: Require Ruby 3.4+ in bisect script
Max Bernstein
09:45 PM Revision b53186a4 (git): ZJIT: Load immediate into register before masking (#16677)
This otherwise causes a crash on e.g. https://github.com/ruby/ruby/pull/15220:
thread '<unnamed>' (18071) panicked at zjit/src/codegen.rs:2511:21:
internal error: entered unreachable code: with_num_bits should not be used for: V...
Max Bernstein
09:44 PM Revision aa7e671c (git): ZJIT: [DOC] induce_breakpoint! behaves differently when ZJIT is on
alanwu (Alan Wu)
09:05 PM Feature #21695: Optimizing Ruby performance with Ruby itself instead of Rust
fredlinhares (Frederico Linhares) wrote in #note-5:
> Sorry for the delay. I was busy until very recently, but I will be more active from now on. Here is the repository: https://gitlab.com/fredlinhares/pre_c
There is hardly any cod...
ufuk (Ufuk Kayserilioglu)
05:42 PM Feature #21695: Optimizing Ruby performance with Ruby itself instead of Rust
Sorry for the delay. I was busy until very recently, but I will be more active from now on. Here is the repository: https://gitlab.com/fredlinhares/pre_c fredlinhares (Frederico Linhares)
08:24 PM Revision 82470d8b (git): Allow fixed size hashes to be allocated in smaller slots
When we allocate a RHash using `rb_hash_new_capa()`, if `capa` is
larger than `8` it's directly allocated as an `st_stable` in a `80B`
slot.
However if the requested size if lesser or equal to 8, we allocate
it as an `ar_table` in a `16...
byroot (Jean Boussier)
07:52 PM Revision d6528d63 (git): compile.c: avoid needless rehash
These were introduced in 165e10b6cf73f723c2f6af676b70aeb2d8cf85c9
when these hashes were allocated with `rb_hash_new()`.
But since 4fb1438b9d7f617c7a8dc37935a960a24219e697 they are allocated
with the right size, making the rehashing pur...
byroot (Jean Boussier)
07:00 PM Revision 5cf6c842 (git): rb_gc_obj_needs_cleanup_p: skip sweep for most imemo/fields
There is only two rare cases where they need to be sweeped:
- If they are so large that they're heap allocated.
- If they have an object_id (and id2ref_tbl exist but
we can't check that here)
byroot (Jean Boussier)
06:26 PM Revision 30e31488 (git): ZJIT: Fix land race (#16686)
Just update some HIR tests. Max Bernstein
05:50 PM Bug #21986 (Closed): RubyVM::AST incorrect location for literals followed by modifier `if`
```
irb(main):001> RubyVM::AbstractSyntaxTree.parse("1.0if true")
=> (SCOPE@1:0-1:10 tbl: [] args: nil body: (IF@1:0-1:10 (TRUE@1:6-1:10) (FLOAT@1:3-1:3 1.0) nil))
irb(main):002> RubyVM::AbstractSyntaxTree.parse("1if true")
=> (SCOPE...
kddnewton (Kevin Newton)
05:34 PM Revision 6d6f927d (git): ZJIT: Merge reduce_send_without_block_to_ccall and reduce_send_to_ccall (#16675)
Thread through special handling of the potential block argument. Max Bernstein
05:34 PM Revision d3f7d2c7 (git): ZJIT: Pull load out of IsBlockParamModified (#16673)
This makes IsBlockParamModified pure and the loads more understandable
to load-store forwarding.
Max Bernstein
04:45 PM Revision 8886990a (git): ZJIT: Add polymorphic support for getblockparamproxy (#16636)
Nozomi Hijikata
02:34 PM Feature #21982: Add `Decimal` as a core numeric class
Oh, gotcha. Yeah we would not be able to optimize C code. Maybe one day it will motivate a pure Ruby impl but today is not that day. tekknolagi (Maxwell Bernstein)
07:06 AM Feature #21982: Add `Decimal` as a core numeric class
> ZJIT will be able to "see through" and even elide general Ruby object allocations when possible.
I assume this will remain limited to objects and methods defined in Ruby? `BigDecimal` is implemented in C, and I don't think it could...
byroot (Jean Boussier)
02:17 PM Bug #21984: RubyVM::AST can't tell if an array is passed to break/next/return
I don't think that fix works:
```
$ ./ruby -e 'pp RubyVM::AbstractSyntaxTree.parse("tap { break 1, 2 }")'
(SCOPE@1:0-1:18 tbl: [] args: nil body: (ITER@1:0-1:18 (FCALL@1:0-1:3 :tap nil) (SCOPE@1:4-1:18 tbl: [] args: nil body: (BREAK...
kddnewton (Kevin Newton)
04:53 AM Bug #21984: RubyVM::AST can't tell if an array is passed to break/next/return
Changing this causes the rbs tests to fail.
https://github.com/ruby/ruby/actions/runs/24117591586/job/70364654030?pr=16678#step:14:828
``` diff
class Hello
- def with_return: () -> (1 | "2" | :x)
? ^
+ ...
nobu (Nobuyoshi Nakada)
02:02 AM Bug #21984 (Open): RubyVM::AST can't tell if an array is passed to break/next/return
```
irb(main):005> RubyVM::AbstractSyntaxTree.parse("tap { break [1, 2, 3] }")
=> (SCOPE@1:0-1:23 tbl: [] args: nil body: (ITER@1:0-1:23 (FCALL@1:0-1:3 :tap nil) (SCOPE@1:4-1:23 tbl: [] args: nil body: (BREAK@1:6-1:21 (LIST@1:12-1:21 (...
kddnewton (Kevin Newton)
01:00 PM Revision 7209523f (git): [ruby/openssl] kdf: fix wrong OPENSSL_cleanse() calls
Embarrassingly, the previous commits introduced OPENSSL_cleanse() calls
against the temporary struct instead of the buffer content. Thanks to
nagachika for noticing.
https://github.com/ruby/openssl/commit/8eca3efad4
rhenium (Kazuki Yamaguchi)
11:08 AM Revision a5c9e840 (git): [ruby/openssl] kdf: release GVL in OpenSSL::KDF.scrypt
scrypt is another password hashing algorithm, so releasing the GVL is
useful.
https://github.com/ruby/openssl/commit/dd2f6ba892
rhenium (Kazuki Yamaguchi)
11:08 AM Revision 5c7e3c20 (git): [ruby/openssl] kdf: release GVL in OpenSSL::KDF.pbkdf2_hmac
Since PBKDF2 runs single-threaded and is typically configured to take
several hundred milliseconds or longer, it is a perfect candidate to be
run without the GVL.
https://github.com/ruby/openssl/commit/2a24966414
rhenium (Kazuki Yamaguchi)
10:59 AM Revision ad82b727 (git): Skip `imemo_tmpbuf` sweeping when the buffer was eagerly freed.
`imemo_tmpbuf` can be skipped if `ptr` is `NULL` which is often
the case if `RB_ALLOCV_END` was used.
byroot (Jean Boussier)
08:25 AM Revision 1fb0aca3 (git): imemo.h: Extract rb_imemo_needs_cleanup_p
byroot (Jean Boussier)
05:50 AM Bug #21985 (Closed): RubyVM::AST negative numbers do not include - in location
Applied in changeset commit:git|24a2ba09af13b7c969733ea9370ad59d2442f4c9.
----------
[Bug #21985] Include the `-` in the negative numbers location
nobu (Nobuyoshi Nakada)
02:30 AM Bug #21985 (Closed): RubyVM::AST negative numbers do not include - in location
```
irb(main):007> RubyVM::AbstractSyntaxTree.parse("-1")
=> (SCOPE@1:0-1:2 tbl: [] args: nil body: (INTEGER@1:1-1:2 -1))
irb(main):008>
```
kddnewton (Kevin Newton)
05:50 AM Revision 24a2ba09 (git): [Bug #21985] Include the `-` in the negative numbers location
nobu (Nobuyoshi Nakada)
05:43 AM Revision 0cebedd0 (git): Fix the order of `assert_equal` arguments
The expected value should be first, second the actual value. nobu (Nobuyoshi Nakada)
05:39 AM Revision c8c0af3c (git): [ruby/rubygems] Fix grammar in gem installer cache comment
Change "and lock the mutex" to "and to lock the mutex" for correct
parallel infinitive structure.
https://github.com/ruby/rubygems/commit/94f9267b72
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
05:39 AM Revision 539cb5e1 (git): [ruby/rubygems] Use eq matcher instead of be for string comparison in newgem template
be checks object identity which will fail for newly-allocated strings.
eq checks value equality and is the correct matcher here.
https://github.com/ruby/rubygems/commit/828440937b
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@a...
hsbt (Hiroshi SHIBATA)
05:39 AM Revision f5ad01ea (git): [ruby/rubygems] Fix wrong expected value in Rust extension test templates
The Rust function hello("world") returns "Hello world, from Rust!" but
the Ruby test templates expected "Hello earth, from Rust!", causing
generated tests to fail immediately after bundle gem --ext=rust.
https://github.com/ruby/rubygems...
hsbt (Hiroshi SHIBATA)
05:39 AM Revision 42b74bdb (git): [ruby/rubygems] Fix typos in comments and documentation
https://github.com/ruby/rubygems/commit/72bdf54b6d
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
05:05 AM Revision b11091ca (git): [ruby/rubygems] Use distinct gemspec filenames in stub_with_version and stub_without_version helpers
Agent-Logs-Url: https://github.com/ruby/rubygems/sessions/4028db0e-e050-48af-9704-4219653a4753
https://github.com/ruby/rubygems/commit/951ef62f76
Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>
copilot-swe-agent[bot]
05:05 AM Revision fdc2a611 (git): [ruby/rubygems] Fix gemspec filename inconsistencies in stub_with_version and stub_without_version
Agent-Logs-Url: https://github.com/ruby/rubygems/sessions/8de78edb-b0d3-4fd3-bdad-898184561abd
https://github.com/ruby/rubygems/commit/5a87b86515
Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>
copilot-swe-agent[bot]
04:27 AM Revision 3f850711 (git): [ruby/rubygems] Fix typo in test description: 'to' -> 'do'
Agent-Logs-Url: https://github.com/ruby/rubygems/sessions/9cf2fa2e-02a9-4dde-a833-8ad11974e1eb
https://github.com/ruby/rubygems/commit/5ac4c8400b
Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>
copilot-swe-agent[bot]
04:24 AM Revision a0092d2a (git): [ruby/rubygems] Fix test_execute_allowed_push_host response message to match freebird gem
Agent-Logs-Url: https://github.com/ruby/rubygems/sessions/61efd9ab-67d3-4ce2-b81d-4b6e8ef07f99
https://github.com/ruby/rubygems/commit/bf73b51866
Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>
copilot-swe-agent[bot]
04:24 AM Revision 6d4e0064 (git): [ruby/rubygems] Fix lockfile DEPENDENCIES section to use 'rubocop' instead of 'parallel_tests'
Agent-Logs-Url: https://github.com/ruby/rubygems/sessions/dd120552-e56f-4a0e-9143-ec483aa07bfc
https://github.com/ruby/rubygems/commit/56a98274c3
Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>
copilot-swe-agent[bot]
03:52 AM Revision 76eb974b (git): [ruby/rubygems] Fix inconsistent indentation at line 481 in git_spec.rb
Agent-Logs-Url: https://github.com/ruby/rubygems/sessions/a9efe3b4-99c9-4af2-9954-a65a2859edfc
https://github.com/ruby/rubygems/commit/3d4e90a355
Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>
copilot-swe-agent[bot]
02:41 AM Revision 9232d14a (git): [DOC] Fill missing stars
nobu (Nobuyoshi Nakada)
02:24 AM Revision 3e299ba8 (git): Bump taiki-e/install-action
Bumps the github-actions group with 1 update in the / directory: [taiki-e/install-action](https://github.com/taiki-e/install-action).
Updates `taiki-e/install-action` from 2.74.0 to 2.75.0
- [Release notes](https://github.com/taiki-e/i...
dependabot[bot]
 

Also available in: Atom