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