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

Levente Uzonyi leves at elte.hu
Tue Sep 4 14:25:38 UTC 2012


On Tue, 4 Sep 2012, Frank Shearar wrote:

> 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?

No, but it would expose the environment dictionary and would make all 
these methods pointless.


Levente

>
> 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