Expand description
NaN-boxed compact Value representation (8 bytes per value).
Layout: every value is a u64 interpreted as an IEEE 754 f64.
- Float: any f64 that is NOT a quiet NaN with our marker -> stored directly.
- Everything else: encoded as a quiet NaN with tag + payload in the mantissa.
IEEE 754 quiet NaN: exponent=0x7FF (all 1s), quiet bit=1, plus our marker bit.
We use 0x7FFC as 14-bit prefix (bits 63-50), leaving bits 49-0 free.
63 50 49 46 45 0
┌────────┬──────┬────────────────────────┐
│ 0x7FFC │ tag │ payload │
│ 14 bits│ 4 bit│ 46 bits │
└────────┴──────┴────────────────────────┘Tag map: 0 = Immediate payload 0-2: false/true/unit 1 = Symbol payload bits 0-1: fn/builtin/namespace/nullary-variant; rest=symbol index 2 = Int payload bit45: 0=inline(45-bit signed), 1=arena index 3 = String payload bit45: 0=inline small string (len + 5 bytes), 1=arena index 4 = Some payload bit45: 0=inline inner, 1=arena index 5 = None singleton 6 = Ok payload bit45: 0=inline inner, 1=arena index 7 = Err payload bit45: 0=inline inner, 1=arena index 8 = List payload bit45: 0=empty list, 1=arena index 9 = Vector payload bit45: 0=empty vector, 1=arena index 10 = Map payload bit45: 0=empty map, 1=arena index 11 = Record payload bit45: 1=arena index 12 = Variant payload bit45: 1=arena index 13 = Tuple payload bit45: 1=arena index 14-15 = (reserved)
Structs§
Enums§
Type Aliases§
- Persistent
Map - COW map: O(1) amortized insert when single-owner, O(n) clone when shared.