<br><br><div><span class="gmail_quote">On 11/4/07, <b class="gmail_sendername">Dennis Byrne</b> <<a href="mailto:dbyrne@thoughtworks.com">dbyrne@thoughtworks.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<br><font face="sans-serif" size="2">Hello Ulf,</font>
<br>
<br><font face="sans-serif" size="2">If you have a function that is 100%
predictable, couldn't there be some serious performance gains given that
the function is frequently passed the same message?  In other words,
why put a core to work calculating the result you gave last time someone
sent you a given message?  It would be better to use this function
to spawn a process that could use the process dictionary as a cache (one
that would never expire).  </font></blockquote><div><br><br>What you're basically asking for there is memoization.  It would be interesting to have memoization supported at the language level.  The compiler/interpreter isn't smart enough to know when memoization makes the most sense (depends on freq/range of inputs, computational complexity of function), but the programmer probably knows.  You would need a syntax for specifying function "attributes" to the compiler/interpreter.  Borrowing the ":attrib" syntax from Perl, it would look like:
<br><br>somecomplexfunc(X) :memoize -> ... complex body ...<br><br>I'm guessing that analysis tools could easily throw an error at you if you've put :memoize on a function which (directly or indirectly by calling other funcs) makes use of mutable state.
<br></div><br>-- Brandon<br></div><br>