Hi.
сб, 28 апр. 2018 г., 1:26 Richard Sargent <
richard.sarg...@gemtalksystems.com>:

> On Fri, Apr 27, 2018 at 3:58 PM, Esteban A. Maringolo <
> emaring...@gmail.com> wrote:
>
>> oh, you were talking about how te VM views the object,
>> I was thinking in terms of how the compiler sees the text.
>>
>> So I'm talking about literals "syntax".
>>
>> Thanks anyway for the "trick" :)
>>
>
> Another common technique is a "once block". Teach Block how to evaluate
> itself once and to use its cached result the next time.
>

We have similar mechanizm in Pharo. Look at
http://dionisiydk.blogspot.fr/2016/07/magic-with-pharo-reflectivity.html


> It's not as fast as a literal, but it is a pretty effective way to have a
> clean implementation with as complex code as one could wish.
> Clear the cache when saving the image or at image start up or ... whenever
> seems good (such as when you change the implementation of what was cached.
>
> e.g.
> [Dictionary new
> at: #a put: self something;
> at: #b put: self somethingElse;
> yourself]
> once
>
>
>
>>
>> On 27/04/2018 16:34, Clément Bera wrote:
>> > The guy who asked the question said: "...when you want to shorten some
>> > object initialization"
>> >
>> > Using ClassVariable is an alternative way to shorten object
>> > initialization, reading a ClassVariable is almost the same performance
>> > as reading a literal, so that looked like a good alternative to me. Both
>> > the ClassVariable and the literal have the same issues (same object so
>> > if you mutate it you have to deal with it).
>> >
>> > But yes, it's not a new literal.
>> >
>> > For new literals, you can extend the compiler or hard patch thing:
>> >
>> > MyClass>>foo
>> > ^ #bar
>> >
>> > (MyClass>>#foo) literalAt: ((MyClass>>#foo) literals indexOf: #bar) put:
>> > Set new.
>> >
>> > MyClass new foo
>> >
>> >>>> a Set ()
>> >
>> > Obviously it depends what you mean by literal, the latter code uses the
>> > literal bytecode instruction, which does not make the pushed object a
>> > literal object...
>>
>>
>> --
>> Esteban A. Maringolo
>>
>>
>

Reply via email to