4 ms·
> This is somewhat tangential, but in my opinion implementing Optionals as a "normal" wrapper type, as is done in Java, doesn't really help that much The great
by herbstein 5y ago
> This is somewhat tangential, but in my opinion implementing Optionals as a "normal" wrapper type, as is done in Java, doesn't really help that much
The great thing about Rust is that `Option` is a normal, generic type. You could very easily implement your own equivalent type.
- mqus 5y agoNot 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.