2008年9月13日星期六

不要再说ActionScript与JavaScript是亲兄弟了

ECMAScript 4被终止,ECMAScript 3.1获胜。package和namespace将不会出现在ECMAScript的正式规范中。ActionScript3宣称完全遵照ECMAScript4,发生这件事情使得开发者对于ActionScript未来的前景感到迷茫。我判断ActionScript将会继续沿着现有的轨迹发展下去,最终与JavaScript分道扬镳。

虽然在很多ActionScript的教程中,都说ActionScript与JavaScript很像,它们是亲兄弟。但是这样说其实是在误导读者,ActionScript和JavaScript的运行环境其实差别非常巨大。

ActionScript是一种编译型语言,编译为跨平台的字节码运行在AVM虚拟机上,通常使用支持所见即所得的RAD开发工具(Flex Builder)来做开发。ActionScript由浏览器插件来支持,它需要等待浏览器中的文档全部加载完之后才能开始运行。 ActionScript的运行环境在各方面都与Java非常相似,所以我们看到ActionScript与Java非常相似毫不奇怪。从 ActionScript3开始,ActionScript放弃了很多动态的特性(例如eval),现在它几乎变成了一种静态类型的语言。

JavaScript是一种解释型语言,没有编译的过程,目前还没有运行在虚拟机上,通常使用一些简单的文本编辑器来编辑(例如UltraEdit、 EditPlus、Notepad++、Vim等等)。JavaScript由浏览器提供原生的支持,它不需要等待浏览器中的文档全部加载完之后才能开始运行(支持对于文档的增量呈现)。JavaScript一直都是一种动态类型的语言,它甚至要比PHP、Python、Ruby这些动态类型语言更加动态和灵活。这些动态的特性正是JavaScript生命力的源泉,也是众多Web开发者喜爱JavaScript的原因。

正是由于ActionScript和JavaScript运行环境之间的巨大差别,使得从ActionScript3开始ActionScript就与 JavaScript分道扬镳了,ActionScript3投入了Java的怀抱。然而,也正是由于运行环境之间的巨大差别,对于 ActionScript可行的发展道路,对于JavaScript来说并不是可行的。

ECMAScript想用一套统一的规范来支持这两种运行环境差别如此巨大的语言,这是一件非常困难的事情。ActionScript仅仅是Adobe一家的产品,厂商博弈之后得到了对于Adobe不利的结果是很正常的。

没有评论: