DIP69 - Implement scope for escape proof references

deadalnix via Digitalmars-d digitalmars-d at puremagic.com
Mon Dec 8 15:14:56 PST 2014


On Monday, 8 December 2014 at 16:25:22 UTC, Dicebot wrote:
> This isn't the same as it does not propagate scope but just 
> restricts return value. Difference is that it cannot be 
> chained. Let's consider practical example based on Phobos:
>
> there was an issue with byLine range that it has reused same 
> buffer internally which sometimes caught users off guard when 
> trying to save slice. It is a natural fit for `scope` - make it 
> return `scope string` instead to ensure that no slices get 
> stored.
>

That would only ensure that slice do not outline the range.

> Two issues immediately pop up:
>
> 1) scope is not transitive thus it doesn't work at all - you 
> still can store slice of `scope string` as only actual 
> ptr+length struct is protected.
>

Yes, that is my whole point whith the scope flag in expression.
Without it, the proposal need hacks to work (&(*e)) and is too
restrictive to be useful.

> While there is no argument that C++ ref is screwed, it is 
> rather hard to say if this is inherent consequence of ref being 
> a type qualifier or just C++ being C++. I mean how many C++ 
> type system features in general are understood my more than a 
> handful of people on the planet? For me `ref` is essentially 
> just a different flavor of `*` - and if the latter can be part 
> of type, I see no reasons why former can't

No, a type constructor is not the right tool. This about it.

scope(int)[] do not make any sense as the slice cannot outlive
its content safely.

You need to have a flag on expression and declarations to make
this work.


More information about the Digitalmars-d mailing list