DIP1000: Scoped Pointers (Discussion)

sclytrack via Digitalmars-d digitalmars-d at puremagic.com
Thu Aug 11 14:28:57 PDT 2016


On Wednesday, 10 August 2016 at 20:36:38 UTC, Dicebot wrote:
> http://forum.dlang.org/post/pqsiqmkxenrwxoruzaml@forum.dlang.org
>
> The first DIP has just landed into the new queue. It is a 
> proposal from language authors and thus it bypasses usual 
> nitpicking process and proceeds straight to requesting 
> community (your!) feedback.
>
> Essentially, it is an attempt to solve reference lifetime 
> problem by extending implementation of `scope` keyword.
>
> Proposal text: 
> https://github.com/dlang/DIPs/blob/master/DIPs/DIP1000.md
>
> Few notes:
>
> - Please submit pull requests to adjust the markdown document 
> if you want to propose any improvements (mentioning 
> @WalterBright and @andralex for confirmation).
> - The proposal refers to a number of other documents and it is 
> recommended to become familiar at least briefly with all of 
> them.
> - At this point the question I'd personally suggest to be 
> evaluated is "does this proposal enable enough useful 
> designs?". A good check would be to try taking some of your 
> projects and see if having DIP1000 approved and implemented 
> could improve them.


There is confusion between what lifetime and visibility in the 
DIP.
(Well, I am confused)

1) infinite lifetime null

int * p;

The lifetime(p) is infinite while the visibility(p) starts here.
It seems to be the lifetime of p is determined by the value 
assigned to it,
which in this case is null and the lifetime of lifetime(null) is 
infinite.


2) Fundamentals of scope.

This declares 4 scope rules as of 11 August of which the first 
rule is:

"A scope variable can only be initialized and assigned from 
values that have lifetimes longer than the variable's lifetime"


int global_var;
int* global_ptr;

void bar(scope int* input);

void fun1() {
     scope int* a = &global_var; // OK per rule 1, 
lifetime(&global_var) > lifetime(a)
     int b;
     a = &b; // Disallowed per rule 1, lifetime(&b) < lifetime(a)

Shouldn't the rule be:

"A scope variable can only be initialized and assigned from 
values that have lifetimes longer than the variable's VISIBILITY"

As in the case above. What is the lifetime(a) "scope int *a" when 
the &global_var
has not yet been assigned to it? It doesn't have a lifetime yet,
it gets the lifetime from &global_var.


Peter








More information about the Digitalmars-d mailing list