Dart命令支持JIT和AOT模式

1. JIT模式支持两种方式,

  • 直接在dart VM中运行dart source code

     //hello.dart
     int add(int a, int b) {
         return a + b;
     }
    
     void main() {
         var sum = add(5,100);
         print("sum is $sum");
     }
    
    $ dart hello.dart
     sum is 105
    
  • 先把dart source code编译成dill binary,然后在dart VM中运行dill binary , 生成的dill文件中包含经过词法分析,语法分析和语义分析后的带标记的抽象语法树AST,dart称之为Kernel AST, dill binary是跨平台的格式, 可以在不同平台的dart VM中运行。

    $ dart compile kernel hello.dart # generate hello.dill
     $ dart run hello.dill
    

2. AOT模式支持两种方式

  • 直接把dart source code编译成可执行文件,可执行文件包含source code的机器码,以及简化版的dart runtime

    $ dart compile exe hello.dart  # generate executable hello
     $ ./hello
     sum is 105
    
  • 把dart source code编译成snapshot,snapshot包含source code的机器码,以及代码运行过程中产生的heap object全部dump到snapshot,snapshot可以通过precompiled dart runtime快速加载运行。

    $ dart compile aot-snapshot hello.dart   # generate hello.aot
     $ dartaotruntime hello.aot
    
  • Dart还是支持把dart source code转化为js,然后用js引擎来执行:

    一个简单的dart代码,转换为js的代码比较复杂,而同样的typescript也可以把转为js,生成的代码质量比较高。