DIP69 - Implement scope for escape proof references

via Digitalmars-d digitalmars-d at puremagic.com
Wed Dec 17 05:35:52 PST 2014


On Wednesday, 17 December 2014 at 12:29:21 UTC, Ola Fosheim 
Grøstad wrote:
> On Wednesday, 17 December 2014 at 11:13:02 UTC, Marc Schütz 
> wrote:
>> On Wednesday, 17 December 2014 at 07:48:52 UTC, bearophile 
>> wrote:
>>> Walter Bright:
>>>
>>>> I'm afraid I don't understand at all what you wrote.
>>>
>>> Perhaps reading about linear type systems could help:
>>>
>>> http://en.wikipedia.org/w/index.php?title=Substructural_type_system&redirect=no#Linear_type_systems
>>
>> But note that we want a "relaxed" linear type system. In 
>> general, we are fine with multiple aliases, although there are
>
> Pointer aliasing is an optimization killer, which is why C99 
> added the «restrict» keyword. I think in most cases the use of 
> stack allocated objects tend to be alias-free, so it is 
> important that this knowledge is retained so that the compiler 
> can make use of it.
>
> http://en.wikipedia.org/wiki/Pointer_aliasing

I know, this is one of those applications. The one I was thinking 
of is const-borrowing (useful to prevent iterator invalidation 
and a bunch of other things).

I think that enforcing alias-freeness by default (the way a 
strict linear type system requires) doesn't fit too well into the 
existing language. Some way of signalling this to the compiler 
will therefore be required. It might be as simple as C's 
`restrict` keyword (but it needs to be enforced!), or better yet, 
an `unrestrict` keyword. Parameters would be alias-free by 
default unless explicitly specified otherwise. Local aliases 
(inside one function) are however ok, as long as not more than 
one is passed to another function at the same time.


More information about the Digitalmars-d mailing list