• static-type-inference

    static-type-inference

    这个编译过程非常重要,因为它寻找的是可能被转换为静态/基本类型的动态变量,底层编译器可以更好地对其进行优化。

    下面的代码使用一组动态变量来执行一些数学计算:

    1. public function someCalculations(var a, var b)
    2. {
    3. var i = 0, t = 1;
    4. while i < 100 {
    5. if i % 3 == 0 {
    6. continue;
    7. }
    8. let t += (a - i), i++;
    9. }
    10. return i + b;
    11. }

    变量abi仅用于数学运算,因此可以利用其他编译通道转换为静态变量。 在此传递之后, 编译器会自动将此代码重写为:

    1. public function someCalculations(int a, int b)
    2. {
    3. int i = 0, t = 1;
    4. while i < 100 {
    5. if i % 3 == 0 {
    6. continue;
    7. }
    8. let t += (a - i), i++;
    9. }
    10. return i + b;
    11. }

    通过禁用此编译过程, 所有变量都将维护最初声明它们的类型, 而不进行优化。