It turns out it's quite hard to have @safe pure nothrow functions. Oh, and const.
Kagamin via Digitalmars-d
digitalmars-d at puremagic.com
Sat Sep 13 12:58:14 PDT 2014
On Saturday, 13 September 2014 at 18:36:53 UTC, Timon Gehr wrote:
> On 09/13/2014 07:48 PM, Kagamin wrote:
>> On Saturday, 13 September 2014 at 16:51:09 UTC, Timon Gehr
>> wrote:
>>> s.bar((int* p){ ++*p; });
>>
>> Huh? inout is for functions, which don't modify their
>> arguments.
>
> With Jakob's code working, this would not be warranted.
Huh? See rationale in
https://issues.dlang.org/show_bug.cgi?id=1961
> If inout should still guarantee non-modification in the future,
> then nested inout functions will need to introduce their own
> inout context (i.e. the inout qualifier of the nested function
> should be incompatible with the inout qualifier of the
> enclosing function.) I assume this is a major PITA to implement
> in DMD, and it also leads to growing pains that are hard to
> counter without enhancing the syntax, hence the current
> semantics.
I think, it can be more or less simple without syntax
enhancements, see the description of how it can be implemented.
> In any case, why is it important that inout functions are
> guaranteed not to change their arguments, even if they are
> mutable and the mutation is from within a delegate that was
> passed to such functions for this purpose?
The same way const is important: it makes code easier to reason
about.
More information about the Digitalmars-d
mailing list