DIP 1003 Formal Review

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Tue May 16 12:48:07 PDT 2017


On 16.05.2017 20:57, H. S. Teoh via Digitalmars-d wrote:
> On Tue, May 16, 2017 at 08:43:01PM +0200, Timon Gehr via Digitalmars-d wrote:
>> On 16.05.2017 20:06, Andrei Alexandrescu wrote:
>>> On 05/16/2017 01:59 PM, Random D user wrote:
>>>>
>>>> int foo()
>>>> in
>>>> {
>>>> }
>>>> out
>>>> {
>>>> }
>>>> do
>>>> {
>>>>   bar();
>>>> }
>>>
>>> Can't deny I like that. -- Andrei
>>
>> Beats options 2 and 3.
>
> To me, it's actually worse, because now you have a visual conflation
> with do-loops.
>

It's worse than option 1, but not worse than options 2 and 3. I prefer a 
visual conflation with do loops over a visual conflation with any of the 
constructs having 'function' in it, and I'm saying no to this:

...
{

}{

}

> Overall, what I don't like about contract syntax is that it is so
> unbearably verbose.

It's quite verbose, but certainly not unbearably so.

> It's not just the in and out blocks and the (IMO
> redundant)  marking of the function body;

There are many redundant elements in the D grammar. It's not a bad thing 
per se.

> it's also the repeated
> 'assert's that occur in the in and out blocks.
>
> 	int foo(T, U)(T t, U u)
> 	if (sigContraints!T && sigConstraints!U)
> 	in
> 	{
> 		assert(t > 0 && u < 10);
> 	}
> 	out(val)
> 	{
> 		assert(val > 1 && val < 5);
> 	}
> 	body
> 	{
> 		// function body here
> 	}
>
> I understand this DIP is only to address the `body` part of this ugly
> verbosity,

Actually, the goal of the DIP is to make 'body' not a keyword. Nothing more.

> but imagine how much better it would be if we could write
> something like this instead:
>
> 	int foo(T, U)(T t, U u)
> 	if (sigConstraints!T && sigConstraints!U)
> 	in (t > 0 && u < 10)
> 	out(foo > 1 && foo < 5 )
> 	{
> 		// function body here
> 	}
>
> This is just tentative example syntax, of course.  We can argue over its
> fine points later, but the point is that the current syntax is far too
> verbose, and can easily be reduced to half the number of lines.  Merely
> changing `body` to `do` does nothing to address this, and seems to me to
> be just more useless churn, replacing one bit of verbosity with another
> bit of verbosity.

It's a good option to have, but D is not an expression-based language, 
so this can be painful, as you cannot declare intermediate variables nor 
use statements.

> (Not to mention the IMO very ugly syntax clash with
> do-loops, which will reduce code readability even more.)
>...

Do you think your new syntax is significantly more readable? (Just curious.)


More information about the Digitalmars-d mailing list