Without offense, one can say that Ruby is Smalltalk made right (or at
least one way to make it right).
If if by "making it right" you mean going back to imperative languages
and irregular syntax.
Smalltalk already had pretty good iterators; why add the imperative
"while"? Smalltalk itself is so powerful that it doesn't even have an
"if" statement. Ruby is that powerful too, but a lot more awkward.
(It's probably more awkward because it does have an "if" statement and
therefore never had to make things like a generic block statement that
was as syntatically light as possible.)
And I find the highly irregular syntax very frustrating. What does
something in braces mean, for example? It depends on where it appears
in the program. Why do I use one syntax when passing only one block to
a method, but a different syntax when passing two? And so on. Irregular
syntax combined with too many different ways of doing things makes
learning much harder, becuase you can't naturally work out how to do
things, you need to discover the tricks.
(I just about fell over when I discovered you could use "rescue" before
"end" for a function, as well as after a "begin." But you can't use it
for "if". There seems to be no logic you can use to guide you to say
where you can and can't use it.)
I think ruby has been reasonably successful for a couple of reasons.
1. One thing it did get right was to integrate well into the Unix
environment. If we had a good Smalltalk that did that, I'd be all
over it.
2. Java has been around along enough that many programmers have absorbed
the incremental improvements it offered over C++ and other languages of
the day, and are now starting to discover how backward in many was Java
really is. So now they're ready for another incremental improvement--but
not one that's to big. Not a language, for example, without "if" statements.
Ruby did get some other stuff right, such as having continuations in
the language, but I don't think that sort of thing was much of a factor
in its success. There will be a day when we nobody will take a language
without continuations seriously, but that day is not here yet. (And the
day where nobody takes seriously a language without type inference is
even further away.)
cjs