Comment by em-bee

1 year ago

well, if you did, then can you please tell me what i am missing? i have written a decent amount if smalltalk code, and even held workshops teaching smalltalk to others. and i have written lots of code in many other languages.

i did see differences. the most awesome was when i wrote some code to respond to an http request, the code failed, the http request stalled, i fixed the code live, and then the http request resumed.

but i can do the same in pike if i tried, and i expect in lisp and other languages too.

and if that is the case then it supports my understanding that most OO languages use message passing. where then is the great revelation that comes from smalltalk?

>> i can't tell the difference

> i did see differences.

Spot the difference. ;-)

> but i can do the same in pike if i tried, and i expect in lisp and other languages too.

Absolutely you can! You can even do it in C: write yourself a message-passing library in C. You might want to call it Objective-C. Or do a VM for Smalltalk.

> where then is the great revelation that comes from smalltalk?

The claim was not that the great revelation came from Smalltalk, but that it came from message passing:

>>> Message passing belongs up there with lisp, forth and pure functional programming as paradigms that are worth learning for "the profound enlightenment experience you will have when you finally get it."

Smalltalk isn't even mentioned in that little section about the enlightenment.

And in fact, Smalltalk's form of message-passing is pretty limited, it only just extends beyond method invocation and it certainly can be (and is) frequently used just like method invocation. If you want to do more sophisticated things, you mostly have to go via the DNU handler, which is a bit hacky.

And in fact, Alan Kay's famous OOPSLA '97 quip "I made up the term object oriented. And I can tell you I did not have C++ in mind." was followed immediately with the slightly less famous "So, the important thing here is: I have many of the same feelings about Smalltalk". https://www.youtube.com/watch?t=634&v=oKg1hTOQXoY&feature=yo...

And even message-passing is much broader: for example, with Higher Order Messaging, you can control how messages are delivered: to collections, on different threads, delayed, distributed (combine distributed + delayed and you get TeaTime/Croquet), conditionally only if the receiver understands the message, etc.

https://en.wikipedia.org/wiki/Higher_order_message

https://www.youtube.com/watch?v=GBtqQwcJoN0

And even that just scratches the surface. When you look at something like the Enterprise Integration Patterns, that's distributed asynchronous messaging, which opens up a whole other universe. Also: Erlang.

https://www.enterpriseintegrationpatterns.com

https://stackoverflow.com/questions/3431509/is-erlang-object...

  • thank you. so really the problem is that nobody seems to be aware that most OO languages are actually using message passing. unfortunately that results in that quote becoming meaningless because it tells people to do something that they are already doing, and then they wonder why they don't learn anything. it's like telling people that they need to add H₂O or aqua to their diet.

    >> i can't tell the difference

    > i did see differences.

    Spot the difference. ;-)

    well the first refers to the difference between message passing and function calling. which i couldn't see because all languages i worked with are using message passing.

    the second refers to the difference between smalltalk and other languages, which owes to the particular implementation of smalltalk, and not just message passing.

    in summary, you are confirming what i thought i understood. it appears i need to do the reverse and actually explore languages that don't do message passing to see the difference.

    • > so really the problem is that nobody seems to be aware that most OO languages are actually using message passing.

      That turns out not to be the case. C++ is not. Java is not.

      Of course, many would say that those two are not object-oriented, so that way around you can make it work.

      > which i couldn't see because all languages i worked with are using message passing.

      That still is not the case. So your explanation for the contradiction in your statements also makes no sense.

      > in summary, you are confirming what i thought i understood.

      No, I am most emphatically not doing that, and what I've written makes that very, very clear. There is little I can add to that, I could only repeat myself.

      Have a nice day.

      3 replies →