[squeak-dev] The Trunk: Kernel-ul.709.mcz

Frank Shearar frank.shearar at gmail.com
Tue Sep 4 14:17:45 UTC 2012


On 4 September 2012 14:37, Levente Uzonyi <leves at elte.hu> wrote:
> On Tue, 4 Sep 2012, Frank Shearar wrote:
>
>> On 4 September 2012 00:06,  <commits at source.squeak.org> wrote:
>>>
>>> Levente Uzonyi uploaded a new version of Kernel to project The Trunk:
>>> Item was added:
>>> + ----- Method: Process>>environmentAt:ifAbsentPut: (in category 'process
>>> specific') -----
>>> + environmentAt: key ifAbsentPut: aBlock
>>> +
>>> +       ^(env ifNil: [ env := Dictionary new ]) at: key ifAbsentPut:
>>> aBlock.!
>>
>>
>> Given that Process >> #environmentAt:put: says "^ (env ifNil: [ env :=
>> Dictionary new ]) at: key put: value" wouldn't it be better to defer
>> the dictionary creation to it, or pull the two initialisation places
>> into one, separate, place?
>
>
> There are three things to consider:
> - do we want to expose the dictionary itself?
> - performance
> - single initialization point
>
> I picked the implementation with better performance and didn't want to
> expose the dictionary. We can also have a single initialization point but
> the code looks a bit unusual (at least to me):
>
> Process >> #ensureEnvironment
>
>
>         env ifNil: [ env := Dictionary new ]
>
> Process >> #environmentAt: key put: value
>
>         env ifNil: [ self ensureEnvironment ].
>         ^env at: key put: value
>
> Process >> #environmentAt: key ifAbsentPut: aBlock
>
>         env ifNil: [ self ensureEnvironment ].
>         ^env at: key ifAbsentPut: aBlock
>
> I can push a new version if you like this implementation more.

I suppose using a method that does the initialisation's too much of a
hit? Having a #environment that said "^ env ifNil: []" would be too
expensive?

frank

> Levente
>
>
>>
>> frank
>>
>>> Item was added:
>>> + ----- Method: ProtoObject>>pointsOnlyWeaklyTo: (in category 'tracing')
>>> -----
>>> + pointsOnlyWeaklyTo: anObject
>>> +       "Assume, we already know that receiver points to an object,
>>> answer true if receiver points only weakly to it."
>>> +
>>> +       self class isWeak ifFalse: [ ^false ].
>>> +       1 to: self class instSize do: [ :i |
>>> +               (self instVarAt: i) == anObject ifTrue: [ ^false ] ].
>>> +       ^true!
>>>
>>>
>>
>>
>


More information about the Squeak-dev mailing list