JavaScript Releases: ES2016 and Beyond

ES2015 introduces a huge new set of features to the language, many of them welcomed, but does so at a huge cost: there’s a vast amount for people to learn. From arrow functions to sets, maps, classes and destructuring, ES2015 is almost like learning an entirely new version of JavaScript. Quite understandably this has overwhelmed a lot of people and caused them to have concern about the future of the language.

Thankfully it was widely recognised that big bang releases like ES2015 are not the way forward - going so long between releases has many issues and it also leads to an unwillingness from many sections of the community to pick up and learn the new additions until they are supported across most popular browsers.

ES2016

The good news if you’ve been left feeling like you’re entirely lost in the world of JavaScript is that the final feature set for ECMAScript 2016 was confirmed as two new additions: Array.prototype.includes and the exponentiation operator. I’ve linked to posts by Dr Axel Rauschmayer who explains the features thoroughly. This means when ES2016 comes into action there’s two small, succinct additions to the language that shouldn’t take long to pick up. Once more, this is how it’s going to be for every JavaScript release going forward: once a year, containing any proposals that have made it to Stage 4, the final stage of the proposal process.

If you’re concerned that you’ve barely got up to speed on ES2015 and now you have an entirely new version to learn, there’s two reasons not to worry:

  • ES2016 will have its full specification ratified in the summer and browser support isn’t exactly huge yet, so if you don’t want to care about it until there’s more chance of using it, that’s fine.
  • If you do decide you’d like to get up to speed there’s only two features, and both are very self contained.

JS Going Forward

Whilst we’re still a little hungover from the efforts trying to get up to speed with ES2015 and its vast array of features and might be frustrated that a new release has appeared, going forward this bodes really well for the JavaScript community and the adoption of new features introduced to the language. Fast forward another year or two to a point where ES2015 is now history and we’ll be in a place of yearly JS releases containing a small set of features to learn. There should be no more sense of sinking amidst new features or losing track with the progress of the language. I’m personally really excited and confident that this new process will help everyone in the community feel more confident keeping up with JavaScript as it matures and changes.

Future Features in the Open

If you are someone who wants to keep up with language proposals and have a sense ahead of time of the features that could potentially make it into standard, you absolutely can. Another great thing about the new process is that it’s all hosted in the open in GitHub repositories so anyone is able to take an interest.

Proposals start at Stage 0, where they can be proposed by anyone who is a member of TC39 (the commmittee who oversee JavaScript) or a non member registered as a contributor. From there they progress through stage 1, 2, 3 and finally stage 4. Stage 4 is hit when there are two native implementations in browsers that are fully spec compliant, at which point the feature is ready to be included in the standard. The 2Ality blog has a more thorough article on the details of this process.

The great news is that you can see all of this on GitHub:

By following those links you can read up more on any particular proposal and get a sense of where it’s at in the process and how likely it is to be included in the specification.

## Trying features

With the rise of transpilers like Babel it’s also now much easier to try new features out, whether those are features guaranteed to make it into a future addition, or ones that you’re interested in and would like to try. Most proposals come with a Babel plugin which you can install and then make use of the feature. You should be wary of depending on too many proposals ahead of them making it to stage 3 and beyond (once a proposal gets to stage 3, it’s likely to make it into the standard) but it’s a really nice way to try new features.

ES6?

The infamous renaming of ES6 to ES2015 made no sense at the time, and lead more to confusion than anything else. However, now we have ES2016 in the works it makes much more sense to stick with the yearly naming than “ES6”, which becomes very ambigious given “ES2015” and “ES2016”. I will also be making an effort to avoid “ES7” as a term and prefer “ES next” or “ES2017 and beyond”.

Conclusion

ES2015 was a huge big bang release that provided equal parts excitement and confusion. Once we move past that the new yearly release cycle will make it much less overwhelming to keep up to date with the latest version of JavaScript and I’m excited to see that happen.