[Swift-devel] Standard Library Proposal/Discussion Page
    Mihael Hategan 
    hategan at mcs.anl.gov
       
    Thu Jan 22 12:35:43 CST 2015
    
    
  
n Thu, 2015-01-22 at 09:22 -0600, Tim Armstrong wrote:
>  If you reverse it though, then the data flow and implied serial control
> flow don't match.  This code should work according to my understanding of
> Swift's current semantics, but the implementation would have to infer that
> executing the iteration for v=1000 first didn't violate any dependencies
> arising from sequential control flow:
> 
> float a[];
> a[1000] = 10;
> 
> foreach v, k in a {
>   if (a[k] > 0.01) {
>     a[k - 1] = f(a[k]);
>   }
> }
There is no sequential control flow. It's a plain swift foreach. The
only addition is code to detect when the array can be closed, but
absolutely zero code in addition to standard swift in terms of ordering
things.
> 
> If you add in a versioned variable, then the code is definitely going to
> deadlock because the data dependencies and control dependencies go in
> opposite directions:
> 
> float a[];
> a[1000] = 10;
> versioned float x = 1;
> 
> foreach v, k in a {
>   if (a[k] > x) {
>     a[k - 1] = f(a[k]);
>     x += a[k];
>   }
> }
I see. The code would potentially be translated to something like this:
float a[];
a[1000] = 10;
float x[];
x[0] = 1;
foreach v, k in a { // implicit iteration counter z starting at 0
  if (a[k] > x) {
    a[k - 1] = f(a[k]);
    x[z + 1] = x[z] + a[k];
  }
}
There is no way to guarantee that given an iteration with (k, z) you
will have an iteration with (k - 1, z + 1) unless you can guarantee that
only one iteration will be running at a time (but that breaks if you
generate more than one elements of a[] in one iteration).
Got it! :)
Mihael
    
    
More information about the Swift-devel
mailing list