> On Oct 20, 2016, at 10:11 AM, Andrew Trick <atr...@apple.com> wrote:
> 
> 
>> On Oct 20, 2016, at 8:41 AM, Erik Eckstein <eeckst...@apple.com 
>> <mailto:eeckst...@apple.com>> wrote:
>> 
>>> To clarify: I proposed an alternate approach in which the @sil_cow 
>>> reference is only mutable during the Array’s @inout scope—to be 
>>> automatically enforced by the compiler once @inout scopes are enforced. But 
>>> the text in question is not referring to that approach, so your comments 
>>> are on target.
>> 
>> After thinking about Joe’s suggestion (having the cow attribute on the class 
>> type and make a reference to that type move-only), I’m more inclined to go 
>> with the isUnique builtin. If such a reference can only be returned by 
>> isUnique, it is really guaranteed that only a uniquely referenced buffer can 
>> be mutated. With the inout approach, the programmer is not forced to make 
>> the uniqueness check before modifying the buffer.
> 
> 
> In my mind, relying on a move-only reference type is exactly what I was 
> advocating for, but relies on a language feature rather than a “special” 
> compiler verification.

Well, I think we are not blocked on this. We could just add a mandatory pass to 
check that there are no move-only violations. In the future a language feature 
might do this in a more elegant way in the type checker or whatever. But for 
now I believe we don’t need more than the attributes on the class type and the 
COW reference field.

> This all still needs to work with an ‘inout’ Array. The compiler will 
> effectively be doing the same verification that I was proposing but as a side 
> effect of move-only semantics (type system support makes it much easier). The 
> isUnique builtin would just be a mechanism to get the mutable type, and the 
> endUnique builtin is the mechanism to move the type back. As Dave pointed 
> out, we could provide additional mechanisms for mutation that don’t depend on 
> uniqueness. But the SIL optimizer doesn’t need to be explicitly taught about 
> any of those builtin mechanisms for correctness. More importantly, the user 
> is no longer responsible for some easy-to-violate, unverified property of the 
> data type as a whole.

I think we are more or less on the same page. All I’m saying is that the 
mutable reference can only be obtained by the isUnique/is_unique 
builtin/instruction (or by creating a new buffer).

> 
> -Andy

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to