[Swift-devel] continued questions on iterate

Michael Wilde wilde at mcs.anl.gov
Sun Mar 1 22:53:39 CST 2009


This program:

string s[];
s[0]="hi ";
iterate i {
   s[i+1] = @strcat(s[i],"hi ");
   trace(s[i]);
} until(i==5);

Gives:

com$ swift it4.swift
Could not start execution.
         variable s has multiple writers.

--
Its similar to the tutorial example:

counterfile a[]  <simple_mapper;prefix="foldout">;

a[0] = echo("793578934574893");

iterate v {
   a[v+1] = countstep(a[v]);
  print("extract int value ", at extractint(a[v+1]));
} until (@extractint(a[v+1]) <= 1);

--

...which I reported earlier as having problems (I think in addition to 
the one above?)

This is using the latest swift, rev 2631, and latest cog.

I thought I had issues like this licked, but then updated the code to 
get closer to what the user needs.

In this example, I dont see any violation of single-assignment, but 
apparently swift does.

The full example that the test case above is for is at:
www.ci.uchicago.edu/~wilde/oops8.swift, which encounters the same 
multiple-writer problem.

I start with an initial "secondary structure" string of all A's, same 
length as the protein sequence. After each folding round, a new 
structure is derived for analysis and used as the starting point for the 
next round. This has the same data access pattern as array s[] above:

foreach p, pn in protein {
   OOPSOut result[][] <simple_mapper; prefix=@strcat("output/",p,"/")>;
   SecSeq secseq[] <simple_mapper; 
prefix=@strcat("seqseq/",p,"/"),suffix=".secseq">;
   OOPSIn oopsin <ext; exec="OOPSIn.map.sh", i="input", p=protein>;
   secseq[0] = sedfasta(oopsin.fasta, ["-e","s/./A/g"]);
   boolean converged[];
   iterate i {
     SecSeq s;
     result[i] = doRound(p,oopsin,secseq[i],i);
     (converged[i],s) = analyzeResult(result[i], p, i, secseq[i]);
     secseq[i+1] = s;
   } until (converged[i] || (i==3));
}

In this case, I get the same message for array secseq (varable has 
multiple writers).

I





More information about the Swift-devel mailing list