As I mentioned I’ll probably be stuck forever as n00b, so I have absolutely no intention to compare the real merits of languages. It’s just that I finally got to learn Ruby (and then Python) for real, and it’s so different from C++ and Java that I think it’s worth documenting.
I don’t have any emotion for or against C++ since it’s just too big. I’ve used Java for just over 2 years and like its relative simplicity. I’ve learned Ruby for a day, and would take
a = { 1 => "blah" }
over
Map map = new HashMap(); map.put(1, "blah");
any given time.
| C++ | Java | Ruby | Python | |
|---|---|---|---|---|
| Inheritance | multiple | single base class, multiple interfaces | single base class, multiple mixins | multiple |
| Syntax | throw try catch | throw try catch finally | raise begin rescue ensure catch throw (with label, not exception) | raise try except finally |
| #include | import | require/load | import | |
| dynamic_cast/typeid | instanceof | kind_of | isinstance | |
| varargs | Object … | *args | *args, **args | |
| NULL | null | nil | None | |
| inner class | anonymous class | block | lambda (limited) | |
| const | final (not quite) | object.freeze | N/A | |
| enum: int only | enum: full class, but no more inheritance | N/A (type-safety is moot) | N/A | |
| Hits | pointer, iterator | JRE, javadoc, IDE | yield, block/closure | list comprehension |
| Misses | hash table, regexp, thread | verbose | performance? | |
| Idiosyncrasy | complex and cryptic | String == | elsif, no ++ | elif, no switch/case |