[squeak-dev] The Trunk: Kernel-cmm.1113.mcz
Levente Uzonyi
leves at caesar.elte.hu
Fri Sep 1 08:18:12 UTC 2017
Hi Chris,
On Thu, 31 Aug 2017, Chris Muller wrote:
> Hi Levente,
>
> #setPinned: is a private method that provides a physical kind of
> access to the object, whereas #pinned: is public, conforms to expected
> naming conventions and allows (proper) overriding. It provides a
> logical (abstract) kind of access to #setPinned: as do #pin and
> #unpin.
It doesn't matter if it's private or not, because that can be changed.
What I don't understand is the need for an additional wrapper method.
If you think #pinned: is needed, then it should replace #setPinned:.
>
> I'd recommend using #pin and #unpin if wherever possible, but there
> have been enough cases where various method pairs (i.e., #lock/unlock,
> #show/hide, #action/unaction, etc.) where it can't be known which one
> is needed until runtime.
I just can't imagine a real-world situation where you'd want to pin or
unpin an object based on a condition.
Levente
>
> - Chris
>
> On Thu, Aug 31, 2017 at 5:24 PM, Levente Uzonyi <leves at caesar.elte.hu> wrote:
>> On Thu, 31 Aug 2017, commits at source.squeak.org wrote:
>>
>>> Chris Muller uploaded a new version of Kernel to project The Trunk:
>>> http://source.squeak.org/trunk/Kernel-cmm.1113.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Kernel-cmm.1113
>>> Author: cmm
>>> Time: 31 August 2017, 1:55:06.158647 pm
>>> UUID: 05c89229-0279-4842-b0d0-dacb2713a4b6
>>> Ancestors: Kernel-tbn.1112
>>>
>>> Provide #pinned: so clients don't have to write duplicate code (e.g.,
>>> "myCondition ifTrue: [myObject pin] ifFalse: [myObject unpin]") while
>>> allowing frameworks to hook #pinned: if necessary (without overriding a
>>> primitive).
>>
>>
>> I'd like to see a use-case which justifies the existence of this method.
>> I also don't see why would you use #pinned: instead of #setPinned:.
>>
>> Levente
>>
>>
>>>
>>> =============== Diff against Kernel-tbn.1112 ===============
>>>
>>> Item was changed:
>>> ----- Method: Object>>pin (in category 'pinning') -----
>>> pin
>>> + "Ensure the receiver is pinned and answer whether it was pinned."
>>> + ^ self pinned: true!
>>> - "The VM's garbage collector routinely moves objects as it reclaims
>>> and compacts
>>> - memory. But it can also pin an object so that it will not be
>>> moved, which can make
>>> - it easier to pass objects out through the FFI. Objects are
>>> unpinnned when created.
>>> - This method ensures an object is pinned, and answers whether it
>>> was already pinned."
>>> - ^self setPinned: true!
>>>
>>> Item was added:
>>> + ----- Method: Object>>pinned: (in category 'pinning') -----
>>> + pinned: aBoolean
>>> + "The VM's garbage collector routinely moves objects as it reclaims
>>> and compacts memory. But it can also pin an object so that it will not be
>>> moved, which can make it easier to pass objects out through the FFI.
>>> Objects are unpinnned when created.
>>> + Answer whether the receiver was pinned."
>>> + ^ self setPinned: aBoolean!
>>>
>>> Item was changed:
>>> ----- Method: Object>>setPinned: (in category 'private') -----
>>> setPinned: aBoolean
>>> + "Primitive which pins or unpins the receiver and answers whether
>>> it was already pinned."
>>> - "The VM's garbage collector routinely moves objects as it reclaims
>>> and compacts
>>> - memory. But it can also pin an object so that it will not be
>>> moved, which can make
>>> - it easier to pass objects out through the FFI. Objects are
>>> unpinnned when created.
>>> - This primitive either pins or unpins an object, and answers if it
>>> was already pinned."
>>> <primitive: 184 error: ec>
>>> ^self primitiveFailed!
>>>
>>> Item was changed:
>>> ----- Method: Object>>unpin (in category 'pinning') -----
>>> unpin
>>> + "Ensure the receiver is unpinned and answer whether it was
>>> pinned."
>>> + ^ self pinned: false!
>>> - "The VM's garbage collector routinely moves objects as it reclaims
>>> and compacts
>>> - memory. But it can also pin an object so that it will not be
>>> moved, which can make
>>> - it easier to pass objects out through the FFI. Objects are
>>> unpinnned when created.
>>> - This method ensures an object is unpinned, and answers whether it
>>> was pinned."
>>> - ^self setPinned: false!
>>
>>
More information about the Squeak-dev
mailing list
|