DIP 1003: remove `body` as a keyword

Timon Gehr via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Tue Nov 22 14:37:03 PST 2016


On 22.11.2016 20:05, Meta wrote:
> On Tuesday, 22 November 2016 at 15:11:04 UTC, Sönke Ludwig wrote:
>> Am 21.11.2016 um 22:19 schrieb Timon Gehr:
>>> 3 is ambiguous.
>>
>> Can you give an example?
>
> I'm curious as well. I considered that option 3 might be ambiguous but I
> managed to convince myself that it wouldn't be. I'm guessing you're
> referring to the fact that:
>
> {
>     //function body
> }
>
> Is a delegate literal, which could conceivably conflict with Option 3's
> syntax?
>
> void fun(ref int n)
> in { assert(n > 0); }
> out { assert(n > 0); }
> { //Is this a syntax error or an immediately executed delegate literal?
>     n += 1;
> }()


Function declarations don't necessarily have a body, but they might have 
contracts. (This is currently not allowed for technical reasons, but it 
should/will be.) But this is a rather minor point (usually you don't 
want to have contracts without implementation in a context where 
something starting with '{' is allowed).

The more important point is that there is no precedent where {...}{...} 
are two components of the same entity, it looks ugly even with the 
space-wasting convention where '{' is put on its own line. Not all 
contracts are one-liners like in your example above (which looks almost 
tolerable).


More information about the Digitalmars-d-announce mailing list