• (转)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,因为它就在程序需要特定的被编译的字节码之前立即发生。即时编译有时也叫动态翻译。有经验的程序员可能有兴趣了解,类定义的顶层不是即时编译的(因为它只被执行一次)。

  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2511974.html
Copyright © 2020-2023  润新知