performance - 是否有可能设计一种动态语言而不会造成显着的性能损失?

标签 performance programming-languages language-design dynamic-languages high-level

与 C/Java 相比,在许多情况下是否有可能设计出像 Ruby 或 Clojure 这样的东西而不会有显着的性能损失?硬件设计是否起作用?

编辑:重要的是我的意思是一个数量级,而不仅仅是十个百分点

编辑:我怀疑 delnan 对我来说是正确的意思是动态语言所以我改变了标题

最佳答案

性能取决于很多事情。当然,即使我们正在编译它,语言的语义也必须保留——你不能从 Ruby 中删除动态调度,它会显着加快速度,但它会完全破坏世界上 95% 的 Ruby 代码。但是,大部分性能仍然取决于实现的智能程度。

我假设,“高级”是指“动态”吗? Haskell 和 OCaml 是非常高级的,但它们是本地编译的,并且在某些极端情况下可以胜过 C# 或 Java,甚至 C 和 C++ - 特别是在并行性发挥作用的情况下。而且它们的设计当然不是将性能作为#1 目标。但是编译器编写者,尤其是那些专注于函数式语言的编写者,是非常聪明的人。如果您或我开始使用高级语言,即使我们使用例如LLVM 作为 native 编译的后端,我们无法达到这种性能。

让动态语言运行得更快更难——它们将许多决定(类型、类/对象的成员,...)延迟到运行时而不是编译时,虽然静态代码分析有时可以证明它在第 n 和 m 行中是不可能的,您仍然需要随身携带高级运行时,并在编译时执行静态语言的编译器可以执行的许多操作。甚至可以使用更智能的 VM 优化动态调度(Inline Cache 任何人?),但需要大量工作。这不仅仅是一种小型的新奇语言所能做的。

另见 Steve Yegge's Dynamic Languages Strike Back .

当然,什么是显着的性能损失?比 C 慢 100 倍读起来很多,但众所周知,80% 的执行时间花在 20% 的代码上 = 80% 的代码不会对整个程序的感知性能产生显着影响。对于剩下的 20%,您可以随时用 C 或 C++ 重写它并从动态语言中调用它。对于许多应用程序,这已经足够了(对于某些应用程序,您甚至不需要优化)。剩下的……好吧,如果性能如此重要,您应该适本地用一种专为性能设计的语言来编写它。

关于performance - 是否有可能设计一种动态语言而不会造成显着的性能损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3741061/

相关文章:

c++ - 如何处理在方法中间在内存中移动的对象?

language-design - 在谈论编程语言时,Magic 的定义是什么?

c++ - string += s1 和 string = string + s1 之间的区别

C++代码性能字符串比较

java - 重复是因为 Oracle 太快还是多线程?

r - 查找稀疏矩阵行中的交集

javascript - 基于原型(prototype)的 OO 与基于类的 OO 相比有哪些优势?

java - 为什么 ADT 好而继承不好?

python - 为什么 Python 语言没有 writeln() 方法?

java - Java 7当前的Lambda提议的复杂性? (2010年8月)