Stateful traits inspired me to reread the flexible object layout paper and I came up with a few questions about slots: - What is the plan for tool support? For example, it seems that to make slots discoverable like any other class or message, "References to it" should include class definitions, which should be the primary slot client. - Why does IndexedSlot have a #name slot? I thought the index and name were "either or" for instVars. Thanks! ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Question #3: Shouldn't the following (from the paper): slots: { #staff => ManySlot opposite: #boss class: Clerk. } Be: slots: { #staff => (ManySlot opposite: #boss class: Clerk). } Also, what is that code actually doing? Is #opposite:class: a class-side method of ManySlot? If so, what does it return? Ah, I see now - #=>> does some magic to accept either a Slot class or instance. Question #4: Given: Object subclass: #MyClass slots: { #var1 => MySlot } classVariables: { } category: '' and MyClass >>#var1: anObject var1 := anObject MySlot>#write:to: doesn't seem to be sent when I `myClassInstance var1: 2`. I tried to insert a halt, 1 inspect, etc. I am able to intercept #read: on the other hand Question #5: I tried: Object subclass: #MyClass slots: { #var1 => MySlot adjustment: 10 } "with and without () around `MySlot adjustment: 10`" classVariables: { } category: '' where: InstanceVariableSlot subclass: #MySlot slots: { #adjustment } and: adjustment ^ adjustment ifNil: [ 0 ] but when I open a new browser on the class definition of MyClass, the slots are truncated to: slots: { #var1 => MySlot } ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Sean P. DeNigris wrote
Object subclass: #MyClass slots: { #var1 => MySlot adjustment: 10 } classVariables: { } category: '' ⦠but when I open a new browser on the class definition of MyClass, the slots are truncated to: slots: { #var1 => MySlot }
It turns out that the slot is still "working" e.g. #adjustment is still having its effect e.g. read: anObject ^ (super read: anObject) ifNotNil: [ :val | val + self adjustment ] It's just that the class template has lost information. Another issue: Changing the slots in the template from "{ #var1 => MySlot adjustment: 10 }" to "{ #var1 => MySlot adjustment: 100 }" has no effect unless I accept an intermediate "{ #var1 }" ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Sean P. DeNigris wrote
Sean P. DeNigris wrote
Object subclass: #MyClass slots: { #var1 => MySlot adjustment: 10 } classVariables: { } category: '' ⦠but when I open a new browser on the class definition of MyClass, the slots are truncated to: slots: { #var1 => MySlot }
It turns out that the slot is still "working" e.g. #adjustment is still having its effect e.g. read: anObject ^ (super read: anObject) ifNotNil: [ :val | val + self adjustment ] It's just that the class template has lost information.
Another issue: Changing the slots in the template from "{ #var1 => MySlot adjustment: 10 }" to "{ #var1 => MySlot adjustment: 100 }" has no effect unless I accept an intermediate "{ #var1 }"
----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
That's because you need to redefine #= and #definitionString (alternatively: redefine #printOn:) in your slot class. Also regarding tool support: there's bug tracker entry https://pharo.fogbugz.com/f/cases/19541/References-to-class-should-also-be-s... <https://pharo.fogbugz.com/f/cases/19541/References-to-class-should-also-be-s...> -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
webwarrior wrote
That's because you need to redefine #= and #definitionString (alternatively: redefine #printOn:) in your slot class.
Ah, okay. After this existing part of Slot's class comment: "For customizing a subclass can override the meta-object-protocol methods. See subclasses for examples." I submitted a PR with class/method comments clarifying that: https://github.com/pharo-project/pharo/pull/1150 webwarrior wrote
Also regarding tool support: there's bug tracker entry
Great, thanks. ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Sean P. DeNigris wrote
Another issue: Changing the slots in the template from "{ #var1 => MySlot adjustment: 10 }" to "{ #var1 => MySlot adjustment: 100 }" has no effect unless I accept an intermediate "{ #var1 }"
Fixed by https://pharo.fogbugz.com/f/cases/21725/ ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Sean P. DeNigris wrote
Question #4: Given: Object subclass: #MyClass slots: { #var1 => MySlot } classVariables: { } category: '' and MyClass >>#var1: anObject var1 := anObject MySlot>#write:to: doesn't seem to be sent when I `myClassInstance var1: 2`. I tried to insert a halt, 1 inspect, etc. I am able to intercept #read: on the other hand
All issues from this thread seem to be resolved in latest Pharo 7, except the above. This seems like a bug if IIUC. Can anyone confirm? ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
On 24 Mar 2018, at 21:21, Sean P. DeNigris <sean@clipperadams.com> wrote:
Stateful traits inspired me to reread the flexible object layout paper and I came up with a few questions about slots: - What is the plan for tool support? For example, it seems that to make slots discoverable like any other class or message, "References to it" should include class definitions, which should be the primary slot client.
Yes, these things need to be done.. I have a very large TODO list for this but it is hard to find time
- Why does IndexedSlot have a #name slot? I thought the index and name were "either or" for instVars.
This is the name of the variable. Even though an init-var is accessed by index, it still has a name (e.g. #x in Point). Marcus
participants (3)
-
Marcus Denker -
Sean P. DeNigris -
webwarrior