划时代的Adobe Alchemy

怕地址失效,贴出来再说:

Adobe 自从2007年中推出了AS3支持了面向对象的开发方 式之后, 可谓动作不断. 去年又将AVM2的核心虚拟机tamarin 捐赠给了ECMA4 , 又将FlexBuild2直接升级到FlexBuild3, 这不,在08年末,又蹦出一个 Adobe Alchemy, 这在战略上具有极为重要意义. 而FLASH 从一个简单的动画客户端,一跃升级成一个未来富媒体应用程序的平台. 从这一系列战略步骤,不难看出ADOBE想成为WEB乃至桌面开发霸主的野心! 微软你要小心了.
那么你可能要问了, 为什么Alchemy这么重要呢? 作为FLASH实践者, 效率问题是众所周知的. 因为, FLASH中运行的代码是 ACTIONSCRIPT, 它是一个脚本语言 .而这个语言是运行在FLASH内部的AVM2虚拟机 上的. 所以它的一些功能都需要经过, 语言解释成AVM2虚拟机字节码 ,然后AVM2运行字节码,最后由本地NATIVE语言 ,也就是本机2进制程序执行.虽然这解决了平台无关的问题,但是带 来一个副作用,就是比较慢,这就是为什么FLASH上一直没有杀手级应用的主要原因.
从本质上来说, 这是一个构架上的问题. 而Alchemy 的出现,从构架上,改进了这个问题,你可以使用C/C++编写核心,快速的算法,让AS3进行调用, 达到加速的目标 . 这在过去,你只能使用ADOVE提供给你的内置native 程序. 现在,你可以自己干这件事情了. 既解决了平台无关的问题,又解决了效率的问题,甚至可以利用FLASH本身几十亿现有的客户端的优势,解决了渠道问题.可以这样说, Alchemy 打开了一个前所未有的时代!
让我们看看 Alchemy 到底做什么. 从ADOBE的说明文档上可以看到, Alchemy 是一个 运行在低层的虚拟机 (Low Level Virtual Machine) ,他运行在AVM2之下. 那你又要问了.既然有了一个虚拟AVM2了,为什么还要一个LLVM? 其实, LLVM 将C/C++代码进行编译, 并且生成RISC-LIKE指令的字节码, 存储在缓冲区之中, 在FLASH运行开始的时候, 实时翻译成机器相关的本地代码 . 需要调用的时候是调用翻译之后的2进制本地代码.以此来提高整体速度.这就是LLVM的关键技术, 而运行时译 (Runtime-Compile) 这种技术有点像 .NET . 而这种LLVM和AVM2的区别是, AVM2实时解释运行脚本代码,LLVM 预编译本地运行 .可以这样认为 AVM2 是 JAVA虚拟机, LLVM是 .NET虚拟机.他们在构架上处于不同的层次,满足不同需求对速度的要求.
当生成编译完成后,字节码需要保存在一个缓冲区之内. 由于在框架之内需要和AVM2兼容,所以这个缓冲区,将以 AVM2能识别的BYTEARRAY 形式保存在内存之中. 即使使用反编译工具,反编译这个SWF文件,也看不到任何代码. 并且, alchemy自动生成一个 AS3的接口文件,以方便AS3程序进行调用 . 值得注意的是, 所有C/C++编译之后的数据,都以 SWC 函数库 的形式生成 , 用户可以在自己的工程里 IMPORT.经过使用后发现,由 Alchemy 生成的SWC文件是比较大, 比 C/C++源文件大的多.即使一个只有几十来行的纯C 功能,生成SWC后都会有100多KB. 参考ADOBE的文档上说, 编译C/C++的代码,会将C/C++所需要的所有库,比如C标准库 统统放到一个SWC里去,并且严格遵循POSIX标准. (可移植操作系统接口) 由于这种机制的存在, 我们甚至可以在C/C++里嵌入线程的支持, 来运行同步或者异步的功能. 从而弥补了FLASH是单线程这一不足! 这将是一件美妙的事情! 而本人认为,由于C/C++代码是公用一个C标准库的,所以只要SWC中的功能越多,那么从空间效率上就越是划算. 并且在目前的宽带之下,多个100来KB问题不是太大.
当然,安全问题,也是alchemy的重头戏, 我们知道, FLASH 对安全问题是有一套非常严格的措施的,比如访问本地资源后,就不能访问远程资源,访问这个域的资源后,就不能访问其他域的资源.如果你要访问,就要在另外 一个域上安装一个沙箱(SecurityBox)文件,才能顺利访问. 而alchemy将C/C++带入FLASH之中,而C/C++ 是否能坏了这个规矩,让应用程序出轨呢? 答案当然是否定的,一旦这个程序被调用之后,其C/C++程序被严格的运行在一LLVM上,LLVM作为一个代理机构,向上,提供了对C/C++的平台支 持,比如独立的内存空间,独立的堆栈空间,独立的线程管理机构,等等. 向下将2进制程序输送到 本机CPU进行执行 . 所以安全问题上是非常到位的, 所以对C/C++来说,只要LLVM环境没有提供的,它将永远访问不到.
Adobe已经对 alchemy 进行了比较深度的优化,并且我相信以后将继续下去.就从用户来说,由于有了alchemy 的出现,一些对速度要求较高的算法,都可以使用C/C++来代替 . 由于接口上都是AS3的接口,所以移植现有的程序将会非常轻松.比如目前游戏开发中广泛使用的那个BitmapData.CopyPixel 如果用C纯代码进行改写,那么速度将提高几十倍之多 .
总结. Alchemy 的出现,开启了一个全新的时代, 未来你将会发现网业上不再是简单画面,而是充满动态的不同的效果,给于用户全新的体验.随着LLVM提供的功能加多,比如将显卡硬件的功能作为一个抽象接口提供给C/C++调用,那么将来UNREAL3出现在网页上,你千万不要惊奇.甚至WOW出现在网页上,你也不要惊奇. 因为新时代的门已经打开!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[menu_102] 70001=文件(&F) 40024=开始捕获(&S) 40025=停止捕获(&T) 40045=保存配置(&C) 40046=载入配置(&O) 40034=保存数据包数据到文件 40035=载入数据包数据文件 40039=导出 TCP/IP 流报告(&E) 40001=保存数据包摘要(&A) 40009=属性(&P) 40002=退出(&X) 70002=编辑(&E) 40031=复制(&C) 40007=全选(&A) 40015=全部取消选定(&D) 40032=下一项(&N) 40033=上一项(&P) 70003=查看(&V) 40005=显示网格线(&G) 40028=显示气球提示(&T) 40010=HTML 报告 - TCP/IP 流(&H) 40011=栏位设定(&N) 40012=自动调整栏的宽度(&A) 70004=选项(&O) 71001=显示模式(&M) 41101=自动(&A) 41102=ASCII(&S) 41103=16进制(&H) 71002=显示协议(&P) 41201=&TCP 41202=&UDP 41203=&ICMP 40027=显示 ASCII 码大于 127 的字符(&C) 40041=显示捕获时间(&T) 40042=将 IP 地址解析为主机名 40044=显示过滤设置 40040=高级选项(&A) 40043=捕获过滤设置 40026=选择设备(&O) 70005=帮助(&H) 40003=关于(&A) 41104=&URL 列表 [menu_104] 70001=Popup1 40010=生成 TCP/IP 流的 HTML 报告(&H) 40039=保存 TCP/IP 流报告(&E) 40001=保存数据包摘要(&A) 40011=栏位设定(&N) 40012=栏位自动宽度(&A) 40007=选择全部(&A) 40015=取消已选定(&D) 40031=复制(&C) 40032=下一项(&N) 40033=上一项(&P) 70002=Popup2 [dialog_105] caption=属性 1=确定 [dialog_108] caption=捕获选项 1007=原始套接字 (仅Windows 2000/XP) 1008=使用 WinPcap 包捕获驱动 1005=List1 1=确定 2=取消 1006=捕获方式 1009=选择网卡: 1045=选择网卡: [dialog_112] 1=确定 [dialog_113] caption=高级选项 1035=即时显示模式 - 捕获的同时列出 TCP/IP 会话 1011=每行字符数: 1013=显示时,在每 1025=显示 ASCII 字符 1026=在每行开头显示偏移量 1014=自动决定显示模式时要检查的字符数: 1032=不可显示的 ASCII 字符替换为: 1036=自动模式中, 若数据长度大于此限制则不显示16进制数据 1038=在下部面板中不显示数据长度大于此限制的项 1019=选择 1022=选择 1029=选择 1=确定 2=取消 1010=16进制显示选项 1015=个字符后插入额外的空格 1016=文字颜色 1017=源于本地主机的 TCP/IP 流的文字颜色: 1020=源于远程主机的 TCP/IP 流的文字颜色: 1030=捕获时间的文字颜色: 1031=常规显示选项 1034=捕获 1039=KB 1041=KB 1042=捕获同时显示 TCP/IP 会话内容开始的部分 1043=仅显示 TCP/IP 统计数据, 不在文件中保存捕获数据 1044=捕获时亦获取进程信息 1045=摘要模式 (每个连接之间不换行) [dialog_114] 1=确定 2=取消 3=清除 1037=输入一条或多条过滤规则, 以空格或回车分隔。以下是过滤字规则的几个例子: [dialog_1096] caption=栏位设定 1003=上移(&U) 1004=下移(&D) 1006=显示(&S) 1007=隐藏(&H) 1008=默认 1=确定 2=取消 1000=钩选要显示的内容, 用上移或下移按钮排列显示顺序 1002=栏位宽度(像素): [strings] 4=%d 个 TCP/IP 会话 5=, 选定 %d 个 6=创建本文件使用的是 7=选择保存文件的名称 8=数据包摘要 9=无法启动选定网卡上的包捕获。 10=该项所含数据长度超过 %d KB 限制。 11=可使用导出选项将此项保存到文件中。 12=此 TCP/IP 会话太大,无法在捕获同时显示。 13=停止捕获后将显示会话的完整内容。 14=正在加载... %d 15=已捕获 %d 个数据包 16=错误: 无法创建数据包文件! 17=正在捕获... 18=选择用于保存已捕获数据的文件名 19=载入存有数据包数据的文件 20=确定要停止捕获并退出 SmartSniff 吗? 21=选择用于保存已捕获的数据包流的文件名称 22=数据包流报告 23=当前操作含有非常大的数据包流,载入过程可能很慢,要继续吗? 24=选择要保存的配置文件名 25=选择要载入的配置文件 51=捕获过滤选项 52=显示过滤选项 101=字节 501=文本文件 502=制表符分隔的文本文件 503=空格分隔的表格化文本文件 504=HTML 文件 - 水平方式 505=HTML 文件 - 垂直方式 506=XML 文件 521=ICMP 522=TCP 523=UDP 541=文本文件 542=HTML 文件 543=原始数据文件 601=SmartSniff 数据包文件 602=tcpdump/libpcap 文件 621=SmartSniff 配置文件 1001=编号 1002=协议 1003=本地地址 1004=远程地址 1005=本地端口 1006=远程端口 1007=数据包数量 1008=包含封装信息的总数据量 1009=捕获时间 1010=不含封装信息的数据量 1011=服务名称 1012=本地主机 1013=远程主机 1014=进程号 1015=进程文件名 1051=IP 地址 1052=设备名称

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值