【问题标题】:What is 'Language Performance'?什么是“语言表现”?
【发布时间】:2011-01-17 12:33:37
【问题描述】:

我正在阅读一个演示文稿,其中比较了不同的编程语言。衡量的特征之一是“语言表现”。什么意思?

【问题讨论】:

  • 枕边谈话效果的委婉说法。
  • 如果没有在演示文稿中定义,我会说这是一个糟糕的演示文稿。

标签: programming-languages comparison computer-science terminology


【解决方案1】:

真正的答案:它没有任何意义,或者该演示文稿的作者当时在想什么。

也许它的意思是“相对于其他语言执行具有相同语义的操作需要多少时间”?但谁能说呢?

【讨论】:

  • ++。您可能会为语言实现的性能提出一个案例。但是语言本身并没有真正的性能特征。
  • 实际上我猜他的意思要么是“你需要多少时间用不同的语言实现相同的东西”,或者是“用不同语言编写的程序需要多少时间使用相同的算法来计算相同的东西” .
  • @Dustman:实际上,它们有时会有性能限制。经典的例子是 Fortran 77 和 C90 中的数字; C90 不得不担心混叠效应这一事实使得矩阵操作之类的事情比可比较的 F77 编译器慢,后者基本上忽略了这种影响。
  • @DavidT:我猜这部分是重点。如何简化为优化的处理器指令是确定给定硬件集上语言性能的地方。如果我是一个乐观的人,我可能会假设我们在谈论规范或典型的实现,但由于绝大多数著作(甚至在学校里!)都是“Java 慢,C 快”的种类,我只是无法唤起做出这种假设所需的良好感觉。当然,从技术上讲,您是对的,语言规范可能会过度限制实现。
【解决方案2】:

我将语言性能定义为当提供典型的惯用算法实现时,语言的最佳现有实现的性能。

某些语言比其他语言更容易编写有效的实现。例如,C 基本上一直是一种“快速”语言,因为它非常接近金属并且易于为其编写高效的编译器。由于性能在技术上是实现的属性,因此随着实现的改进,慢速语言可以成为快速语言。例如,Java 在其早期版本中被解释并且被认为(当时正确地)是一种“慢”语言。从那时起,JIT 编译器和垃圾收集器变得如此出色,以至于 Java 现在理所当然地应该在“快速”语言中占有一席之地。这说明了为什么需要对语言性能进行此类比较。

【讨论】:

  • 但是,在谈论“现有最佳实现”时,您必须小心如何定义 that。例如,有论文表明垃圾收集与手动内存管理一样高效,但也有其他论文表明虚拟内存使垃圾收集速度降低了 40%。现在,虚拟内存对于 C 来说是必需的,它甚至对于 Java、PHP 或 Ruby 来说都没有意义,所以公平地说,这是其中之一的“现有最佳实现”,必须是没有虚拟内存的。 CPU 架构也类似:现代 CPU 高度针对 C 进行了优化
  • ... 并且非常不擅长执行,例如 Haskell 或 Erlang。还有other CPU 架构,它们非常擅长运行Haskell 或Erlang,而C 甚至不能run
  • @Jorg:为什么虚拟内存对 Java、PHP 或 Ruby 没有意义?
  • 发明了虚拟内存是因为 C 可以直接访问内存。如果一个 C 程序假设它可以将数据写入地址 X,而另一个程序假设它可以将 数据写入地址 X,那么这些程序将崩溃。因此,虚拟内存假装这些程序中的任何一个是整个宇宙中唯一的程序,并将程序 A 的地址 X 和程序 B 的地址 X 转换为两个不同的地址。 Java、PHP、Ruby、Python、ECMAScript、Perl 等(IOW:现实世界中实际使用的所有语言)不允许直接访问内存,因此不需要 VM。
  • 问题是:虚拟内存真的很昂贵。它非常慢,甚至需要特殊的硬件支持才能完全可行。但是这些 MMU 也非常昂贵和复杂,并且它们在 CPU 上占用了相当多的芯片空间。而且它们仍然很慢,尤其是它们在上下文切换时会产生巨大的延迟。 Microsoft Singularity 团队仅在打开 MMU 时测量了 10% 的性能损失,甚至没有使用它。 (实际上使用它会使速度下降超过 30%。)鉴于绝大多数代码不是用 C 编写的,它不会...
【解决方案3】:

这是一个加载的问题,肯定需要解释。如果这是一篇高质量的论文,它应该准确地说明他们是如何测量它的,这样读者就可以对数字的有效性做出自己的判断。我将如何衡量它是:

我会创建/找到一系列程序,它们做的事情完全相同,并且可以用每种语言以非常接近相同的方式编写。可能已经存在一套软件(la SPEC cpu2006)可以做到这一点。找到这些程序后,我会运行它们并测量性能。在这里,仍然很难得出结论,因为不同的语言(和/或运行时)做得更好和更差,而且很难找到一组“正确”运行所研究语言的所有部分的程序。

【讨论】:

  • 我还想补充一点,即使在同一种语言上,不同的编译器和运行时也可以运行具有显着不同性能特征的同一个程序。所有这些都需要考虑在内,因此分析是“公平的”。
  • 是的。例如,在 C 语言中,最慢和最快的实现相差 100000 倍或更多。
【解决方案4】:

通常这意味着作者更喜欢所讨论的语言之一,并试图让您相信他的偏好是有效的,并且基于可靠的事实而不是个人品味(或者可以说是缺乏个人品味)。

【讨论】:

    【解决方案5】:

    据我所知,这不是一个具有普遍公认定义的术语。实际上。 “语言表现”可能意味着“我最喜欢的语言得分很高的一些指标”。更严重的是,演示文稿应该定义术语。如果这个术语没有以易于理解的方式定义,那么演示文稿就缺乏实质内容。

    【讨论】:

      【解决方案6】:

      某些语言需要大型运行时环境才能正常运行,这主要适用于 Python 或 Ruby 等解释型语言。许多编译语言的运行时开销较小,例如 Objective-C。这些因素会影响性能。

      【讨论】:

        猜你喜欢
        • 2011-04-21
        • 1970-01-01
        • 2011-09-03
        • 2010-09-06
        • 2011-04-30
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多