Blog Post: Beating std::visit Without Really Trying

Andrei Alexandrescu SeeWebsiteForEmail at
Sun Oct 6 00:52:38 UTC 2019

On 10/5/19 7:58 AM, Seb wrote:
> On Saturday, 5 October 2019 at 06:40:35 UTC, Arun Chandrasekaran wrote:
>> On Saturday, 5 October 2019 at 02:59:58 UTC, Paul Backus wrote:
>>> I was curious how C++17's std::variant compared to the options we 
>>> have in D, like Algebraic and SumType, so I did a simple comparison 
>>> of the generated assembly for each of them. You can read about it at 
>>> the link below. And as you can probably guess from the title, D comes 
>>> out ahead, in the end.
>>> This is my first attempt at sharing something like this, so any 
>>> comment or feedback is very much appreciated!
>> Good one. Any plans to push SumType as a replacement of Phobo's 
>> Algebraic?
> Phobos is essentially dead/frozen (feature-wise). Though if someone ever 
> manages to get v2 of the ground, SumType would be the obvious choice.

I think we'd do good to choose words with care. An extraordinary 
assertion, however odd and unjustified, may go by chance unchallenged 
and if repeated enough soon starts passing as the accepted truth. This 
is very damaging, regardless of how well it was intended initially, 
goodwill I have no doubt about. To set the record straight: Phobos is 
not dead and is not frozen feature-wise. It is and has always been open 
to adding new functionality, and of course to improve implementation of 
existing functionality.

Variant's design and implementation are very, very, very old. We're 
talking 15 years. It is literally the first generic design I've ever 
done in D, and at the time getting it (or anything nontrivial) to work 
was a large challenge. At that time only the most basic examples worked 
for any template-related feature. The code also predates most of the 
CTFE niceties we now take for granted, static foreach included. Not to 
mention, I'd be the first to say I engineered the thing poorly. A 
radical simplification is definitely possible and desirable.

> Anyhow, currently we would have to name it differently (e.g. dts - 
> Maybe the upcoming SAoC project will 
> change this and allow multiple versions of a library to co-exist in a 
> binary.

Adding it as a new facility is a possibility, but only if the challenges 
of keeping the existing interface are too large.

More information about the Digitalmars-d-announce mailing list