Dash/Dart

2011-09-11

The js community is a large but relatively small group of people that love the language and wish to promote it to the rest of the world. We want to convince the generation of C and even Java that js has matured to the level where it can actually compete with the edge of being available on pretty much all platforms through browsers or node.js and being very versatile so development has fast results.

While this is completely true there is a dark side to js. There are some fundamental flaws in the language that take a very long time to get fixed. Some will never get fixed. And while I love the prototypal part of the language, I can't help but being annoyed at some other parts of the language. Like ASI, math precision (or lack thereof) or the way you have to do subclassing. Or maybe simply not enough tools (specification wise) for introspection, __proto__ anyone?

The reason is twofold. On the one hand there's the migration of the web that takes ages. And it will only take longer as it's use increases and more web pages are created. On the other hand there is the commission responsible for advancing the language, the TC39. It consists of a bunch of companies that have some kind of interest in the language. That does not limit itself to browsers mind you, it also includes companies like Adobe, IBM and Intel. Remember that js is not just a browser tool...

And while on the one hand it's nice that all these companies talk to each other and hash out possible problems with the language, I'm pretty sure that some problems will never be fixed (ASI, math imprecision) due to politics or even simply the state of the web and not breaking backwards compatibility. And then there's the new feature set in Harmony (or ES.next) which I'm seriously doubting. I've grown bored of the Proxy discussions, bike shedding over a shorter function keyword and weird new class syntax. Don't get me wrong, I see some features that are cool. Spread operator and guards for example. For me it's partially about keeping js in the spirit of js and probably partially just the conservative programmer in me that wants to feel safe in the happy world where he knows the language backwards. But keeping the spirit of js is very important. In that regard for instance, I feel getters and setters were already a step too far. You used to know what foo.bar = 5; log(foo.bar); would result in. Now you don't.

So with all that sentiment, why not do something about it? Frankly because it's all politics and I'm bad at politics. And of course I don't have the weight to change this course that drastically. I've actually tried to figure out what the acceptable migration tax was for Harmony and I always got a "as little as possible". Yet, when you have to opt-in to use the new language (<script type="harmony">), I can't seem to be convinced about the impact on legacy code of breaking certain features by fixing their broken functionality. So all the while certain hefty changes were being let in, it seemed that the important changes to actually FIX the language were left out on grounds of breaking too much. That's where I zone out and just don't want to bother anymore, you know?

So enter the news on Dart or Dash (which is it gonna be anyways?). A ten month old email got leaked containing information about how Google was betting some money on a new language they were working on. They would like it to replace js in due time. It actually mentions "sweet talking" to other vendors. This part seems to upset people. But seriously, you really don't think any other company talks about competitors this way internally? Please. And then there are those that complain about Dash/Dart but at the same time feel happy about CoffeeScript. Don't you see it's the almost same thing? Conceptually at least.

So, I for one welcome our new Dash/Dart overlord. People might wonder why I don't really care about CoffeeScript but why I am looking forward about more details on Dash/Dart. It's simple. Coffee was hobby project that gained some traction. It was created by somebody who's not really familiar in language design (he said so himself during JSConf..). And while that doesn't mean he can't pull off an awesome language (after all the first version of js was created in 10 days), to me Coffee is just not it. And it's not about the cross compilation stuff. It's about Coffee inherently having the same problems as js and not even a formal specification to back it. Maybe that'll change later, but that doesn't help me now.

Enter Dash/Dart. It's my hope (for that's all I can do right now...) that some of the great minds at Google actually hashed out some of the issues from js, put down a formal specification and created the new language that's "like js", but better. I mean, I'm really curious to the actual syntax and code. I may not even like it in the end. But I can tell you that if I do, and Google has not created a client-side cross compiler (to js) for it, I will. Not that I'll put all my money on the new language. It's too early for that. But I'm gonna check it out and give it a serious chance. On top of that, it will have the weight of Google to push it. And no, that doesn't mean it'll succeed. There's enough prior art to prove that Google can't make every project succeed. But it'll have more of a chance than anything I can come up with.

So I'm gonna wait and see and hope they announce something soon. And go on from there. Haters gonna hate but I'm gonna give it a chance.