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. }

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