Rant after trying Rust a bit

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Fri Jul 24 23:10:08 PDT 2015


On Saturday, 25 July 2015 at 05:27:48 UTC, Walter Bright wrote:
> On 7/24/2015 11:50 AM, H. S. Teoh via Digitalmars-d wrote:
>> The only way to achieve this is to explicitly
>> negate every condition in all other overloads:
>
> Another way is to list everything you accept in the constraint, 
> and then separate out the various implementations in the 
> template body using static if.
>
> It's a lot easier making the documentation for that, too.

I've considered off and on arguing that a function like find 
should have a top level template that has the constraints that 
cover all of the overloads, and then either putting each of the 
individual functions with their own constraints internally or use 
separate static ifs within a single function (or some combination 
of the two). That way, you end up with a simple template 
constraint that the user sees rather than the huge mess that you 
get now - though if you still have individual functions within 
that outer template, then that doesn't really fix the overloading 
problem except insomuch as the common portion of their template 
constraints (which is then in the outer template's constraint) 
would then not have to be repeated.

However, when anyone has brought up anything like this, Andrei 
has argued against it, though I think that those arguments had to 
do primarily with the documentation, because the person 
suggesting the change was looking for simplified documentation, 
and Andrei thought that the ddoc generation should be smart 
enough to be able to combine things for you. So, maybe it 
wouldn't be that hard to convince him of what I'm suggesting, but 
I don't know. I haven't tried yet. It's just something that's 
occurred to me from time to time, and I've wondered if we should 
change how we go about things in a manner along those lines. It 
could help with the documentation and understanding the template 
constraint as well as help reduce the pain with the overloads. 
Andrei has definitely been against overloading via static if 
though whenever that suggestion has been made. I think that he 
thinks that if you do that, it's a failure of template 
constraints - though if you use an outer template and then 
overload the function internally, then you're still using 
template constraints rather than static if, and you get 
simplified template constraints anyway.

So, maybe we should look at something along those lines rather 
than proliferating the top-level function overloading like we're 
doing now.

- Jonathan M Davis


More information about the Digitalmars-d mailing list