<div dir="auto">one of the goals of ProtoObject is not to sublass nil<br clear="all"><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div style="font-size:small"><div dir="ltr"><div dir="ltr"><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal"><span style="font-weight:bold">Hernán Wilkinson</span><br>Agile Software Development, Teaching & Coaching</span></font></span></span></strong></span></div><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Phone: +54-011</span></font></span></span></strong></span><font face="tahoma, sans-serif" size="2">-4893-2057</font></div><div style="font-size:12.8px"><strong style="font-family:tahoma,sans-serif;font-size:xx-small"><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Twitter: @HernanWilkinson</span></font></span></span></strong></div><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">site: <a href="http://www.10pines.com/" style="color:rgb(17,65,112)" target="_blank">http://www.10Pines.com</a></span></font></span></span></strong></span></div><div style="font-size:12.8px"><font face="tahoma, sans-serif"><span style="border-collapse:collapse">Address: Alem 896</span></font>, Floor 6, Buenos Aires, Argentina</div></div></div></div></div></div></div></div></div></div><div><br></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 12 Jun 2024 at 10:23 Juan Vuletich via Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Folks,<br>
<br>
On 6/11/2024 9:45 PM, Andres Valloud via Cuis-dev wrote:<br>
> Make a subclass of nil called Parrot.  Implement only<br>
><br>
>     doesNotUnderstand: aMessage<br>
><br>
>         ^self<br>
><br>
> and then evaluate the following.<br>
><br>
>     Parrot new ifTrue: [#haha] ifFalse: [#hehe]<br>
><br>
> Explain the behavior you see.<br>
><br>
> Side comments...<br>
><br>
> 1.  It should not be that hard to create a new subclass of nil, <br>
> substituting in ProtoObject when it was not requested is unhelpful.<br>
><br>
> 2.  I could not redefine an existing class to have a superclass of nil <br>
> because the process sends removeObsoleteSubclass: to the superclass of <br>
> the class in question, which in this case is nil.  Juan, this looks <br>
> like new code you wrote recently, you may want to review what happened <br>
> here.<br>
<br>
1. That's a good question. Is it helping or not? Shouldn't a subclass of <br>
ProtoObject be used instead? Not really sure. I think I've never seen a <br>
case where having ProtoObject as superclass is more a problem that a <br>
convenience.<br>
<br>
2. Fixing that right now. Done. Fix at GitHub.<br>
<br>
3. This is another issue. If you see the definition of ProtoObject in <br>
the browser, or the comment at UndefinedObject >> <br>
#subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: <br>
, the recommended way to create the class is to make it subclass of <br>
Undefined object, and then do `Parrot superclass: nil`. This is <br>
disturbing. Parrot will have superclass == nil, but will be included in <br>
the subclasses array of ProtoObject. The superclass / subclass invariant <br>
is broken. This code has been there for 25 years, and I wouldn't modify <br>
it lightly. Moreover, if you evaluate the suggested class definition, it <br>
will appear repeated times, like ProtoObject subclasses = #(Object <br>
MessageCatcher BreakingMethodWrapper Parrot Parrot Parrot Parrot) . So <br>
something has to be done.<br>
<br>
I guess the only subclass of nil created in 25 years is ProtoObject <br>
itself...<br>
<br>
-- <br>
Juan Vuletich<br>
<a href="http://cuis.st" rel="noreferrer" target="_blank">cuis.st</a><br>
<a href="http://github.com/jvuletich" rel="noreferrer" target="_blank">github.com/jvuletich</a><br>
<a href="http://researchgate.net/profile/Juan-Vuletich" rel="noreferrer" target="_blank">researchgate.net/profile/Juan-Vuletich</a><br>
<a href="http://independent.academia.edu/JuanVuletich" rel="noreferrer" target="_blank">independent.academia.edu/JuanVuletich</a><br>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" rel="noreferrer" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a><br>
<a href="http://linkedin.com/in/juan-vuletich-75611b3" rel="noreferrer" target="_blank">linkedin.com/in/juan-vuletich-75611b3</a><br>
<a href="http://twitter.com/JuanVuletich" rel="noreferrer" target="_blank">twitter.com/JuanVuletich</a><br>
<br>
-- <br>
Cuis-dev mailing list<br>
<a href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
<a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
</blockquote></div></div>