4 ms·
Not quite. The compiler does have the knowledge that it can use \0 for representing None in Option<Pointer> types. I'm not sure it can infer that for home-grown
by mqus 5y ago
Not quite. The compiler does have the knowledge that it can use \0 for representing None in Option<Pointer> types. I'm not sure it can infer that for home-grown Option enums.
So it can optimize the memory overhead of Option<> away completely.
- School-Cotton 5y agoThat is called “niche optimization” and the compiler will in fact still do it for a hand-rolled Option type.
- herbstein 5y agoFor anyone not sure, here is the proof. https://godbolt.org/z/4zhWM9hTP https://godbolt.org/z/4zhWM9hTP
- tialaramex 5y agoAlthough, Rust only knows about certain obvious niches. It can reason that it can fit None in the same space as NonZeroU64 or a reference &T but it doesn't see how to do this with a hypothetical EvenU64 as I understand it because that "niche" is in the wrong place.