是否有可能设计一种没有显着性能损失的动态语言?

Ste*_*idt 4 performance programming-languages dynamic-languages language-design high-level

与C/Java相比,在许多情况下是否可以设计类似Ruby或Clojure的东西而不会显着降低性能?硬件设计是否起作用?

编辑:有意义的是我的意思是数量级,而不仅仅是十次

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

小智 8

性能取决于很多事情.当然,语言的语义具有即使我们编译它被保存下来 - 你不能从红宝石删除动态调度,这将drmatically加快速度,但它会完全打破了所有Ruby代码95%,在世界上.但是,大部分性能取决于实施的智能程度.

我认为,"高级别",你的意思是"动态"?Haskell和OCaml中是非常高级的,但都是本地编译,可以在一些极端情况优于C#或Java,甚至C和C++ - 尤其是如果并行进场.他们当然没有将性能设计为#1目标.但编译器编写者,特别是那些专注于功能语言的编写者,是一个非常聪明的人.如果你或我开始使用高级语言,即使我们使用例如LLVM作为本地编译的后端,我们也无法接近这种性能.

制作动态语言运行速度快是很难的-他们推迟许多决定(类型,一类的成员/对象,...)运行时,而不是编译时,虽然静态代码分析有时证明它不可能在线路n和m,你仍然必须携带一个高级运行时,并做一些静态语言编译器在编译时可以做的事情.甚至动态调度也可以通过更智能的VM(Inline Cache,任何人?)进行优化,但这需要做很多工作.不仅仅是一种新的小型语言可以做到的,就是这样.

另见Steve Yegge的动态语言反击.

当然,什么是重大的性能损失?比C慢100倍读起来就像很多,但大家都知道,执行时间80%的代码中20%是花在=代码的80%,不会对整个程序的性能percieved显着影响.对于剩余的20%,您始终可以使用C或C++重写它,并使用动态语言调用它.对于许多应用程序,这就足够了(对某些人来说,甚至不需要优化).对于其他......好吧,如果性能非常重要,那么你应该用一种专为性能设计的语言来编写它.