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

Moritz Maxeiner via Digitalmars-d digitalmars-d at puremagic.com
Thu Jun 22 03:59:18 PDT 2017


On Thursday, 22 June 2017 at 05:46:06 UTC, MysticZach wrote:
> On Thursday, 22 June 2017 at 00:27:38 UTC, Timon Gehr wrote:
>
> But it still has a sticking point, which I want to resolve, 
> namely that it elevates the existing `assert` functionality 
> beyond the current requirement that one must explicitly write 
> `assert`, going so far as to imply it in the grammar itself.

What happens with H.S. Teoh's proposal is not that `assert` is 
implied by the grammar, but that a function can *finally* specify 
its contracts *independent* of how those contracts are actually 
implemented. That's a good thing, because
a) it allows the contract implementation for that new syntax to 
be swapped out transparently (no changes need to be made by the 
programmer to get a better contract implementation)
b) it makes contracts more compact (and thus easier to read) 
without losing relevant information (contract implementation is 
not something you should have to deal with for every single 
library independently)

> But because of many complaints about the limitations of the 
> assert mechanism as it currently exists, I would hesitate to 
> install it into the grammar as the "One Chosen Way" to bail out 
> of contracts with the new syntax.

Again, that's not what H.S. Teoh's proposal would do. All it does 
is install an *implementation agnostic*, *abtract* way to specify 
contracts into the grammar. Whether that is lowered to assert, or 
anything else is an implementation detail and it certainly isn't 
fixed to asserts.
Simply document the behaviour one can expect when using it in 
debug and release mode and leave the implementation details 
(assert or something else) unspecified.

>
> However, if the functioning of the `assert` mechanism were more 
> customizable, then it would be easier to entrust it, in my 
> opinion, with the "sacred responsibility" of being installed 
> into the grammar. H.S. Teoh's proposal would then stand on a 
> firmer foundation, and my initial proposed syntax would become 
> the inferior optionl. At that point, this DIP could be 
> rewritten to advocate his syntax instead.

A more customizable assert would not change anything for the DIP 
imo, since I do not want implementation details to be part of 
contract writing.

>
> The intent of my proposal was to make a small improvement. The 
> cost (or so I thought, and may still believe) was also small. 
> Small improvements are still improvements. DIP1003 is an 
> example of this.

DIP1003 did not introduce an entirely new system, it merely 
slightly changed an existing sytem.
DIP1009 *does* introduce several new syntax forms, i.e. adding a 
whole new system, which means it *also* introduces the 
responsibility of maintaining backwards compatibility when 
someone tries to improve contracts again (and then we would have 
three systems to specify contracts).
Both DIP1003 and DIP1009 need to have a positive benefit/cost 
balance, which is easy for DIP1003 (since the costs are 
insignificant), but not for DIP1009: The costs are high down the 
line and it needs to justify them. The only way I can see those 
costs being justified is by separating constract specification 
from contract implementation and that requires syntax similar to 
H.S. Teoh's proposal.


More information about the Digitalmars-d mailing list