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)
> 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)
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)
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)
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)
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)