如何评价 ECMAScript 2016(ES7)只新增2个特性?

只包含了一个数组方法和幂运算符,一些热门的特性并没有添加到其中,比如 async function。 相关文章:The final feature set of ECMAScript 2016 (ES7)
关注者
423
被浏览
30534
首先要知道:从 ES2016 开始,ECMAScript 标准的制定原则是成文标准要从事实标准中诞生实现先于标准存在,进入标准草案必须有 JavaScript 引擎实现的支持(按照流程,起码要 2 个 JavaScript 引擎的稳定实现,而主流常青浏览器里 JavaScript 引擎总共也才 4 个:FireFox 的 SpiderMonkey,IE/Edge 的 Chakra,Chrome/Opera 的 V8,Safari 的 JavaScriptCore )+ 社区里有充分的人气 + 足够的 test 262 测试,这样才符合每年都发布新版标准的节奏而不至于用各种不成熟的特性 break the Web。所以 ECMAScript 标准现在相当于事实标准的 Snapshot 而已 —— 到了每年年初的 deadline 有多少标准进了 Stage 4,就有多少标准进入当年的草案。今年已经到达 Stage 4 的标准少,自然草案里的内容也少了(因为 ES2015 比较特殊,相当于一下补充了十几年的债+还没启用新流程,内容比较多,没收尾完所以分散了大量精力,不过几大引擎开发中的版本应该都达到 80% 以上了,到明年应该就全力放在新流程上了)。

拿题主说的 async 来说(话说 fetch 是怎么回事,那不是 JavaScript 这个次元的东西,那是 Web API ,归 Web 标准(Fetch Standard)管诶……),没进到 Stage 4 原因是上次 TC39 开会的时候只有 Chakra 和 Babel 有实现(SpiderMonkey 快了,但是当时遇到了一些问题),而且还没有写 test 262 测试……按照标准是不可以进下一步的(tc39-notes/nov-17.md at master · rwaldron/tc39-notes · GitHub)。虽然现在 V8 和 SpiderMonkey 里的 async 也快 land 了(别忘了 JS 引擎现在都是 6 周发一版),test 262 测试也在写了(Add tests for async functions by bterlson · Pull Request #479 · tc39/test262 · GitHub),不过没赶上这个月底 TC39 开会的议程,下一次 TC39 开会是 3 月底,而今年的 deadline 是 1 月 28 日……赶不上 deadline 了,等明年吧←_←

另外 JavaScript 标准的实现/标准分离情况跟 Web 标准完全不是一个等级的,维护各种 proposal 和做 JS 引擎实现的很大程度是同一拨人,而且各个 JS 引擎团队经常沟通交流的,不存在割裂的问题。加上现在的几大 JavaScript 引擎都是开源的(给 M$ 鼓个掌),开发流程也都是允许外部参与的,大不了直接去看友商的代码,给人家提 issue/bug/patch 嘛……拿软件工程的术语来说,以前的标准制定流程更像是教材们最爱用来做反面教材的瀑布模型,现在是敏捷开发了,倒有点 Scrum(Scrum (software development))的味道。

所以作为开发者,想要标准里有更多的新东西怎么办?用起来啊!实验性项目可以直接用,非实验项目用 polyfill,或者用 Babel 之类的 transpiler(注意,Babel 在 ECMAScript 流程里也算一种实现)。不敢在浏览器用,也可以在 Node.js 这样的地方用。用得越多,反馈越多,厂商越重视+越好改进,越快进下一个 Stage(何况人气本来就是进下一个 Stage 的标准之一),只要赶上了下一年的 deadline,就进标准了啊。而且标准制定过程都是完全公开的,可以去 Github 提交新的 proposal (传送门:tc39/ecma262 · GitHub)和帮着写测试(传送门:tc39/test262: Official ECMAScript Conforman...)啊,不需要什么资格,签个协议表明一下你无偿做就可以提 pull request 了,只要是好东西,JS 引擎厂商会帮你完成剩下的事(当然如果对相关姿势不够熟的话还是不要添乱了,TC39 里好多大忙人,不要用噪音拖人家后腿,往贡献使用率努力就好,比如我:)…… )。

附之前画的 ECMAScript 标准制定流程图解,原图发表在 alinode 团队博客(alinode(beta)