Java was successful not because of its object system but because it was C-like and free of charge at a time when Smalltalk was very expensive. C++ is a mess, I doubt its SIMULA inspired object system had anything to do with its success. Python was only the sane alternative to Perl.
Ruby and Objective-C are the closest to Smalltalk and are very successful because of that.
I don't understand how you can extrapolate that to say that Smalltalk's object system failed. Even more so when the OP's idea of ruling the world is not limited to how successful a language is due to its object system, but how influential it has been the last 30+ years.
We are still catching up with the past.
P. S. By the way, Java was so slow at the beginning that Sun Microsystems acquired Strongtalk (a statically typed Smalltalk) and the result of that was the HotSpot VM.
You missed Ruby, which resemblances Smalltalk in many ways.
The original poster didn't say the object systems are similar, but that Smalltalk's object system is the basis of the one used in those languages. Java and Python did a poor job of course.
First, C++ was designed as C with Simula-67 classes, and did a good job of being that. Second, aside from syntax, what's the difference between sending a message and calling a member function? In both cases, the object in question has to know how to deal with it.
Calling a member function requires that the type of the object is known and includes such member function. Sending a message instead doesn't need to know anything about the object, only that it responds to the message; and even if the message is not understood then a method is called that manages that situation (doesNotUndertand in Smalltalk, method_missing in Ruby) which can be very useful when metaprogramming. For instance implementations of the proxy pattern or the active record pattern are simplified a lot by it.
You are obviously biased towards static typing, which is fine. But then, why are you commenting on a Smalltalk story, I wonder. Do you care? Smalltalk is obviously not in your list of interests.
Now, calling out Ruby for being terrible for server-side code though is plain ignorant.
Why do you think Ruby is a toy language? what are you comparing it with? Crappy support for exceptions? What are you talking about here? Please specify. Again, what are you comparing it with? What's wrong with multi-threading in Ruby?
1) its absolute simplicity and minimalism of syntax
Count me out. I don't feel like building mounds of advanced syntax out of primitives over and over, I'd rather have my complex syntax pre-baked and only re-implement syntax when I really meed a DSL.
2) its live coding/debugging environment (as well as the "image")
Implementation feature, not a language feature, though granted much easier to implement on some languages than others.
Do you even know what you are talking about?
minimalism of syntax means it is easy to learn and so there's less room for someone to make a mistake, because there are less rules to learn and less keywords to watch out for.
Smalltalk for instance has no keywords at all. It does have six pseudo-variables: true, false, nil, self, super, and thisContext. These are bindings that the programmer cannot change. Other than those you can use any identifier for yourself.
You don't "re-implement syntax"... get serious. If you don't care about Smalltalk that's fine. Just stop spreading misinformation.
If operator precedence is the only "wart" you can mention that stops you from using Smalltalk then you can't really speak about Smalltalk with authority.
FYI, there are no operators. Just messages sent to receivers. Is your mind blowing yet? No?
There are neither conditional statements nor control structures in the *language* yet Smalltalk programmers use them all the time. How is that possible? Non-sense? Mind blowing yet?
You have very well indoctrinated in static typing, that's fine.
Let's try an exercise. Look deeply into those "generics" and "templates" and "dynamic casts" and most of those "design patterns"[1] you have to learn. If look deep enough you will be able to see through them and find out that they are solutions to problems caused by static typing, which enable you to escape for static typing and make it more dynamic!
I mean no offense, but that's an example of how people get OO wrong. OO is not about bundling data and code together but about sending messages. Once you wrap your head around this you will start the path to enlightenment and won't look back.
Objective-C is more OO than C++ by virtue of the messages, which is what C++ got wrong. Messages are powerful, because you let the receiver decide what to do with it, as opposed to calling a "member function." Many C++ downsides come from that sin.
Go is a joke of a language. It lacks important features but instead of acknowledge them the authors say that is a feature! (much like Perl's mess is praised by Larry Wall.)
What you are talking about is the never ending arguments for static vs. dynamic typing. You favor static typing, fine. If you are happy working around its limitations, investing time making a compiler happy, that's up to you. Just say it so instead of misinforming.
You are wrong. C++ is terrible compared to Objective-C.
C++ got OO wrong and introduced new problems. For instance, messages is central to the OO paradigm. If you can't see how Objective-C got that right but C++ got it wrong then you are not qualified to compare them.
Same thing for templates, virtual functions, etc. You don't need that in Objective-C because you have "duck typing", another core concept of OO that C++ got wrong.
Portable Distributed Objects, based on Objective-C (C inspired on Smalltalk), beat CORBA and DCOM on distributed objects by using an elemental design pattern, the proxy pattern, that nobody else could because they got OO wrong.
"PDO enabled NeXT to demonstrate Excel talking to other Microsoft applications across a network before Microsoft themselves were able to implement this functionality (DCOM)."
C has its place as a low level language but it is definitely, without any doubt, not the best language to become a good programmer. If you really believe what you are saying then you are missing a lot about programming.
Java was successful not because of its object system but because it was C-like and free of charge at a time when Smalltalk was very expensive. C++ is a mess, I doubt its SIMULA inspired object system had anything to do with its success. Python was only the sane alternative to Perl.
Ruby and Objective-C are the closest to Smalltalk and are very successful because of that.
I don't understand how you can extrapolate that to say that Smalltalk's object system failed. Even more so when the OP's idea of ruling the world is not limited to how successful a language is due to its object system, but how influential it has been the last 30+ years.
We are still catching up with the past.
P. S. By the way, Java was so slow at the beginning that Sun Microsystems acquired Strongtalk (a statically typed Smalltalk) and the result of that was the HotSpot VM.
You missed Ruby, which resemblances Smalltalk in many ways.
The original poster didn't say the object systems are similar, but that Smalltalk's object system is the basis of the one used in those languages. Java and Python did a poor job of course.
A trip to Wikipedia before posting is all you need to stop embarrassing yourself.
Why wait? Take matters with your own hands and make Smalltalk great again.
I want to emphasize the existence of alternatives to JavaScript, as you mention, which means that JavaScript is not your only option.
There's a very long list of languages that you can use instead. You can even use Smalltalk:
https://github.com/jashkenas/c...
I guess it is simpler for managers to hire and replace programmers.
You have tried so many programming languages and you don't know JavaScript is severely broken? Shame on you.
Let's look at your criteria for loving JavaScript:
IT WORKS
It does the job
It does it quickly
Works in browsers and mainframes.
Potential gateway drug
That's a very low demanding list of requirements.
First, C++ was designed as C with Simula-67 classes, and did a good job of being that. Second, aside from syntax, what's the difference between sending a message and calling a member function? In both cases, the object in question has to know how to deal with it.
Calling a member function requires that the type of the object is known and includes such member function. Sending a message instead doesn't need to know anything about the object, only that it responds to the message; and even if the message is not understood then a method is called that manages that situation (doesNotUndertand in Smalltalk, method_missing in Ruby) which can be very useful when metaprogramming. For instance implementations of the proxy pattern or the active record pattern are simplified a lot by it.
It's more like coming out of the Dark Ages [ https://en.wikipedia.org/wiki/... ] into the Age of Enlightenment [ https://en.wikipedia.org/wiki/... ].
You are obviously biased towards static typing, which is fine. But then, why are you commenting on a Smalltalk story, I wonder. Do you care? Smalltalk is obviously not in your list of interests.
Now, calling out Ruby for being terrible for server-side code though is plain ignorant.
Why do you think Ruby is a toy language? what are you comparing it with?
Crappy support for exceptions? What are you talking about here? Please specify. Again, what are you comparing it with?
What's wrong with multi-threading in Ruby?
1) its absolute simplicity and minimalism of syntax
Count me out. I don't feel like building mounds of advanced syntax out of primitives over and over, I'd rather have my complex syntax pre-baked and only re-implement syntax when I really meed a DSL.
2) its live coding/debugging environment (as well as the "image")
Implementation feature, not a language feature, though granted much easier to implement on some languages than others.
Do you even know what you are talking about?
minimalism of syntax means it is easy to learn and so there's less room for someone to make a mistake, because there are less rules to learn and less keywords to watch out for.
Smalltalk for instance has no keywords at all. It does have six pseudo-variables: true, false, nil, self, super, and thisContext. These are bindings that the programmer cannot change. Other than those you can use any identifier for yourself.
You don't "re-implement syntax"... get serious. If you don't care about Smalltalk that's fine. Just stop spreading misinformation.
If operator precedence is the only "wart" you can mention that stops you from using Smalltalk then you can't really speak about Smalltalk with authority.
FYI, there are no operators. Just messages sent to receivers. Is your mind blowing yet? No?
There are neither conditional statements nor control structures in the *language* yet Smalltalk programmers use them all the time. How is that possible? Non-sense? Mind blowing yet?
true, but OO is more than that.
You have very well indoctrinated in static typing, that's fine.
Let's try an exercise. Look deeply into those "generics" and "templates" and "dynamic casts" and most of those "design patterns"[1] you have to learn. If look deep enough you will be able to see through them and find out that they are solutions to problems caused by static typing, which enable you to escape for static typing and make it more dynamic!
[1] http://www.norvig.com/design-p...
I mean no offense, but that's an example of how people get OO wrong. OO is not about bundling data and code together but about sending messages. Once you wrap your head around this you will start the path to enlightenment and won't look back.
I don't think you know what live coding means. Try harder, find out what that means, before you keep embarrassing yourself.
Objective-C is more OO than C++ by virtue of the messages, which is what C++ got wrong. Messages are powerful, because you let the receiver decide what to do with it, as opposed to calling a "member function." Many C++ downsides come from that sin.
You think...
What about asking JP Morgan, a huge user of Smalltalk, all over the world, have to say about it:
https://m.youtube.com/watch?v=...
Go is a joke of a language. It lacks important features but instead of acknowledge them the authors say that is a feature! (much like Perl's mess is praised by Larry Wall.)
What you are talking about is the never ending arguments for static vs. dynamic typing. You favor static typing, fine. If you are happy working around its limitations, investing time making a compiler happy, that's up to you. Just say it so instead of misinforming.
You are wrong. C++ is terrible compared to Objective-C.
C++ got OO wrong and introduced new problems. For instance, messages is central to the OO paradigm. If you can't see how Objective-C got that right but C++ got it wrong then you are not qualified to compare them.
Same thing for templates, virtual functions, etc. You don't need that in Objective-C because you have "duck typing", another core concept of OO that C++ got wrong.
C++ is affected by the Fragile Binary Interface (FBI) problem https://en.wikipedia.org/wiki/... while Objective C is not.
And so on...
Portable Distributed Objects, based on Objective-C (C inspired on Smalltalk), beat CORBA and DCOM on distributed objects by using an elemental design pattern, the proxy pattern, that nobody else could because they got OO wrong.
"PDO enabled NeXT to demonstrate Excel talking to other Microsoft applications across a network before Microsoft themselves were able to implement this functionality (DCOM)."
https://en.wikipedia.org/wiki/...
Here's something to keep you wondering: https://en.wikipedia.org/wiki/... (Portable Distributed Objects)
I see where you are. I'm sure I don't need to tell you this but: keep being curious. It will be a long and very exciting trip.
I meant *terribly*
You are terrible wrong.
C has its place as a low level language but it is definitely, without any doubt, not the best language to become a good programmer. If you really believe what you are saying then you are missing a lot about programming.