Matz's decision-making process
He tries to make Ruby be all things to all people
Lots of confusing sugar and overloading baked in
I much prefer Guido's hard pragmatism
The pointless panoply of function types: Methods, Blocks, Procs, Lambdas
All intertwined and yielding into one another.
I love that in Python there is only one:
Objects with a __call__ method, defined metacircularly.
The culture of adding/overloading methods on base classes
Many gems do this en masse, and there are a lot of low-quality gems
Seriously, Ruby might have a ton of new gems for everything, but they
are almost universally awful. A culture of sharing any code that *could*
be a module, no matter how trivial, leads to immature crap being widely
used because it was there already, with a mess of forks to clean up
afterwards. At least most of them are test-infected...
Python does come with a few stinkers, mostly ancient syscall wrappers.
Especially disastrous because it's unscoped, and infects the whole process
For a language with four scoping sigils it sure fucks up scope a lot
The syntax practically begs you to do it, anything else would look shitty
The Matz Ruby Implementation
The opposite of turtles-all-the-way-down (Smalltalk crushed beneath Perl)
It actively punishes you for taking advantage of Ruby's strengths
The standard library is written almost entirely in C
It doesn't use Ruby message dispatch to call other C code.
That means that if you overload a built-in, other built-ins won't use it
Anything fiddly that's not written in C will be dog slow
Great comment ! Reminds me of Lisp, a very simple concept that is powerful and easy to implement and then CommonLisp comes along trying to include everybody's favourite feature. As a result many people get put off without digging for the gold.