首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dart对JavaScript -它们是编译或解释语言吗?

Dart对JavaScript -它们是编译或解释语言吗?
EN

Stack Overflow用户
提问于 2013-07-11 19:39:55
回答 2查看 6.5K关注 0票数 8

Dart被认为是一种编译或解释的语言吗?同样的问题也适用于JavaScript。

问题的原因:

我和dart的创始人一起做过看采访,在7:10,LA尔斯Bak说:

“在JavaScript程序中,在开始运行真正的程序之前实际上执行JavaScript。在Dart中,在执行main的第一条指令之前不执行任何操作。”

在我看来,他说的是JavaScript是一种编译语言,而Dart是一种解释语言。是真的吗?

Dart VM不是一个编译器吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-12 05:37:21

取决于“解释”和“编译”语言的定义。即使如此,它也始终取决于实现。

Lars的意思是JavaScript通过执行代码构建它的类结构(和其他全局状态)。在Dart中,全局状态是由语言语法描述的,因此只需要解析(即使这样,大多数状态也可以先跳过)。因此,Dart程序可以比JavaScript程序更快地开始执行“真实”代码。

这显然只适用于Dart VM,因为已经编译到JavaScript的程序必须使用JavaScript机制来构建它们的类。

编辑(更多细节):

例如,以下非常简单的类A

在达特:

代码语言:javascript
复制
class A {
  final x;
  A(this.x);
  foo(y) => y + x;
}

在JavaScript中:

代码语言:javascript
复制
function A(x) { this.x = x; }
A.prototype.foo = function(y) { return y + this.x; }

当Dart VM启动时,它通过遍历程序开始。它看到class关键字,读取类名(A),然后跳到类的末尾(通过计数开始和结束大括号,确保它们不在字符串中)。它不关心A的内容,直到实际实例化A。现在,在现实中,它实际上查看了类并找到了所有成员,但是在需要方法之前,它不会读取方法的内容。无论如何:它是在一个非常快速的处理步骤中这样做的。

在JavaScript中,事情变得更加复杂:快速VM可以跳过函数A的实际主体(类似于Dart的功能),但是当它看到A.prototype.foo = ...时,它需要执行代码来创建原型对象。也就是说,它需要分配一个函数对象(A),查找它的prototype属性,用一个新的函数对象来更改这个对象(添加一个新属性)。换句话说:为了甚至看到您有一个类,您需要执行代码。

票数 14
EN

Stack Overflow用户

发布于 2013-07-11 19:44:44

Dart编译成JavaScript,而JavaScript是一种解释语言。通常,通过“编译”语言可以理解被编译成特定于平台的机器代码的语言,在CPU上直接运行,并且不需要解释器来运行,JS和Dart都不是这种情况。所以我想说JS和Dart都被解释了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17601984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档