Seriously. I've been searching all my computing life for a decent programming language, and I've been through a lot of them in my travels up since WATFOR and PL/C. Many come close, and those close-fits today form the core of my toolbox; there's been a lot of very nearly almost close-fits and some of them painfully not quite there -- in that latter list I include Ruby -- but because of my annoyingly unavoidable real-world constraints, my toolbox really consists of, in order of decending frequency and increasing power, bash-shell scripts, PHP, Perl, Java and C
Now before the language bigots jump up all indignant like, hear me out. This is, in decreasing order of importantce, what I cannot do without and what disqualifies even wonderful and enlightened programming idioms like Ruby, Haskel and Prolog:
free-software 3rd party components -- because I'm just one guy out in the woods and I can't afford to re-invent every low-level protocol or general purpose widget. As much as I would love to author every line of code (just like the good old days of the Z80!) it's just not viable in my market. I have to be re-using components shared by other developers, as much as feasibly possible.
Easy, easy package management. Again, I just don't have time to fiddle with manually picking up and tucking into right spots all the little components and dependencies most non-trivial code requires. This drives me bonkers in the Xerces-based XML jar files of Java where the least little version conflict throws the whole thing into a tumble, and CPAN, well CPAN is the single most influential factor in my staying with Perl, the language I love to hate. If Ruby had CPAN, and if Ruby's CPAN had even half the breadth of the Perl archive, I'd be there. As it is, count me with the camel.
OOD. Real OOD, not the kinda-sorta joke of OOP in PHP4 or the goddamn the torpedoes let it rip OOPishness of C++ (which has almost zip CPANerisms) but the reasonable sort of mental-scaffolding OOP. And not canned-mediocrity of VBasic either, it has to be seasoned and practical and, well, yes, I'm not the accountant mindset type so it has to have that Eiffel/Pascal notion of "the programmer is not always right" checksumming that saves me from myself. I want to program concepts, not chipsets.
Anyway, back to the point, what should happen today, which is an otherwise yet-another-dismal-no-prospects day of sifting sand in the exhausted stream of the down-the-tubes IT market, and what pops up in the radar but something called Nice. I haven't been there yet, but right off the bat, I can see evidence of those immortal words of Bucky Fuller ...
"You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete."
The Nice programming sytem, whether it is or not, claims to be a step in this direction, not trying to usurp my toolbox, just extending it, building on what I have (at least in the Java department) but doing so in a direction that's, well, very probably better ...
Nice is a new object-oriented programming language based on Java. It incorporates features from functional programming, and puts into practice state-of-the-art results from academic research. Among the advanced features: parametric types, anonymous functions, multi-methods, tuples, optional parameters to methods, design by contract, detection of many errors during compilation (in particular, concerning casts and null references). This results in more expressivity, modularity, and type safety.
Nice plays nice with java libraries, so it fits my first two criteria at least as well as Java does (which still ain't no CPAN, but it's no proprietarily padlocked C++ either) while simultaneously extending Java into the directions it should have gone way back what, 5 years ago?
Anyway, I haven't tried it yet, and I'm not sure where I might use it, but if it plays nice with the JVM that's at least an opportunity to test it out, and if it perchance also plays nice with gjc then it may actually win another convert here in Sauble Beach.
And maybe it's a idea worth stealing for Ruby too -- I wonder ... what's the chances of a Ruby-wrapper that would transparently adapt anything you could get in CPAN?