Thank you for the clarification.

> On 8. Aug 2017, at 18:39, Guillaume Lessard <gless...@tffenterprises.com> 
> wrote:
> 
> 
>> On Aug 8, 2017, at 09:10, Martin R <martinr...@gmail.com> wrote:
>> 
>> In that example the tuple is a (stored) property of a class, not a global 
>> variable. And why does it crash for a global variable, but not for a local 
>> variable in a function?
> 
> In the case of a local variable in a function, the compiler can statically 
> prove that there is no simultaneous access, and using `swap` is allowed. With 
> a global variable, the compiler can’t statically prove exclusive access.
> (it seems silly with your simple example, but the system doesn’t try static 
> enforcement with global variables.)
> 
> Here’s another modification which traps at runtime:
> 
> ***
> import Dispatch
> 
> func foo()  {
>  var tuple = (1, 2)
> 
>  let q = DispatchQueue(label: "queue")
>  q.async { swap(&tuple.0, &tuple.1) }
>  q.sync {}
> 
>  print(tuple)
> }
> 
> foo()
> ***
> 
> Guillaume Lessard
> 

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

Reply via email to