zoukankan      html  css  js  c++  java
  • ASC 2.0编译器

    ASC2.0(Action Script Compiler)是Flash builder 4.7 beta中内置的新版编译器,相对于老版本的编译器优化了很多内容,当然也增加了一些新的特性,比如inline选项就比较实用.


    ASC2.0优化

    1.编译时将尝试直接计算结果
    字符串拼接(+)
    算数运行算( +, -, * , / )
    逻辑运算( && , || , !)
    位逻辑运算( & , | , ^ )
    位移运算( << , >> , >>> )

    1 var s:int = "a" + "b";    // ==> var s:int = "ab";
    2 var i1:int = 1 + 2;        // ==> var i1:int = 3;
    3 var i2:Boolean = 1 > 2;    // ==> var i2:Boolean = false;
    4 var i3:int = 10 & 1;    // ==> var i3:int = 1;
    5 var i4:int = 10 << 1;    // ==> var i4:int = 20;

    2.编译时尝试直接对函数计算结果

    直接运算的函数包括: int() uint Number() Boolean() String()

    1 var s:String = String(1);    // ==> var s:String = "1";

    3.常量替换(当常量初始值在编译时不可获取值时除外)

    const 常量 会被将值直接替换到使用的地方

    1 const A:int = int("3") + 4; // 编译时可直接计算结果为7
    2 const B:Number = Math.random(); // 编译时不可计算B的值
    3 var i1:int = A; // ==> var i:int = 7; 而不用找到A的值再赋给i
    4 var i2:int = B; // 这里不会在编译时为i2赋值B,因为B的值在编译时不可得
    4.常量定义提前,这是由于常量替换的原因
    1 var t1:int = varA;    // 0
    2 var t2:int = constA;// 5 由于常量替换,这里等同于 var t2:int = 5;
    3 var varA:int = 5;
    4 const constA:int = 5;
    5 trace(t1, t2);
    6 // ASC2.0 为 0, 5
    7 // 旧编译器 为 0, 0 这里需要注意下

    5.if (false) { } 的代码会在编译时直接忽略掉, 而不会编译到swf里

    该特性也可以当做一个条件编译来看待,行为类似于java

    6.常量类有可能不用初始化
    下面的类将不用在运行时被初始化,根据常量替换原则,所有使用到值的地方将会被常量值直接替换.

    class Fruit
    {
        public static const APPLE:int = 1;
        public static const PEAR:int = 2;
    }
    var fruit:int = Fruit.APPLE;

    7.逻辑组合赋值运算将减少一次赋值操作
    &&= ||=

    1 // 旧的编译器
    2 a &&= b; // ==> a =  a ? b : a;
    3 a ||= b; // ==> a = !a ? b : a;
    4 // ASC2.0将编译为
    5 a &&= b; // ==> if(a){ a = b; }
    6 a ||= b; // ==> if(!a){ a = b; }

    8.组合赋值运算时将减少一次函数调用(该优化测试时未发现,仍未旧编译器版本)

    1 onlyOnce().a += 2; // onlyOnce() 仅调用一次,旧版编译器会调用2次
    2 // AS2.0编译后的行为将会类似于下面的C代码的行为
    3 int &a = onlyOnce().a;
    4 a += 2;
    5 // 旧版本
    6 var a = onlyOnce().a;
    7 onlyOnce().a = a + 2;

    ASC2.0优化的bug

    1 function foo():void { }
    2 var foo:int = 5;
    3 foo();
    4 // 旧版本中会在编译时报错直接报错
    5 // Error: Call to a possibly undefined method foo.
    6 // ASC2.0会把该问题留给运行时报错

    更多的ASC2.0优化的内容请看这里.

  • 相关阅读:
    【刷题-LeetCode】204. Count Primes
    【刷题-LeetCode】205. Isomorphic Strings
    【刷题-LeetCode】207. Course Schedule
    剑指offer题解——找出数组中重复的数字
    关于c++中vector操作
    动态规划算法
    分治算法
    从零学python——组合数据类型
    从零学python—PyInstaller库的介绍
    从零学python——代码复用与函数递归
  • 原文地址:https://www.cnblogs.com/eaststar/p/3140140.html
Copyright © 2011-2022 走看看