If you don’t already know, there were two groups working on the next version of ECMAScript (Aka Javascript to most people) – ECMAScript 4 and ECMAScript 3.1.

ECMAScript 4 was mostly run by Adobe, Mozilla, Opera, and Google, and ECMAScript 3.1 by Microsoft and Yahoo (via John Resig). ECMAScript 4 is also currently being used by Adobe as the scripting language for Flash / Flex / Air (ActionScript).

ECMAScript 4 and ECMAScript 3.1 were going in different directions. To remedy this, they had a big meeting and merged the two efforts. The new combined effort is called ECMAScript Harmony (how nice).

In the end, essentially, ECMAScript 3.1 “won”, and a large number of features from ECMAScript 4 were dropped from the spec. This has rocked the apple cart for quite a few Flash developers who thought that ECMAScript 4 would eventually become the new Javascript, and the skills they learned with Flash would work equally in the browser.

To those guys I apologize for this, but I am very glad a good deal of ECMAScript 4 features are “off the table”. Before I get into why, I want to say I think you might be blowing the change a bit out of proportion. There are many languages out there that are not based on any standard and they are helpful. The skills you learn will very likely be applicable in other areas – so chin up.

So first off, ECMAScript 4 is C#. It is. Look at it. The variables are backwards and there are a few other differences, but if you wanted C#, just make the language C#. C# is a standard I believe.

In my mind, Javascript is a functional language – by functional I mean the basic unit is a function. Much like lisp. Making the language more class oriented always seemed against the point of the language (to me). The thing that makes Javascript cool is that it’s so versatile – you can make it behave like classes, but I don’t think that was ever the point.

Another thing I am glad is gone is early binding. Early binding is so 1980s. Every interesting and forward thinking language I have used has been late binding (and often message based). Taking Javascript into the early binding direction is like taking the language back in time. Yes, I understand that most of the “enterprise languages” use early binding, and yes I get that it takes less effort to make a faster runtime with early binding, but again, I think that is the past. Computers are supposed to figure things out and make our lives easier and faster. Early binding is a lazy runtime (he says from his arm chair having never written a runtime engine).

Packages and namespaces are off the table as well. Again, I point back to C#. Just use C# for the flash scripting language. When I first saw the new flash language demo at MAX (several year ago now), I said, “That’s C#, why are they remaking C#?”

To me Javascript has dodged the bullet that hit ActionScript right in the face. Instead of making a more dynamic language with looser coupling, it became a less dynamic language, with more coupling, more overhead, and a steeper learning curve.

To round this out – and to clear up I am not being negative or mean, just direct – I do like ActionScript and Flash. I like Flex and Air. I like Javascript. I even like C#. I have just never agreed with the direction ActionScript took back in the day, and I am very, very glad Javascript did not follow suit.

(I can’t believe I agree with Microsoft – yikes).