Yeah, I get you 100%.

I wanted to be able to cache or not and have this transparent.

Memoization in its current form in Pharo is not like I would like to have
it.

As for the repeating block, I was asking to how you would avoid repeating
in the given code structure.

Phil


On Thu, Jan 26, 2017 at 12:34 AM, Igor Stasenko <[email protected]> wrote:

>
>
> On 26 January 2017 at 01:23, [email protected] <[email protected]>
> wrote:
>
>> Nothing new, that's the term.
>>
>> Memoization: After computing a solution to a subproblem, store it in a
>> table. Subsequent calls check the table to avoid redoing work.
>>
>> https://en.wikipedia.org/wiki/Memoization
>>
>> http://www.cas.mcmaster.ca/~deza/6_Dynamic++.pdf
>>
>> http://wiki.tcl.tk/10779
>>
>> I have been using the method for something else, caching costly REST
>> calls.
>>
>> getIssueCreateMeta
>> "Retrieves the metadata for all types of issues. Fields are expanded"
>> ^ self isMemoizingMeta
>> ifTrue: [ ([ :ignored | self getIssueCreateMetaWithExpandKeys: true ]
>> memoizedUsing: self cache ) value: #issueCreateMeta ]
>> ifFalse: [ self getIssueCreateMetaWithExpandKeys: true ]
>>
>>
>> using:
>>
>> cache
>> ^ cache ifNil: [cache := LRUCache new maximumWeight: self
>> defaultCacheWeight ]
>>
>> It is nice to see the cache hit rate etc in the inspector.
>>
>> BTW I am interested to see how one coul dwrite the code above without
>> repeating the block.
>> Also, :ignored is not used by the method but is the cache key.
>>
>>
> well, for not repeating, its easy, for instance in NativeBoost i just used
> expressions like:
>
> getIssueCreateMeta
> ^ self cacheAt: somekey ifAbsentPut: [ some data ]
>
> which are self-explanatory (i hope)
> where somekey could be 'self' or whatever seem fit.
>
> as for the caching wihoout key, why not just store result of first
> evaluation and then use it directly anywhere else? why need to wrap it
> with block??
>
> data := [some calculation ] value.
>
> self doSomethingWith: data.
> self doSomethingElseWith: data.
> self doSomethingElseElseWith: data.
>
>
> voila.. plain programming. Where does memoization need to be coined here?
> :)
>
> Phil
>>
>> On Wed, Jan 25, 2017 at 10:30 PM, Igor Stasenko <[email protected]>
>> wrote:
>>
>>> #once can be interpreted as 'evaluate it once',
>>>
>>> but i don't like the #memoized .. it sounds painful to my ears.
>>> It sounds like something stinking smeared across my face.. and i always
>>> got stuck,confused and lost as the meaning of it always
>>> escaping my mind, since it naturally defends itself from any unpleasant
>>> thoughts.
>>>
>>> IMHO, maybe #once is not the best wording for what it does , but
>>> #memoizing... yuck.. pardon me.
>>>
>>>  :)
>>>
>>>
>>> --
>>> Best regards,
>>> Igor Stasenko.
>>>
>>
>>
>
>
> --
> Best regards,
> Igor Stasenko.
>

Reply via email to