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