当前位置 : 主页 > 网络安全 > 测试自动化 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
与C / Java相比,在许多情况下是否可以设计类似 Ruby或Clojure的东西而不会显着降低性能?硬件设计是否起作用? 编辑:有意义的是我的意思是数量级,而不仅仅是十次 编辑:我怀疑delnan是
与C / Java相比,在许多情况下是否可以设计类似 Ruby或Clojure的东西而不会显着降低性能?硬件设计是否起作用?

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

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

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

我认为,“高级别”,你的意思是“动态”? Haskell和OCaml是非常高级的,但它们是本地编译的,并且在某些极端情况下可以胜过C#或Java,甚至是C和C – 尤其是在并行性发挥作用的情况下.他们当然没有将性能设计为#1目标.但编译器编写者,特别是那些专注于功能语言的编写者,是一个非常聪明的人.如果你或我开始使用高级语言,即使我们使用了例如LLVM作为本机编译的后端,我们不会接近这种性能.

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

另见Steve Yegge’s Dynamic Languages Strike Back.

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

网友评论