DIP 1009--Improve Contract Usability--Preliminary Review Round 1

Moritz Maxeiner via Digitalmars-d digitalmars-d at puremagic.com
Sun Jun 25 11:19:48 PDT 2017


On Sunday, 25 June 2017 at 17:59:02 UTC, Petar Kirov [ZombineDev] 
wrote:
> So what about something like this:
>
> T sqrt(T)(T n)
> where U is Unqual!T: isNumeric!U || is(U == BigInt)
> require: n >= 0
> ensure result: result * result == n
> {
>     //Implementation
> }
>
> Assuming that in this particular case there's no need for 
> custom error
> messages, which are still unsupported for template constraints 
> presently.
>
> (I'm aware that this has low chances in getting into the 
> language,
> I'm just interested in hearing your unbiased opinion as if it 
> was
> targeted at a hypothetical D3.)

While I have no issues with changing keywords in the function 
signature like that [1], removing the parenthesis delimiters 
makes parsing more complex (and thus slower) for both the human 
reader, as well as the compiler; for me personally it's the 
difference between looking at the signature and grasping the 
meaning instantly and having to verify where the template 
constraint actually ends.

[1] Strictly speaking require/ensure *are* the words matching the 
original DbC definition, after all


More information about the Digitalmars-d mailing list