General

Profile

byroot (Jean Boussier)

Issues

open closed Total
Assigned issues 0 28 28
Reported issues 28 138 166

Projects

Project Roles Registered on
Ruby Committer 09/27/2021

Activity

05/06/2026

04:05 PM Ruby Feature #22056: Add zero-copy String constructor backed by an arbitrary Ruby object
Another though: what does it means for coderanges? Since the buffer is owned by another object, it can be mutated without going through one of String methods, which means things like `ENC_CODERANGE_CLEAR` won't happen.
Perhaps it's ac...
byroot (Jean Boussier)
04:01 PM Ruby Feature #22056: Add zero-copy String constructor backed by an arbitrary Ruby object
> by leveraging the existing STR_NOFREE mechanism.
I see. So it's mutable, but Copy-on-Write. If you mutate the string, all the content is copied in a buffer managed by Ruby.
byroot (Jean Boussier)
02:13 PM Ruby Feature #22056: Add zero-copy String constructor backed by an arbitrary Ruby object
Somewhat related proposal: [Feature #20878]
I also wonder, this new "external" string is supposed to be mutable? If so that may increase `string.c` complexity significantly, as all codepaths that normally resize the string buffer will...
byroot (Jean Boussier)
08:10 AM Ruby Revision 4eeec614 (git): shapes: Rename `TOO_COMPLEX` in just `COMPLEX`
The `too_` prefix wasn't consistently used and just make the
thing longer for no benefit.
byroot (Jean Boussier)
08:10 AM Ruby Revision deceb9f6 (git): Rename `rb_shape_obj_*` into `rb_obj_shape_*`
For consistency. byroot (Jean Boussier)
07:02 AM Ruby Revision 678d86f5 (git): shape.c: transition to complex when `max_capacity` is reached
Now that we have 1024B slots, we can store up to 126 fields inline.
Objects larger than this are rare if not non-existent, hence we can
get rid of the `malloc` path for imemo/fields and simply transition
to `TOO_COMPLEX`.
This addition...
byroot (Jean Boussier)

05/05/2026

07:08 PM Ruby Revision 2f5b7464 (git): Refactor setivar caches to include the source and destination shapes
This is how caches used to work prior to 913979bede2a1b79109fa2072352882560d55fe0,
however since inline cache need to be set atomically, they are
limited to 64bits, which wasn't enough to store an `attr_index_t`
and two `shape_id_t`.
Bu...
byroot (Jean Boussier)
02:59 PM Ruby Revision 6074e537 (git): Reduce INVALID_SHAPE_ID to only its offset
Given we only store the shape offset in ivar caches, and the
offset is only 19bits, we should be able to store two shape offsets
and an attribute index in a single uint64_t.
Which is perfect for `setivar` caches.
However when initializ...
byroot (Jean Boussier)
08:52 AM Ruby Revision 1eda917b (git): shape.c: finalize the "offset" rename
To better distinguish fully formed shape ids from "naked" offsets. byroot (Jean Boussier)
08:52 AM Ruby Revision bd49c02e (git): shape.c: rename `shape_id` and `shape_offset` helpers
These are natural variable names, so by using macro like
case we avoid name conflicts.
byroot (Jean Boussier)

Also available in: Atom