在Flash中,程序的代码需要被储存到Flash Player的虚拟机中才能被执行。这个虚拟机本身是基于栈的,因此在程序编译的时候,需要将代码转化为一组可以在虚拟机上运行的指令。
由于Flash Player虚拟机的栈空间很小,只有几MB,而程序可能非常庞大,因此不能一次性将所有指令加载到虚拟机中。相反,需要将程序分成几个部分,每次只将一部分加载到虚拟机中,并执行。这就是为什么Flash程序需要进行多次编译。
在Flash中,程序可以使用组件和库。组件是已经被编译好的代码,可以被其他程序重复使用。要使用组件,需要将组件库导入到程序中,然后将组件从库中拉到舞台上使用。
当我们写程序时,程序需要调用组件中的函数。这些函数在编译时需要被转化成指令并储存在虚拟机中。如果组件没有被加载,那么编译器就无法获得这些函数的指令。因此,如果在第一次编译中没有将所有需要使用的组件都加载到虚拟机中,那么编译器就无法将这些函数转化为指令。所以,需要进行第二次编译,将缺少的组件也加载到虚拟机中。
在第一次编译中,编译器只会编译代码中的主函数,以及与主函数有直接联系的函数和变量。其他的函数和变量不会被编译,只有当它们被调用时,才会被编译。
因此,在第一次编译中,程序只会执行主函数及其直接联系的函数和变量,其他的函数和变量都不会被执行。而在第二次编译中,由于所有的函数和变量都已经被编译,因此程序可以正常执行。
Flash程序可以运行在不同版本的Flash Player上。但是,不同版本的Flash Player可能有不同的编译方式和不同的虚拟机。因此,在编写Flash程序时,需要考虑运行该程序的目标平台,并根据目标平台选择合适的编译器和虚拟机。
有些版本的Flash Player需要进行更多次的编译,才能确保程序可以正常运行。因此,在编写程序时,需要考虑是否需要进行多次编译,并做好相应的准备工作。