Misc #18059
closed
Which FL_USERx are open to extension libraries?
Added by nobu (Nobuyoshi Nakada) over 3 years ago.
Updated about 3 years ago.
Description
Often the following failure occurs in test-spec
.
RBasic support for regular objects supports copying the flags from one object over to the other FAILED
Expected 81920 == 33636352
to be truthy but was false
/tmp/ruby/v3/src/trunk/spec/ruby/optional/capi/shared/rbasic.rb:71:in `block (2 levels) in <top (required)>'
/tmp/ruby/v3/src/trunk/spec/ruby/optional/capi/rbasic_spec.rb:8:in `<top (required)>'
81920 == 0x14000
33636352 == 0x2014000
The difference 0x2000000
is FL_USER13
, which is used as ROBJECT_TRANSIENT_FLAG
.
This flag is set when any Object
instance has some amount of instance variables.
In this particular case, it is possible to fix just by excluding the bit.
But, the question is which flags are open to extension libraries.
My guess is these flags are available for T_DATA
classes, but not for T_OBJECT
.
Any thoughts?
I guess none of them are open for extension libraries. For instance FL_USER0
is FL_SINGLETON
. It is obvious that the flag cannot be abused in any other ways than how we currently use it.
The "USER" terminology never seriously meant anything I guess. Extension libraries are the safest when they leave those bits untouched.
shyouhei (Shyouhei Urabe) wrote in #note-1:
The "USER" terminology never seriously meant anything I guess.
I thought it meant those flags have a different usage for each class. No?
Actually I have so many questions about flags, like why are they limited to 32 even though the flags
field is a 64-bit value (instead of wasting 32 bits, why not use either 32 or 64 bits on all architectures?) It would be nice if there was some documentation somewhere about flags and how they are used. Even just comments in the code. I haven't found much so far.
Dan0042 (Daniel DeLorme) wrote in #note-4:
I thought it meant those flags have a different usage for each class. No?
Correct.
Actually I have so many questions about flags, like why are they limited to 32 even though the flags
field is a 64-bit value (instead of wasting 32 bits, why not use either 32 or 64 bits on all architectures?)
Upper 32 bits are not available on 32-bit system of course.
We didn't think those bits were needed yet.
Dan0042 (Daniel DeLorme) wrote in #note-4:
Actually I have so many questions about flags,...
It would be nice if there was some documentation somewhere about flags and how they are used. Even just comments in the code. I haven't found much so far.
Yes, please!
duerst (Martin Dürst) wrote in #note-6:
Dan0042 (Daniel DeLorme) wrote in #note-4:
Actually I have so many questions about flags,...
It would be nice if there was some documentation somewhere about flags and how they are used. Even just comments in the code. I haven't found much so far.
Yes, please!
Sorry, I should have been more specific the first time round. One question is whether extension libraries are allowed to use some flags. The other question is what flags may still be free for new work on Ruby internals.
- Status changed from Open to Closed
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0