(转)Flex的编译过程--ActionScript字节码(ABC)

     Flash客户运行时环境          

     ActionScript程序可以在三种不同的软件应用程序(都是Adobe出品)上执行:Flash播放器、Adobe AIR和Flash Lite。Flash播放器在网页浏览器中或在桌面单机模式下执行ActionScript程序。Flash播放器几乎没有操作系统访问权(例如:它不能管理文件、控制窗口或访问大部分硬件)。     

     Adobe AIR在桌面上执行ActionScript程序并且和桌面操作系统完全集成(例如:它可以管理文件,控制窗口并访问硬件)。Flash Lite在移动设备,如手机上执行ActionScript程序。本书出版时,Flash Lite可以执行ActionScript 2.0但不能执行ActionScript 3.0编写的ActionScript程序,而Flash播放器和Flash AIR可以执行ActionScript 3.0编写的程序。因此,本书讲授的技术适用于Flash播放器和Flash AIR但不适用于Flash Lite,除非它增加了对ActionScript 3.0的支持。       

     一般来说,Flash播放器、Adobe AIR和Flash Lite都被称为Flash客户运行时环境(或简称Flash运行时),因为当ActionScript程序被执行或“运行”时,它们管理着程序。Flash运行时在Windows、Macintosh和Linux以及多种不同的移动硬件设备上可用。因为ActionScript程序是被Flash运行时,而不是被特定的操作系统或硬件设备执行,每个ActionScript程序都被认为是可移植的,因为它可以在不同的硬件设备(手机,游戏控制台)和操作系统(Windows,Macintosh和Linux)上运行。       

     在非正式的讨论中,术语ActionScript虚拟机有时被用作Flash客户运行时环境的同义词。然而,这二者之间还是有差异,所以它们不应当被互换使用。ActionScript虚拟机(AVM)在技术上是在Flash播放器、Adobe AIR和Flash Lite内部执行ActionScript程序的软件模块。但是每个Flash运行时还负有其它责任,如显示内容到屏幕、播放视频音频以及和操作系统通信。运行ActionScript 3.0代码的ActionScript虚拟机的特定版本称为AVM2,运行ActionScript 1.0和ActionScript 2.0代码(本书未包含)的ActionScript虚拟机的特定版本称为AVM1。      

      编译ActionScript程序在可被Flash运行时执行之前,必须从人可读的ActionScript 3.0代码转化为一种Flash运行时所理解的浓缩的二进制形式,称为ActionScript字节码,或ABC。然而,ActionScript字节码本身不能被Flash运行时执行;而必须被封装到一个称为.swf文件的二进制容器文件中,.swf文件把字节码和任何ActionScript程序所需的嵌入媒体资源都存储到Flash文件格式或称SWF中。将ActionScript程序转化为字节码的过程叫作编译该程序,生成.swf文件的过程叫作编译该.swf文件,有时也叫输出或发布该.swf文件。      

     要编译ActionScript 3.0程序和.swf文件,我们使用一个叫编译器的软件模块。编译ActionScript代码的编译器叫作ActionScript编译器;生成.swf文件的编译器叫作SWF编译器。任何声称完全支持Flash文件格式的SWF编译器都包括一个ActionScript编译器。自然,Flex Builder 2和Flash制作工具都包含一个SWF编译器(并额外包括一个ActionScript编译器)。Flex Builder 2和Flash制作工具共享同一个ActionScript编译器,但却有不同的SWF编译器——分别叫作Flex编译器和Flash编译器。Adobe还把Flex编译器作为一个单独的命令行程序提供,叫作mxmlc。mxmlc编译器包含在Adobe的免费开发者工具包Flex 2 SDK中,在http://www.adobe.com/go/flex2_sdk可以得到。

    即时编译(Just-In-Time Compilation)     

     当ActionScript程序运行的时候,Flash运行时读取编译过的ActionScript字节码并将它翻译成本地机器码指令,在它所运行的特定的计算机硬件上执行。很多情况下,本地机器码指令被保存下来以便它们可以再次使用而不需要重新从ActionScript字节码翻译。         

     将ActionScript 3.0代码转化为字节码叫作编译,同样,将ActionScript字节码翻译成本地机器码并留待后续执行的过程也叫作编译。首先,程序员将人可读格式的代码编译成Flash运行时所理解的格式(ActionScript字节码),然后,Flash运行时自动将ActionScript字节码编译成运行程序的硬件所理解的格式(本地机器码),后面这种编译形式(字节码到机器码)被称为即时编译,或JIT,因为它就在程序需要特定的被编译的字节码之前立即发生。即时编译有时也叫动态翻译。有经验的程序员可能有兴趣了解,类定义的顶层不是即时编译的(因为它只被执行一次)。

posted @ 2012-05-21 17:40  ☆A希亿  阅读(1594)  评论(0编辑  收藏  举报