All features in ECMAScript go through a formal proposal process. A proposal for a new feature, usually originating from the developer community, begins with a sketch or “strawman proposal” that provides an initial description of the proposed feature. If TC39 agrees that the feature is valuable, it will be promoted to official “Proposal” status. The deadline for ES6 proposals was way back in May 2011.
ECMAScript 1, 2 & 3: The early days
ECMAScript 4: The abandoned specification
However, when the committee got together they were divided into 2 separate camps. In one corner was the “ECMAScript 4 Camp,” composed of Adobe, Mozilla, Opera & Google, who still wanted to work towards the massive upgrade. In the other corner was Microsoft & Yahoo, the “ECMAScript 3.1 Camp”, seeking a small subset of ES4, which would be more of an incremental upgrade of ES3 containing some minor features and bug fixes.
The rift ran pretty deep, but thankfully in July 2008 at a meeting in Oslo, Norway, a compromise was hashed out:
- Essentially what was ECMAScript 3.1 would become ECMAScript 5 — an incremental upgrade of ES3.
- TC39 would then develop a new major release that would be a scaled back version of the ambitious ES4, but bigger in scope than the incremental ES5. This major release was codenamed Harmony (due to the circumstances in which it was created) and would be for the most part what we now know as ECMAScript 6.
- Some other features of the original ES4 plan would be dropped to be picked up in subsequent versions.
ECMAScript 5: The compromise specification
It added several enhancements to the standard library such as:
- JSON parsing/serialization support
- Array prototype methods (like map and forEach)
- Methods for listing properties (like Object.keys).
- Allowances for dangling commas at the end of lists or object definitions
- Allowances for reserved words (like new or for) as object properties
ECMAScript 6: The new hotness
ECMAScript 6, which we will be learning about in great detail over a series of blog posts, was originally planned to be released in 2013, but wasn’t officially released until in June 2015. ECMAScript Harmony was the codename for the group of features following ES5, but it became clear that its goals were still too ambitious, so TC39 decided to break it up into two phases:
- The highest priority features would be in the next release of ECMAScript. It was codenamed ECMAScript.next in order to try to avoid the whole numbering fiasco with the lost ECMAScript 4.
- The remaining features would find their way into the following version.
ES6 features are slowly rolling into the interpreters of our modern browsers and servers. The ES6 compatibility table tracks just how much of the standard each engine supports. As of writing, Microsoft’s new Edge browser is actually leading the pack with 67% of ES6 features supported. Firefox 11 (released in March 2012) was the first browser with “significant” support (more than 10%). Transpilers like Babel and Tracer let you compile a lot of ES6 down to valid ES5 for cross-browser compatibility. More on this in a future blog post.
ECMAScript 7: Looking forward to 2016
Work on ECMAScript 7 has already begun and the current proposals are on GitHub. As mentioned earlier, TC39 is transitioning to a yearly release cadence, so the releases will now be more incremental. And since ECMAScript 7 officially kicks off the yearly release cycle it has also been renamed to ECMAScript 2016. I may preview some of its proposed features at the end of this series.
For the remainder of this series, we’ll zero in on ECMAScript 6 (ECMAScript 2015 to be absolutely correct), starting with an overview of its goals and features coming up next.