My Reference Safety System (DIP???)

Zach the Mystic via Digitalmars-d digitalmars-d at puremagic.com
Thu Feb 26 17:36:32 PST 2015


On Friday, 27 February 2015 at 00:44:21 UTC, deadalnix wrote:
> On Thursday, 26 February 2015 at 22:45:19 UTC, Zach the Mystic 
> wrote:
>> I'm starting to see what you mean. I guess it's only 
>> applicable to variables with double (or more) indirections 
>> (e.g. T**, T***, etc.), since only they can lose information 
>> with transitive scopes. Looks like we need a new rule: 
>> variables assigning to one of their double indirections cannot 
>> acquire a scope-depth greater than (or lifetime less than) 
>> their current one. Does that fix the problem?
>
> Cool. I think that can work (I'm not 100% convinced, but at 
> least something close to that should work). But that is 
> probably too limiting.
>
> Hence the proposed differentiation of lvalue and rvalues.

Yeah, wasn't completely clear. I meant to say:

Variables assigning to one of their double indirections cannot 
acquire a scope-depth greater than (or lifetime less than) their 
current longest-lived one. Also, bear in mind, a parameter could 
be an "lvalue":

void fun(T* a, T** b) {
   *b = a;
}

I guess its just better to use "source" and "targer" than lvalue 
and rvalue.

Also bear in mind that in the worst case scenario, any code can 
be made to work by putting it into the newly approved-of idiom: 
The @trusted Lambda! We want a safety mechanism conservative 
enough to catch all failures, accurate enough to avoid too many 
false positives (thus minimizing @trusted lambdas), easy enough 
to implement, and which doesn't tax compile time too heavily. The 
magic Four! I still have a few doubts (recursive inference, for 
example, which can probably be improved), but not too many.


More information about the Digitalmars-d mailing list