DIP10005: Dependency-Carrying Declarations is now available for community feedback

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Wed Dec 14 11:39:55 PST 2016


On 12/14/2016 02:04 PM, Meta wrote:
> On Wednesday, 14 December 2016 at 17:32:10 UTC, H. S. Teoh wrote:
>> What about:
>>
>>     /* Showing full declaration just for context */
>>     bool myFunc(R1, R2)(R1 r1, R2 r2)
>>     import {
>>         std.range : isInputRange,
>>         std.traits : isNum = isNumeric
>>     }
>>     if (isInputRange!R1 && isInputRange!R2 &&
>>         isNum!(ElementType!R1))
>>     in { assert(someCondition!R1); }
>>     out(result) { assert(result == expectedResult(...)); }
>>     body
>>     {
>>         ...
>>     }
>>
>>
>> T
>
> The fact that declarations like this WILL show up in Phobos or elsewhere
> if this proposal is implemented triggers my gag reflex. There's got to
> be a better way than tacking yet another pre-ambulatory clause to the
> function body.

What I see here is a function definition that has:

* parameters and return types
* dependencies on other modules
* the static condition under which arguments are acceptable
* the dynamic condition under which arguments are acceptable
* the guarantee made upon successful completion
* the implementation

... each of which is:

* easily distinguishable
* opt-in


Andrei



More information about the Digitalmars-d mailing list