DIP 1009--Improve Contract Usability--Preliminary Review Round 1
Moritz Maxeiner via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jun 23 13:49:35 PDT 2017
On Friday, 23 June 2017 at 20:27:58 UTC, MysticZach wrote:
> On Friday, 23 June 2017 at 20:03:17 UTC, Moritz Maxeiner wrote:
>>>> No. Asserts are the meat of in/out contracts, these are
>>>> actually asserts. Anything you do to the assert grammar
>>>> should be done here as well.
>>>
>>> I agree. I can understand wanting to pass in/out violations
>>> to a different handler behind the scenes. But I don't see why
>>> that should affect the grammar.
>>
>> Because coupling the new contract syntax and assert syntax in
>> the grammar means that changing assert syntax will affect the
>> new contract syntax (when it shouldn't, as they are
>> semantically decoupled).
>
> By default, I assume they will not be semantically decoupled,
> that they will all just use regular asserts. I think the
> consistency the assert grammar will bring is worth a whole lot,
> as once it is understood in one place, it is understood
> everywhere. That's why it's so easy for Timon to implement, for
> example, because the assert logic is already available. So, for
> me to be convinced that the the grammar for in/out contracts
> should be different, I'd have to see a clear and compelling use
> case. What exactly did you have in mind?
Normal usage of the new syntax? If asserts later on get a
(possibly breaking) syntax overhaul that will affect (and forward
breakage to) the contract syntax, as well, if it uses the same
compiler infrastructure.
> My naive assumption is that any improvement in the in/out
> grammar would also apply to asserts, and vice versa.
Why should it? Contracts are not asserts or vice versa.
> I would go further and say that having consistency among all
> types of contracts is valuable enough to be worth sacrificing a
> considerable amount of flexibility in the grammar, even if a
> compelling use case were presented.
I'm not sure what you're getting at here. With the proposal Timon
implemented we have the following:
- The older, flexible contract syntax, which essentially only
provides contract "shells" that you have to fill with your own
preferred contract implementation (for which asserts are
typically used)
- the newer, decoupled contract syntax that separates contract
specification and implementation from each other; Timon's
implementation uses asserts as the internal contract
implementation AFAIK
- Asserts as a D builtin for condition checking (*not* a type of
contract)
In any case, it's merely a concern about future work load. If
asserts receive an overhaul, whoever does that will have to
(potentially) deal with it, I guess.
More information about the Digitalmars-d
mailing list