• home > webfront > ECMAS > AS >

    ActionScript3与ECMAScript 4的挽歌

    Author:zhoulujun Date:

    很多ES6的特性其实ES4里面早就有了,比如类,继承,块作用域等。ES4 未能发布的一个原因是步子过大的同时,浏览器跟不上又没有Bable等一些列工具转译,Adobe最终把ES4的特性全部在ActionScript上实现了,但是已经是昔日的黄花

    ES3到ES5,中间有10年窗口期,中间的故事不亚于《十字军的起源与东征的起因:三大宗教在耶路撒冷战因何因?》的史话

    本篇作为《ECMAScript进化史(1):话说Web脚本语言王者JavaScript的加冕历史》之番外篇

    JavaScript的演讲历史

    ES3之后的JS语言进化的尝试很早就开始了,同时有若干个方案,有具体实现的包括http://JScript.NET、ActionScript 3等。但作为ES4/JS2而为人所知的,是Mozilla的草案。草案本身不是BE写的,而是Waldemar Horwat。对这个草案到现在我还留有深刻印象的一个有趣特性就是基于namespace的API version。


    2005年开始重启ES4/JS2,主要是 Brendan Eich(JavaScript之父) 和开发了 AS3 的 macromedia(网页三剑客flash dreamweak fireworks 始祖,后被PS始祖Adobe收购)。

    实际上抛弃了Mozilla的草案,而转而以ActionScript 3为基础,当时Mozilla和Adobe走得很近,Adobe还开源了自己的VM送给Mozilla。这草案在某些方面比现在的ES6要走得更远,比如有相当强大的类型系统,支持泛型、nullable、interface、union type等——当然从现在的趋势看,ES7或ES8早晚会加入这些东西。这草案也继承了老的Mozilla JS2草案中的一些特性。比如前面提到的namespace——这特性与C++/C#中的namespace不同,我理解更接近某种弱化的annotation,比如public/private是以内置namespace实现的。


    2007 年Microsoft 和 Yahoo(Yahoo资深架构师 Douglas Crockford ['dʌɡləs]  ['krɔkfəd] ——JSON、JSLint、JSMin和ADSafe的创造者)

    突然表示觉得 ES4 太过庞大,并添加了太多他们不想要的东西。2007 年 4月,Yahoo和 Microsoft 开始平行起草另一个提案,一开始叫 ES3.1,也就是后来的 ES5,整体上是一个更为保守、渐进的提案。当时 TG-1 内部对 3.1 的定位有疑问,但允许了其存在。Brendan Eich对 ES4 的前景感到担忧,2007 年 10 月发布了 ES4 提案预览。M$ 和 DC 认为 BE 操之过急,发表了一些负面评论,双方闹翻。

    ES4早在1999年就开始提出了,花了近8年的时间开发,直到2007年实现,最后却因为Yahoo的Douglas Crockford和微软的反对被废弃了

    2009 年,各方最终同意将 ES3.1 改为 ES5 并正式发布。同时,开始进行下一个版本的规范 Harmony/ES6 的起草。


    ES3.1改名为ES5其实有僭越(就这么点东西好意思叫ES5?),但是也为ES6铺平了道路。ES4草案中还是有相当数量的特性最终被ES6继承了。包括 let、destructuring assign、generator 等。另一些特性则以更好的方式重生,如 ES6 module 之于 ES4 package,ES6 Symbol 之于 ES4 namespace 等。其他那些特性如 array comprehensions、运算符重载、decimal类型等,无论会不会在未来加入,自ES6开始的语言进化的道路已经确定,

    当年 ES4 未能发布的一个原因是步子过大的同时,没有有效的对新特性进行实践考验的方法。这一点在今天借助各类 transpiler 得以实现。

    但是Adobe最终把ES4的特性全部在ActionScript上实现了,所以2007年诞生的ActionScript3其实就是ES4的实现。

    2007年,Adobe推出带有ActionScript 3.0的Flash 9.0(对应Flash Professional CS3),以及Air 1.0 Beta。Air是Flash Platform的一部分,支持开发人员使用现有的Web开发技术(主要是Flash、ActionScript、HTML、JavaScript和CSS)进行多个平台(Windows、Macintosh、Android和iOS)的RIA程序开发。

    后来互联网上出现的海量基于ActionScript的游戏和软件证明了ES4的优秀。

    很多ES6的特性其实ES4里面早就有了。比如类,继承,块作用域...又重新捡起来实现一遍,啪啪。而有些ES6的特性设计的很烂,不如ES4好,可以称为倒退。静态类型检测在ES4里面也早就有了。FaceBook为了在在JavaScript上实现这个特性,开发了Flow。如果当初ES4通过了,也不用浪费FaceBook的大量人力去开发维护了。而TypeScript更加是对当初微软的反对打脸。里面使用了大量的ES4特性,啪啪。其实随着Type

    Script的升级,TypeScript特性比ActionScript更完善更好用了,基本上原来的ActionScript程序员都转到TypeScript过去了。

    JavaScript 升级路线的重点特性

    不过typescript,先用着吧,当年的google的 GWT 以为java 会一统天下,结果呢。呵呵

    不过google的小儿子 Dart 未来如何,拭目以待


    参考内容:

    ECMAScript 6 会重蹈 ECMAScript 4 的覆辙吗? - 贺师俊的回答 - 知乎

    ECMAScript 6 会重蹈 ECMAScript 4 的覆辙吗? - 尤雨溪的回答 - 知乎

    为什么 TypeScript 成功了,更先进的 ActionScript 却失败了? - 知乎




    转载本站文章《ActionScript3与ECMAScript 4的挽歌》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/AS/2019_0822_8481.html

    延伸阅读: