It's been a very busy week for languages, already. First, Google announced Google Dart, the long rumoured Web development language. Second, the C++11 ISO specification was finally released. Could the two languages be any more dissimilar? Not likely.
Let's start with a look at Dart. While the language has its own virtual machine in Chrome, the real use of it will be as a JavaScript intermediary. When viewing a Dart application in FireFox or Microsoft IE, for example, Dart code will be compiled into JavaScript for running in those other browsers. It's an interesting approach. Dart is aimed at being a rapid prototyping language for Web applications. Clearly, Google expects people to write deployable applications with it, as well. But the real focus seems to be on a simple syntax, powerful Web tooling, and speed for development.
Still, a programming language takes at least five years to be useful, and ten to be popular. We'll just have to wait and see if these figures are winnowed down by the ever expanding Internet and the speed with which people latch onto new technology. Who knows, Dart could be popular in a couple of years, if its simple enough. It sure looks simple enough, but time will tell. Check out "Hello World" in Dart.
Meanwhile, the real software developers out there are most likely excited about C++11. The manly men and womenly women who code in the supreme ruler of C-based languages has completed its first major going-over in ten years. Rather than dig into all the new features of the language, it's better to let Bjarne Stroustrup detail the changes in his own words: after all C++11 is his baby. Check out his full write-up here.
But Stroustrup sums up his feelings on this update quite succinctly early in the document:
Surprisingly, C++11 feels like a new language: The pieces just fit together better than they used to and I find a higher-level style of programming more natural than before and as efficient as ever. If you timidly approach C++ as just a better C or as an object-oriented language, you are going to miss the point. The abstractions are simply more flexible and affordable than before. Rely on the old mantra: If you think of it as a separate idea or object, represent it directly in the program; model real-world objects, and abstractions directly in code. It's easier now: Your ideas will map to enumerations, objects, classes (e.g. control of defaults), class hierarchies (e.g. inherited constructors), templates, aliases, exceptions, loops, threads, etc., rather than to a single "one size fits all" abstraction mechanism.
My ideal is to use programming language facilities to help programmers think differently about system design and implementation. I think C++11 can do that - and do it not just for C++ programmers but for programmers used to a variety of modern programming languages in the general and very broad area of systems programming.
In other words, I'm still an optimist.