是什么让编程语言变快?

What makes a programming language fast?

或者换句话说,编程语言的哪些特性会影响相应生成的可执行文件的稳定性

当然,生成可执行文件的编译器才是真正重要的。例如,您可以想象像编译链这样先进的东西能够从自然语言描述中推断出可执行文件,询问相关问题并提供建议以消除与给定数据良好匹配的可能性是否太低的歧义。

现在 C 语言因使开发人员能够获得非常快速的可执行文件而闻名,"portable assembler"。但这是因为该语言简化了源代码和目标代码之间的匹配,同时简化了优化编译器的开发吗?还是因为使用 C 的开发人员对它在木头下的工作方式更加敏感,所以在编写代码时会考虑到这一点?还是其他原因?

When did people first start thinking 'C is portable assembler'?

用另一种编程语言解决需要更多代码的问题时使用的代码更少

被认为使语言变快的主要特征是其数据类型与机器数据类型的对应程度。 Java 被认为是一种高效的语言,因为它具有原始数据类型。相反,用任何将所有类型(甚至字符和整数)视为对象的语言编写的任何东西的性能(正如所有 scripting/untyped 语言所做的那样)必然会受到影响。

C 之所以快,是因为除了汇编之外,C 之下没有其他语言。所以这是一个原因。

其次,用哪种语言编写的编译器也很重要,因为如果语言本身很慢,那么用该语言编写的编译器也很慢。所以,它会生成代码,但不会那么快。

第三,很多时候语言的实现算法也起着重要的作用,比如语言的数据类型是如何实现的等等。

生成优化的代码,使其 运行 更快并且占用更少的内存是 NP-Completeness 中的内容。

C 由于其灵活性而一直是 'fastest' 语言。它不强加严格的运行时模型。开发人员可以自由创建自己的运行时结构、体系结构和数据结构。

例如,20 年前处理器是 'slow'(相对于内存速度),许多优化侧重于在大型预计算值表中查找结果。现在,处理器很快而内存很慢。现在,优化的重点是缓存效率——因为大数据表会耗尽缓存,所以通常会避免它们,任务正在转移回处理器。

许多语言不仅仅是一种语言。大多数现代语言都包含速度依赖的重型运行时框架和库。这些运行时框架通常锁定基本数据结构和内存管理模型。当硬件发生变化时,不灵活的框架变得低效。

因为 C 可预测地编译为本机目标代码,并且不会强加大量的运行时间,所以它已经并将继续处理主要的硬件架构变化,并且将永远是最快的语言之一。