与C/Java相比,在许多情况下没有明显的性能损失的情况下,可以设计诸如Ruby或Clojure之类的东西吗?硬件设计起作用吗?

编辑:重要的是,我的意思是大幅度的顺序,而不仅仅是十级承受人

编辑:我怀疑德尔南对我来说是正确的意思是动态语言,所以我更改了标题

有帮助吗?

解决方案

性能取决于许多事情。当然,即使我们正在编译语言,也必须保留该语言的语义 - 您无法从Ruby中删除动态调度,它将速度加快速度,但它将完全破坏世界上所有Ruby代码的95%。但是,尽管如此,大部分绩效取决于实现的智能程度。

我认为,按“高级”,您的意思是“动态”吗? Haskell和Ocaml非常高级,但在本地进行了编译,并且在某些角落的情况下甚至可以胜过C#或Java,甚至可以胜过C和C ++,尤其是如果平行性发挥作用。而且,他们当然并没有以#1目标的表现设计。但是,编译器作家,尤其是那些专注于功能性的语言,是一个非常聪明的人。如果您或我开始使用高级语言,即使我们使用EG LLVM作为本机汇编的后端,我们也不会接近此表演。

使动态语言快速运行更困难 - 它们将许多决策(类型,类/对象的成员)延迟到运行时而不是编译时,而静态代码分析有时可以证明在第n和m行中不可能证明这是不可能的您仍然必须随身携带高级运行时间,并做很多静态语言编译器在编译时可以做的事情。即使是动态调度,也可以通过更智能的VM优化(内联缓存 有人吗?),但这是很多工作。不仅仅是一种新的新语言可以做的。

也看 史蒂夫·耶格(Steve Yegge)的动态语言反击.

当然,什么是巨大的同性恋损失?比C慢100倍,但众所周知,在代码的20%中花费了80%的执行时间=该代码的80%不会对整个程序的Percception绩效产生明显影响。对于剩余的20%,您始终可以将其重写为C或C ++,并从动态语言中调用它。对于许多应用程序,这足够了(对于某些应用程序,您甚至不需要优化)。对于其余的...好吧,如果表现至关重要,您应该以一种为性能设计的语言编写它。

其他提示

不要将语言设计与它运行的平台混淆。

例如,Java是一种高级语言。它在JVM上运行(如上所述 - 和jruby一样,jruby - java版本的Ruby版本)。 JVM将执行字节代码分析并优化代码如何运行(使用逃生分析,即时编译等)。因此,该平台对在很大程度上独立于语言本身的性能产生了影响(请参阅 这里 有关Java性能和与C/C ++的比较的更多信息)

损失与什么?如果您需要垃圾收集器或关闭,则需要它们,无论如何您都将付出代价。如果一种语言使它们易于使用,那并不意味着您不需要它们就必须使用它们。

如果解释语言而不是编译,那将引入一个数量级放缓的顺序。但是,这种语言可能具有补偿优势,例如易用性,平台独立性,而不必编译。而且,您在其中编写的程序可能运行时间不够长,无法成为问题。

可能有语言实现是出于没有充分的理由引入慢速的,但不必使用这些。

您可能想看看DARPA什么 HPCS 倡议提出了。提出了3种编程语言:Sun的Fortress,IBM的X10和Cray的教堂。后两个仍在开发中。这些中的任何一个是否符合您的定义 高水平 我不知道。

是的,硬件设计肯定会发挥作用。所有这三种语言均针对超级计算机,具有许多处理器,并且展示了适合该域的功能。

当然有可能。例如,Objective-C是一种动态类型的语言,具有与C ++相当的性能(尽管一般来说,但较慢,但仍然大致相等)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top