On Sunday, 25 June 2017 at 12:10:02 UTC, Timon Gehr wrote:
On 25.06.2017 13:37, Andrei Alexandrescu wrote:
On 6/23/17 6:52 PM, jmh530 wrote:
On Friday, 23 June 2017 at 17:31:15 UTC, MysticZach wrote:

OutExpression:
  out ( ; AssertParameters )
  out ( Identifier ; AssertParameters )

Why not?

OutExpression:
   out ( AssertParameters )
   out ( Identifier ; AssertParameters )

The path of least resistance is to use existing language constructs, i.e.

out result => assert(result > 0)


Andrei
This would face quite some resistance, on the following grounds:

out(result){ assert(result > 0); } // exists

out result => assert(result > 0) // more of the same

out(result; result > 0) // better

out result => result > 0 // not much worse

out __result > 0 // even better (__result works at least since [0])

I suggested adding a shorter / better looking contextual keyword -
`result` - a while ago [1]:
---
out result > 0 // perhaps the best
---

And before that I proposed this:
---
// `Unqual` is not needed for `isNumeric` strictly speaking,
// it's used here only for illustration purposes.

T sqrt(T)(T n)
if Unqual!T U: isNumeric!U || is(U == BigInt)
in n >= 0
out (result) result * result == n
{
    //Implementation
}
---
(I think as a reply to you in the DIP1003 thread)


I'm wondering if `out result > 0` (or if not `out __result > 0`)
would be too much of a stretch for the language grammar.


[0]: https://github.com/dlang/dmd/commit/620acd53b63bfede6179a1b6a5c7d1b01a14ed0e#diff-1faebda3a5778a9d5b2dc0037a8f589bR8

[1]: https://github.com/dlang/DIPs/pull/66#discussion_r117613661

Reply via email to