Hello,

I am a programmer who likes to learn new languages once in a while, if
I find something that looks interesting and useful. Currently, my
favorite language is Ruby.

I wonder if you would consider including a comparison of Ruby v.s.
Eiffel in a future version of http://www.elj.com/eiffel/why-eiffel/?

Here's my take on Ruby, from the point of view of a Ruby programmer
who hasn't tried Eiffel yet, but has read the shortcomings of Java,
C++, Smalltack etc. that you wrote about on that page:

Ruby is "Inefficient" like Smalltalk, since it is interpreted.
However, CPUs are always getting faster, and much of the time, there
are spare CPU cycles to go around. So, the slower execution speed
might not be a problem, depending on what I'm doing.

Ruby is "Unreliable" like Smalltalk, since it is dynamically typed.
This flexibility can be useful too, though. I haven't used it much
myself so I can't comment on it much more.

Ruby lacks multiple inheritance, but it has a similar concept called
mix-ins which seems to work well. I haven't used multiple inheritance
in any language, though.

Ruby inherits "C's cryptic, terse syntax" like ++, <<, &&, ||, %, etc.
I don't personally find it difficult to read, though. It's firmly
ingrained into my mind what those operators do. In fact, I think I
prefer seeing "a && b" over "a and b", because when the operator is a
symbol, it visually stands out from the variable names. (I guess this
is a moot point given syntax hilighters, though.)

Ruby's interpreter is written on C and runs on all common platforms.
I'm not sure if it works on Cray yet; I've heard of attempts to
compile it that were unsuccessful on the mailing list.

Ruby has a rudimentary implementation of "Design by Contract". It
wasn't as seamless as I liked.

Ruby has a wide variety of standard libraries that cover all common
tasks. Want to take the SHA1 checksum of a string? Want to open a TCP
connection to another host? Want to listen for incoming TCP
connections as a server? No problem! You can even run part of a
program on one machine, and another part of it on another machine
using distributed ruby, which is simple to setup.

Ruby is easy to read and includes syntactic sugar for things such as
iterating through lists. For example, if you want to iterate through
all the elements of a list and print them, you can do:

list.each do |element|
    puts element
end

("puts" is like "print", but adds a newline at the end.)