On Thursday, 16 February 2012 at 21:05:19 UTC, Don wrote:
On 16.02.2012 20:10, H. S. Teoh wrote:
On Thu, Feb 16, 2012 at 01:53:46PM -0500, Jonathan M Davis wrote:
On Thursday, February 16, 2012 09:38:54 H. S. Teoh wrote:
This is a non-problem once the compiler implements memoization as an optimisation. Which it can't until we go ahead with this change. This is the direction that we *should* be going anyway, so why not
do it now rather than later?

I would point out that there are no plans to implement any kind of memoization in the language or compiler. Also, while it can help performance, it can also _harm_ performance. So having it controlled by the compiler is not necessarily a great idea anyway. It's really the sort of thing that should involve profiling on the part of the
programmer.
[...]

Then I agree with bearophile that we should have @memoize (or its negation), so that the programmer can indicate to the compiler that the
function should be memoized (or not).

Unfortunately, that's too simple. Although the compiler can memoize a few simple cases, it can't do it efficiently in general.

Sometimes it makes sense to store the memoized result in the object, sometimes separately. Sometimes only certain cases should be memoized -- the question of whether to memoize or not may depend on the value of the object (you only want to memoize the complicated cases).
It's too hard for the poor compiler.

I'll add to Don's comment a question: Compile-time memoization means the decision is static. Shouldn't the decision tough be made instead at run-time to account for the run-time characteristics of the process? E.g. memoize the frequent case. This sounds to me more in the realm of a JVM optimization rather than a compiler one.

Reply via email to