On Sat, Aug 18, 2012 at 12:33 PM, Camillo Bruni <camillobruni@gmail.com>wrote:
On 2012-08-17, at 22:50, Eliot Miranda <eliot.miranda@gmail.com> wrote:
On Fri, Aug 17, 2012 at 1:42 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
Hi guys. Right now we have
methodClass "answer the class that I am installed in" ^self numLiterals > 0 ifTrue: [ (self literalAt: self numLiterals) value ] ifFalse: [ nil ]
But of course my image has no method with 0 literals:
(CompiledMethod allInstances select: [:each | each numLiterals = 0 ]) size -> 0
So...can this really happen? or I can just remove the if ?
Yes it could happen. For example, i the Newspeak implementation above Squeak these is a collection of inst-var accessors that are shared through all Newspeak classes in the system.
so it will never happen in Pharo right?
These have a nil methodClass. If one wanted to save space they could have no methodClass instead of nil in the methodClass slot. (Note that the above works for these since nil value = value). So IMO its a harmless piece of defensice programming. IIABDFI (If it ain't broke don't fix it).
again, this is not pharo mentality...
Yes, that was my point. Our system is full of "xx > yyy ifZZ:" , "isEmptyOrNil ifZZ:", "ifNil: " blah blah blah. I am sure lost of them were workaround introduced to solve a problem in some point in time in the last 20 years. And not only at a point in time, but also together with an specific image version, set of libraries, vm, etc. I am also sure lots of them may not be necessary anymore after so many cleanings and library replacement. Hence, my question. Finally, if Pharo would have followed the IIABDFI (If it ain't broke don't fix it) then we would still have ReferenceStream, ImageSegment, HTTPSocket, Preferences, FileDirectory, SystemChangeNotifier, and many others around (of course, someone could consider them as broken). -- Mariano http://marianopeck.wordpress.com