sumtype 0.3.0

Paul Backus snarwin at gmail.com
Wed May 9 14:56:20 UTC 2018


On Wednesday, 9 May 2018 at 13:33:44 UTC, jmh530 wrote:
> On Sunday, 6 May 2018 at 19:18:02 UTC, Paul Backus wrote:
>> [snip]
>>   - Zero runtime overhead compared to hand-written C
>
> Just to clarify, would the run-time performance of the length 
> function in the example be equivalent to if it had been 
> specialized for the Rectangular types (e.g. double 
> length(Rectacular r) { ... })? It looks like the match is using 
> compile-time functionality to choose the right function to 
> call, but I wanted to be sure.

What length actually does, after all the compile-time stuff is 
expanded, is essentially this:

switch(v.tag)
{
     case 0: return sqrt(v.value!Rectangular.x**2 + 
v.value!Rectangular.y**2);
     case 1: return v.value!Polar.r;
}

It's the same thing you'd get if you were implementing a tagged 
union by hand in C.

It's not exactly the same as a function specialized for 
Rectangular, because the entire point of a sum type or tagged 
union is to allow runtime dispatch based on the tag. However, the 
process of choosing which function goes with which tag takes 
place entirely at compile time.


More information about the Digitalmars-d-announce mailing list