Opa
- Functional programming
- Pro: Run client, server, and database code in the same language
- Con: Currently the least popular of these languages
Dart
- Similar to Java/JavaScript
- Pro: Can run client and server code in the same language (though in practice, this is not yet the best option)
- Pro: In the future you will be able to run client code in the Dart VM in some browsers
- Pro: Polymer MDV provides easy approach to encapsulation and re-use of components
Haxe
- Similar to ActionScript
- Pro: Mult-platform language: compile to other language/platforms besides for JavaScript (for instance, creating high-performance mobile games)
CoffeeScript
- Similar to Ruby
- Pro: Currently the most popular of these languages
Some features common to all the languages:
- Compile to JavaScript
- Interact with JavaScript code
I researched all of these for a project that never ended up happening. I never really got into CoffeeScript since it was less familiar to me given its Ruby flavor. Opa was very intriguing but I ultimately decided against it since it seemed to have a very small community, and I preferred something more class-based and object-oriented. I was familiar with Haxe already, having played around with it for a mobile game, but JavaScript didn't seem like a huge focus here: tutorials and samples were hard to come by.
With Dart, everything suddenly seemed to come together:
- Given my Java/ActionScript/JavaScript background I knew the language before even writing a line of code
- The WebUI (now Polymer) Model-Driven-View approach, provided a sane way to encapsulate and re-use components
- A dedicated IDE (Dart Editor) that made debugging quick and easy
- Pub package manager made it easy to quickly add 3rd-part libraries
- Plenty of tutorials, articles, and documentation to help get me up to speed
Ultimately, you can build great web apps in any of these languages, but the one you choose will be influenced by your past experience. In my case, I was looking for a class-based, object-oriented solution, which made it between Haxe and Dart, and Dart was clearly the victor in terms of features, tooling, and support.