我来自第二个阵营,非常喜欢编程...我使用Pascal、后来是Delphi和Java进行了很多编程,但后来我决定女孩和吉他更酷...当我在2006年发现FlashPlayer时,我被它所提供的可能性所吸引,开始使用AS2进行编码...Flash 8更像是一个意外,当涉及到编码时,所以我很快就转向了MTASC和FlashDevelop,并很好地了解了这种语言...从那时起,我与任何严肃使用FlashPlayer平台的人一样面临着同样的挑战...所以这是我的观点:
AS2 vs. AS3
好的,最重要的是:语言 != API …… AS3核心语言是大部分顶层内容,还包括来自flash.utils
的以下内容:getDefinitionByName
和describeType
,以及Proxy
、Dictionary
和(可以说是)ByteArray
(其他任何东西都要么与FlashPlayer接口,要么可以使用核心语言构建)……在AS2中,这几乎是所有JSON值的有效类型(Boolean
、Number
、String
、Array
、Object
),以及Function
和ASSetPropFlags
……AS3语言和FlashPlayer之间的联系很小……例如mod_actionscript就是尝试将Tamarin VM作为Apache模块使用,当然它有完全不同的API……
比较核心语言,有差异...最终,我会说AS2比AS3更强大...你实际上可以在运行时改变整个语言,它是原型导向的(这是比基于类的继承更强大的功能),允许混入,AOP等等...AS2具有非常清晰和激进的语言设计...很少有人真正理解...AS2遭受了与 JavaScript相同的误解(对我来说,这是AS2的未经分类和不兼容的兄弟)...大多数人喜欢它,因为它如此宽容...例如PHP,除了其广泛的市场渗透率和易安装性外,这是其流行的主要原因...但JS和AS是非常高级,富有表现力和强大的语言,而PHP更像是一个用来肮脏地拼凑一些东西的工具(这不是关于PHP的问题,我只需要另一个宽容的语言进行比较)...问题是,大多数人在AS2(和JS)中使用的是宽容性...我很少看到AS2中基于原型的,函数式的,面向方面的甚至是适当的面向对象编程的使用...>here<我列出了一组真正酷的AS2功能,这些功能要么被糟糕地使用,要么很少被使用...
AS3是Adobe朝着Java的方向迈出的一步...它非常严格,在运行时甚至是静态的,但表现得确实更好...而且它也很苛刻,强迫你变得非常冗长...describeType
允许了一个全新的内省级别,Dictionary
是一个不错的时间节省器,Proxy
是AS2中Object::__resolve
的超级变种,弥补了所有已经失去的灵活性...
说到这种语言,我认为AS3实际上是一步后退...在高级语言指数级增长的时代,当Sun决定创建JavaFX Script,许多其他动态语言可以在JVM和CLR上运行时,Adobe决定创建一个新的、更静态的AS2版本和一个适合执行它的虚拟机...有点自相矛盾吧...
在比较API时,AS2和AS3 FlashPlayer API都有优缺点...后者的确更大...当涉及到它们的交集(显示列表、网络、XML处理)时,每种解决方案都有利弊...许多人有点不满,因为所有好的旧回调都消失了,被新的事件模型所取代...但是,如果您使用适当的IDE,就没有区别...但后者更清洁,更强大(还记得一个鼠标输入回调如何完全关闭所有子项吗?)...此外,这并不重要,因为您可以在AS2中重新实现AS3事件模型,也可以在AS2中重新实现AS2回调系统,两者都可以在几天内完成...最终,我会说AS3具有相当更大和更强大的API,在需要的情况下,您可以将其包装起来,以使其更简洁...所以最终,我真的认为AS3 API更好...没有过度简化的必要...
每个人抱怨的点在于需要进行一个巨大的改变... 直到 AS2,语言一步步发展,几乎完全向下兼容之前的版本... 结果是你需要进行彻底的切换,而不是缓慢过渡... 换句话说:选择 AS3 就意味着扔掉任何东西,这让很多人感到厌恶,特别是设计师,因为迁移代码是可行的,但移植 .fla 真的很难,至少是老版本,其中代码分布在无数个影片剪辑中... 但真的并不比 AS2 更困难... 它增加了一些限制,但拥有更多功能,并且解决了许多问题,这些问题实际上在开始使用以前的 ActionScript 版本时每个人都经历过...
尼古拉斯·卡纳斯(Nicolas Cannasse)是Haxe的创造者,曾多次提到此事,他在自己的博客上发表了一些关于此事的想法......当然,他将Haxe作为替代品进行展示有些有偏见......但我认为这是自然的...... Haxe的一个重要观点实际上是成为AS3的替代品,尼古拉斯非常渴望并能够提供一种替代方案,虽然作为主要语言设计师,最终他有自己的想法,决定语言的发展方向......但让我谈谈Haxe作为一种替代品(这可能与尼古拉斯的文章部分重复,但我只是试图总结我的观点)
Haxe作为替代品
我还没有尝试过Haxe,但它似乎是一个全才,无法真正取代AS3。
这是错误的... Nicolas 所在的 Motion-Twin 公司经常使用 Flash ... 实际上,Haxe 生成的 AVM2 字节码比 AS3 更快,并且允许使用 alchemy 操作码,因此,最终,Haxe 允许您编写更高效的 AVM2 解决方案... 作为一种语言,它真的更加丰富... Nicolas 的帖子指出,与 AS3 不同,Haxe 是一种开源语言... 这在实践中意味着,您可以加入社区并提出功能请求,甚至学习 OCaml 并直接做出贡献... FlashDevelop 的主要作者之一 Philippe Elsass 最近也对 Haxe 做了一个不那么积极的总结... 但是给出了一个简要概述... 它还链接到 Nicolas 的一篇帖子,介绍了MTypes的最强语言特性,这是 MotionTwin 在发布和开源之前的内部工作名称...
Haxe比AS3更加表达性......它具有泛型、类型化的一等函数、带参数的枚举等特性,这些在MTypes功能列表中没有列出......
using
关键字提供了一些重载可能性,但我真的不明白为什么方法重载有意义......对于未来版本,计划
多类型,提供类似的功能......操作符重载已经被讨论了很多次,很可能不会被实现,因为它使代码交换变得困难...最后,我认为Haxe是AVM2更好的语言......并且越来越好...一些社区成员在
stackoverflow问题中提供了更多学习Haxe的原因......
AS3的未来
我认为AS3不会被过快地推进...Adobe有更好的事情要做...Adobe使用FlashPlayer作为部署Flex应用程序的平台...这些应用程序是用MXML编写的,毫无疑问是一种非常强大的声明性语言,可以转换成AS3...这就是为什么Adobe需要AS3和AVM2快速运行,但并不需要更具表现力...随着Thermo(又名Flash Catalyst)的出现,设计师将被排除在实际编码过程之外,所有东西都将转移到Flex上,使用所有的Flex服务器解决方案...
我不喜欢Flex,坚持使用AS3对我来说不是一个选择...Adobe正在将Flash平台向Java平台移动,我不欣赏这一点...我总是更喜欢Flash而不是Java,因为它是如此轻巧,而ActionScript则是如此高效...我对AS3的新功能非常兴奋,但最终我决定继续前进,因为在我看来,AS3的开发开始停滞不前...
最终,选择你的道路取决于你...现在是MXML(和一点AS3)或Haxe...或者尝试编写一些具有LLVM前端的语言,并使用alchemy将其编译到AVM2中...Objective-C可能是个好主意...
所以无论你选择什么...祝你好运...
附言:我认为当你想表达一种高级、表达力强和动态的语言时,不应该使用“脚本”这个术语……Bash脚本也是一种脚本语言,但它确实与Ruby、Scala或所有ECMA方言完全不同……