Dave Megginson (who drove the development of the SAX API that will be familiar to many XML developers who use Java) recently wrote Java is dead.
Java stood out as a programming language (though not as a platform) in that Sun had refused to standardize it through an independent and reputable standards organization (a lot of the hard work had been done in one attempt to put it through ECMA and one to put it through ISO, both times Sun pulled out and eventually made their highly unsatisfactory JCP Java Community Process system.) Without the ability to alter Java significantly in ways that might go against their druthers, Java suffered two major forks (Microsoft's J++ then its C#, and IBM's SWT) where significant players disagreed with a major component (the graphics library). Java succeeded in middleware, and but failed to take advantage of the rise of browsers on the deskop: their HTML parser was great for the middle 1990s but was deliberately neglected to the point of being unusable: it is hard not to see this as a deliberate attempt by Sun to leave the browser market to its friends and enemies. I really liked Java, and bet my company on it (in a sense): I would not do that today.
What are the alternatives, for the same kind of desktop space (no flames, I know everyone knows this area is dead dead dead in the age of the WWW and the curated ipadroid) and XML processing I spend my time in? I have been looking at Scala quite a bit: it integrates into the JVM, has familiar C-based syntax, and allows you to progress from Java-like programs to more functional and DSL programs. However, I have three qualms: first, I can already do many kinds of functional programs using XSLT which is more optimized for XML processing than Scala, so ; second, its use of the JVM may be a liability given Oracle's lawsuit (or is this just FUD?); third, much of the Scala material is written by academics or proponents of niche languages that are fairly difficult to approach from the world of conventional programming. (Whenever anyone writes monad in discussing the advantages of a technology, its potential popularity plummets in my mind.)
Another contender that does not suffer these three problems is Vala. This is a real throwback to the 1980s in a way: an object language sitting on top of C, but informed by the excesses of C++ and the successes of Java. Here is the elevator pitch for Vala on their website:
Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.
Vala is based on GNOME's GObject system, and provides the kind of class features you would expect. Like Scala it has a language-level equivalent to Java Beans get*() and set*() properties, but it also has language-level support for property change notifications and listeners. It does not have a strong XML story, just a mini parser, but it does seem to have a good Unicode story (strings are UTF-8, the string.getch() returns a unichar 16-bit character.) Probably its main difference with Java at a feature level is that that it has a reference-counting system for object de-allocation, which gives more deterministic real-time behaviour compared to Java's GC but opens the dooor to some programming errors. The other oddity, in this age, is that it does not do boundary checking on array accesses: so a little more discipline is required than Java (but presumably a lot less than in C).
I would expect that anyone who would be considering writing a new C or C++ application or who were C, C++, C# or disgruntled Java programmers wanting to avoid the clutches of the large corporations, and with a pretty strong and proven (OS-neutral?) platform behind it (i.e. the might of GNOME) might be interested in Vala. Like Scala, I think you would want to check whether the IDE support was adequate before launching onto a big project, of course.
On the server side, a promising language is Google's Go programming language: it is less object-oriented, but still in that efficient C space: their elevator pitch:
Go features a keyword go for spawning goroutines that encapsulate the various fibre/thread/process/multicore kinds of parallelization.
I'd love to see the lovechild of Go and Vala: I don't see that Vala and Scala have a very good story for taking advantage of multicore CPUs.