rikki cattermole rikki at cattermole.co.nz
Thu Oct 17 03:46:23 UTC 2019

On 17/10/2019 4:32 PM, Jesse Phillips wrote:
> On Thursday, 17 October 2019 at 00:46:12 UTC, rikki cattermole wrote:
>> I.e.
>> signature InputRange(@named ElementType = 
>> ElementTypeCompat!(typeof(this)) { ... }
>> Not to mention it forces what amounts to idiomatic D into a second 
>> class position in many use cases. Not preferable IMO.
> auto foo(R, E = ElementType!R)() if(implements!(InputRange!E, R))
> That seems pretty idiomatic D.

And that's the problem, for what is very common, it is absolutely 
horrible code.

> Now as you said, it doesn't improve the error message. But what if the 
> language changed so it could?

That would require flow analysis and it won't give good names to 
different aspects.

We have done research into template constraints and to improve the error 
messages there. But aggregate checks like isInputRange and with that 
implements, the compiler can't understand it even with flow analysis sadly.

Right now there is no way to communicate to the compiler the human 
aspects of a concept. Sure we can do the technical, but that only gets 
us so far (which we have been doing).

This is what I am arguing for, a way to communicate to the compiler the 
human aspects of a concept. The behaviors and properties it must exhibit 
to match our mental model, not the compilers model.

More information about the Digitalmars-d mailing list