What is its functionality? Is the hexadecimal 0x12bcd44a8 perhaps the address of the physical memory (RAM) that sclang allocates to make the string used to identify the object the same object or not by the === or !== operator?
What does gc mean? What is its functionality?
What does fmt mean? What is its functionality?
What is flg? What is its functionality?
What is set? What is its functionality?
Sorry to ask so many questions, but I would really appreciate it if you could share your expertise.
IIRC, a 64-bit float has: 1 sign bit, 11 exponent bits, and 52 mantissa bits (+1 implicit bit for 53 bits precision) – edit: first version wasn’t correct. There’s plenty of documentation online about floating point formats – best to read up on it, rather than guessing.
EDIT: 00000000 is the least-significant word, BFF00000 is the more significant.
011 1111 1111 = exponent bits. Decimal value is 1023. The offset (see floating point docs) is 1023, so the actual exponent is 1023 - 1023 = 0.
0’s are mantissa bits. There’s always an implicit 1 before the binary point, so this number is binary 1.00000000… * 2^0, then negated by the sign bit = -1.0.
Yes, a memory location.
The other values aren’t directly useful for normal use. Gc would be garbage-collection status (I don’t know what the specific values are); I guess fmt relates to the type tag belonging to the PyrSlot object in the backend; flg and set, no idea.
It is the “raw” hex representation of the 64 bit double value. You can use a site like https://baseconvert.com/ieee-754-floating-point to explore this. The high and low words appear switched in the printout because of programming error and/or endianness: Endianness - Wikipedia
It is the virtual address (Virtual memory - Wikipedia) of the object. Only the OS kernel knows the physical address. You didn’t see this for the float because certain small types are stored directly as values rather than by reference.
set: " size class". 0 for most objects, and for raw arrays 2^set gives you the size of the backing memory in slots. So a Int16Array with set value 0x03 would be backed by 2^3 * sizeof(int16_t) = 16 bytes. You can play around with different array sizes to get an intuition for this.