Remix.run Logo
whstl 4 days ago

This is an oversimplification, and part of the problem I mention.

The "big leap" in Smalltalk was the idea that everything is an object and computation is message-passing, not just classes and instances. That’s not from Simula. Simula was more like an extension of Algol with OO bolted on. Smalltalk was a whole new conceptual model, which is not as simple to explain as Simula/C++/Java-style OOP.

user____name 3 days ago | parent | next [-]

Yup, in Smalltalk a method call (message) is explicitly ignored when the object class doesn't implement it. The VM image is persistent. The devil is in the details.

igouy 3 days ago | parent [-]

Not ignored!

  doesNotUnderstand: aMessage

  "Handle the fact that there was an attempt to send the given message to the receiver but the receiver does not understand this message (typically sent from the machine when a message is sent to the receiver and no method is defined for that selector).

  Raise the MessageNotUnderstood signal.  If it is caught, answer the result supplied by the exception handler.  If it is not caught, answer the result of resending the message within a guard for infinite recursion. This allows, for example, the programmer to implement the method and continue."
jibbit 4 days ago | parent | prev [-]

it is less of an oversimplification than 'nothing like what existed either before or after'

whstl 4 days ago | parent [-]

Clipping the quote like that completely changes the meaning of what I said. I didn't say that.

But I stand by what I actually said: Smalltalk's OOP is indeed very novel, even for today, especially compared to C++/Java, but it's also very different from Simula, especially the early Smalltalk versions.

It's not without lineage (Ruby and IO) or peers (Erlang), but it's still an incredibly different flavor of OOP than Simula. This is not a slight, this is a compliment to Alan Kay. But to compare it to C++ is to miss the mark. C++ is from a different branch of OOP.