4 ms·
Forget Result, just allow the type system to express non-nullable object references. Use the same layout, just let the compiler know when something is guarantee
by brundolf 2y ago
Forget Result, just allow the type system to express non-nullable object references. Use the same layout, just let the compiler know when something is guaranteed to exist and force null-checking when it isn't
This doesn't cover everything people might want to do with unions, but it covers the billion-dollar mistake and doesn't run against the grain of the entire language (as far as I know)
- mrgriffin 2y ago> doesn't run against the grain of the entire language Not an expert, but my gut says maybe it runs against zero values? As in, "what's the zero value for a non-nullable reference?" Maybe the answer is something like "you can only use this type for parameters", but that seems very limiting.
- rudiksz 2y agoHalf of the language is already non-nullable and is accomplished by allowing for zero values. Non pointer variables are guaranteed to be never nil. What is missing is the ability to have pointer variables and have the compiler ensure that it will be never nil. I believe this was a design choice, not some technical limitation.
- keybored 2y agoLike the sibling comment seems to be saying: a non-nil pointer would have to be set to some real (non-nil) pointer value anyway. So having a zero value does not seem to apply?
- hellcow 2y agoI've been using `Null[T any] struct { V T, Valid bool }` for this, as the pattern comes from database/sql. Works fine.