D3 sumtype api

Paul Backus snarwin at gmail.com
Fri Feb 28 11:51:47 UTC 2025


On Friday, 28 February 2025 at 11:33:50 UTC, Dejan Lekic wrote:
> On Friday, 28 February 2025 at 01:06:01 UTC, Paul Backus wrote:
>> I'm currently working on Option!T for Phobos v3, and my plan 
>> is for it to use SumType internally.
>
> Yes, you can, but _why_? What are you gaining from using 
> SumType there? It can hold only one value for God's sake...
>
> I am probably missing something, so please enlighten me.

The short answer is: it deals with edge cases around 
initialization and destruction.

Current `Nullable` is basically doing the same thing (if you read 
the source, it stores its value in a `union`), but it's inventing 
it from scratch instead of re-using `SumType`. This is bad for 
maintenance: I have personally found, and fixed, bugs in 
`Nullable`, for which the equivalent bug in `SumType` had already 
been fixed multiple releases ago ([PR 7581][1] and [PR 7582][2]).

[1]: https://github.com/dlang/phobos/pull/7851
[2]: https://github.com/dlang/phobos/pull/7852

Now, you might say, "who cares about those edge cases; just give 
me the simple implementation that works most of the time." But 
that's also how `Nullable` started out, and it turns out people 
cared enough about the edge cases to go in and add support for 
them. Since we already know that the demand exists, it seems 
prudent to have v3's `Option` support these edge cases from the 
beginning.


More information about the dip.ideas mailing list