Object.opEquals, opCmp, toHash
foobar
foo at bar.com
Thu Feb 16 14:13:44 PST 2012
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.
More information about the Digitalmars-d
mailing list