Persistent list

deadalnix via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 16 17:21:49 PST 2015


On Tuesday, 17 November 2015 at 00:30:39 UTC, Steven 
Schveighoffer wrote:
> On 11/16/15 6:56 PM, deadalnix wrote:
>> On Monday, 16 November 2015 at 22:30:55 UTC, Andrei 
>> Alexandrescu wrote:
>>> On 11/16/2015 05:02 PM, Jonathan M Davis wrote:
>>>> It's just that you use inout instead of const. How is that 
>>>> worse?
>>>
>>> The short answer is my perception is inout is too complicated 
>>> for what
>>> it does. -- Andrei
>>
>> I'm happy to read this. inout has the wrong cost/complexity 
>> ratio. It
>> doesn't solve the problem generally (one want to return type 
>> depending
>> on argument qualifier in general, not only for type 
>> qualifiers) while
>> having a high complexity.
>>
>
> The problem it solves is to provide a mechanism that allows one 
> to safely apply the same qualifiers to the return type, but 
> have the inputs be constant *throughout the function*.
>
> A templated function doesn't do this, you can have conditional 
> code, or unchecked method calls that can modify the data when 
> possible.
>
> Of course, if this isn't important, then the template solution 
> is usable. My take is that whenever you use inout is when you 
> would normally use const, but const doesn't allow what you 
> need. If your function doesn't need const inside the function, 
> then you shouldn't use inout.
>
> To me, it feels like inout is simple, but the implementation 
> has warts that make it seem inconsistent. There is also the 
> issue that nested inout is super-confusing, because now you 
> have layers of inout, each layer meaning possibly something 
> different. If we could somehow fix the nested part (and allow 
> types with inout members inside there), I think inout would be 
> less intimidating.
>
> -Steve

Here is, IMO, the point you are missing.

There many qualifier you'd like to have depend on other 
qualifiers. For instance :

void doSomeThingAndCallBack(maybe_pure void function() callback) 
pure_if_maybe_pure_argument_is_pure {
     callback();
}

You'll note that this is the same problem as inout solves. Thing 
is inout is complex, but only solve a small subset of the problem.

Thus, the power/complexity ratio is not good.

Also, yes, the implementation is B0rken :) Still it has gotten 
much better over time (or I learned the hard way to stay into the 
patterns that works ?).



More information about the Digitalmars-d mailing list