[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