<div dir="ltr"><div>Be warned that if you go down the path of having Swift/T file variables based on changing file-system files, then the language doesn't really guarantee any particular behaviour: the behaviour may be surprising.  You might be able to get it to do what you want for now: as Justin mentioned, there isn't runtime caching of files at the moment (this of course may change in future).  Even in current versions, the optimizer will make the assumption that file contents don't change.  I.e. that files are single-assignment.<br>

</div><div><br>Justin's specific example works in current versions of Swift/T, but I won't guarantee that it will work in future versions as the optimizer gets smarter.  There are also subtle changes you can make to the code that will make it cache the results of compute().  This is because, even though it doesn't cache things at runtime, compiler optimizations will assume that the contents of files don't change.  In general, the Swift model has to assume that file variables are unchanging, in part because its declarative, but also because we don't really have a strong notion of sequencing or time, so it's not really possible to provide any sort of reasonable semantics to a programmer for mutating files, especially when performance is a concern.<br>
<br></div><div>I spoke to Justin about this off-list and it sounds like he has a workaround in mind that involves having a sequence number argument to compute() that should be more robust.  I did want to send this reply to this list so that others know that "here be dragons" when it comes to dealing with mutating files in Swift/T as well as /K. <br>
</div><div>
<br></div><div>- Tim<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Apr 22, 2013 at 1:40 PM, Justin M Wozniak <span dir="ltr"><<a href="mailto:wozniak@mcs.anl.gov" target="_blank">wozniak@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Normally, Swift variables are write-once.  Swift assumes the contents of<br>
a file are constant and is allowed to cache.<br>
<br>
However, you can do this in Swift/T.  Swift/T does not stage files, so<br>
there is no cache, and there are new constructs for handling external<br>
data dependencies.<br>
<br>
The following script launches compute() every 10 seconds if data.txt has<br>
changed.  Touch done.txt to exit.<br>
<br>
import io;<br>
import files;<br>
import sys;<br>
<br>
app compute(file f) {<br>
   "/bin/echo" "compute on:" f;<br>
}<br>
<br>
(int o) check_done(int i) {<br>
   i =><br>
   if (file_exists("done.txt")) { o = 1; }<br>
   else                         { o = 0; }<br>
}<br>
<br>
global const int interval = 10;<br>
<br>
main {<br>
   int i, done;<br>
   for (i = 0, done = 0; done == 0; i = next_i, done = check_done(i)) {<br>
     int next_i;<br>
     i => {<br>
       if (file_mtime("data.txt") > clock_seconds()-interval) {<br>
         compute(input_file("data.txt"));<br>
       }<br>
       sleep(itof(interval)) => next_i = 1;<br>
<div class="HOEnZb"><div class="h5">     }<br>
   }<br>
}<br>
<br>
<br>
On 04/21/2013 12:26 AM, Ketan Maheshwari wrote:<br>
> Hi,<br>
><br>
> I am trying to mimic a scenario where an external process is streaming<br>
> data into a file which is being captured at same or lesser frequency<br>
> by updating a file periodically which is then cat'ed by Swift into an<br>
> output file.<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Justin M Wozniak<br>
<br>
_______________________________________________<br>
Swift-devel mailing list<br>
<a href="mailto:Swift-devel@ci.uchicago.edu">Swift-devel@ci.uchicago.edu</a><br>
<a href="https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel" target="_blank">https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel</a><br>
</font></span></blockquote></div><br></div>