7

我已经阅读了有关 Google 即将推出的 DASH/DART 语言的文章,我觉得这很有趣。

我偶然发现的一件事是他们说他们将消除 JavaScript 固有的性能问题。但是这些性能问题究竟是什么?文中没有任何例子。这就是它所说的:

  • 性能——Dash 在设计时考虑了性能特征,因此可以创建不存在所有 EcmaScript VM 必须存在的性能问题的 VM。

您对这些固有的性能问题有什么想法吗?

4

3 回答 3

8

对于对动态语言即时编译器感兴趣的人来说,这个线程是必读的:http: //lambda-the-ultimate.org/node/3851

该线程的参与者是 luajit 的创建者、pypy 人、Mozilla 的 javascript 开发人员等等。特别注意 Mike Pall 的评论(他是 luajit 的创建者),尤其是他对 javascript 和 python 的看法。他说语言设计会影响性能。例如,他重视简单性和正交性,同时避免困扰 javascript 的疯狂极端情况。

那里讨论了许多不同的技术和方法(跟踪 jit、方法 jit、解释器等)。看看这个!

路易斯

于 2011-09-26T22:13:47.617 回答
6

这篇文章指的是来自 JavaScript 等极端动态语言以及原型继承的优化困难。

在 Ruby 或 JavaScript 等语言中,程序结构可以在运行时更改。类可以得到一个新方法,函数可以被 eval()'ed 存在,等等。这使得运行时更难优化他们的代码,因为结构永远不能保证被设置。

原型继承比更传统的基于类的语言更难优化。我怀疑这是因为基于类的 VM 有多年的研究和实施经验。

有趣的是,V8(Chrome 的 JavaScript 引擎)使用隐藏类作为其优化策略的一部分。当然,JS 没有类,所以 V8 中的对象布局更加复杂。

V8 中的对象布局要求标题中至少包含 3 个单词。相比之下,Dart VM 只需要标题中的 1 个单词。Dart 对象的大小和结构在编译时是已知的。这对 VM 设计人员非常有用。

另一个例子:在 Dart 中,有真正的列表(又名数组)。你可以有一个固定长度的列表,它比 JavaScript 的非真正数组更容易优化,并且总是可变长度。

通过此演示文稿阅读有关将 Dart(和 JavaScript)编译为高效代码的更多信息:http ://www.dartlang.org/slides/2013/04/compiling-dart-to-efficient-machine-code.pdf

Another performance dimension is start-up time. As web apps get more complex, the number of lines of code goes up. The design of JavaScript makes it harder to optimize startup, because parsing and loading the code also executes the code. In Dart, the language has been carefully designed to make it quick to parse. Dart does not execute code as it loads and parses the files.

This also means Dart VMs can cache a binary representation of the parsed files (known as a snapshot) for even quicker startup.

于 2013-04-27T03:27:40.410 回答
5

一个例子是尾调用消除(我相信有些人认为它是高性能函数式编程所必需的)。为 Google 的 V8 Javascript VM 提出了功能请求,但响应如下:

尾调用消除与 JavaScript 不兼容,因为它在现实世界中使用。

于 2011-09-25T15:24:01.120 回答