Dart是静态编译的,还是在运行时代码被解析并加载到VM中?

时间:2014-01-24 20:59:13

标签: dart

我试图理解为什么向Dart添加特征会导致内存中对象的形状发生变化,因此我很好奇它是如何在代码中加载的。

1 个答案:

答案 0 :(得分:4)

Dart是一种动态类型语言,可直接从源代码生成自己的机器语言,而无需中间字节码步骤。没有通用字节码(如JVM或llvm),而是直接编译成机器代码。

我想补充说,尽管直接编译为机器代码,但语言本身的设计并不允许C / C ++风格的编译器有效地生成快速有效的代码。这是设计,因为Dart似乎是试图填补JavaScript和Java之间的差距,而不是Java和C / C ++之间的差距。 Dart解决了许多使JavaScript难以优化的问题,最重要的是输入数字变量。

有一些努力将Dart环境移植到Windows / Mac / Linux以外的各种平台,但我还没有看到Dart的实际直接到机器语言编译器。这并不意味着它们不存在,我只是没有看到除了Linux Dart环境的端口以外的任何东西到Beagleboard和其他小型Linux发行版。

来自Dart常见问题

  

Q值。为什么Google没有构建可由多个目标定位的字节码虚拟机   包括Dart在内的语言?每种方法都有优势   缺点,但我们觉得在Dart的背景下它是有道理的   构建特定于语言的VM的原因如下:

     

Google已经开始使用多语言字节码:LLVM bitcode in   PNaCl。

     

即使字节码VM专用于Dart,语言VM也是如此   更简单,更快,因为它可以在更强的假设下工作   例如,结构化控制流程。这些假设使得   实施更清洁和优化更容易。

     

通用字节码VM会更大更慢   概括假设并增加Dart死亡的功能   代码:例如,使用共享堆进行多线程处理。

     

没有字节码VM是真正通用的;他们都做出了假设   某种语言的特权。语言VM留下更多空间   改进虚拟机并对优化进行深度更改   语言。一些Dart工程师写了一篇关于VM的文章   问题更详细。

关于Compiling Dart to Efficient Machine Code

的精彩演示