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

Frank Shearar frank.shearar at gmail.com
Tue Sep 4 17:03:22 UTC 2012


On 4 September 2012 15:25, Levente Uzonyi <leves at elte.hu> wrote:
> 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.

Surely noone ever uses methods marked private!

frank

> 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