可以更快地编译和/或计算斐波那契数列的前100个数字:C或Brainfuck

时间:2019-06-27 09:32:20

标签: c performance brainfuck

对于使语言“快速”运行的原因,我知之甚少,但是对我来说,为极简主义而设计的语言也将非常快,对吧?

C比BrainFuck更接近英语,并且BrainFuck的编译器大小非常小,为1024字节,与Tiny C编译器(大小约为100 KB)相比,几乎没有什么。

但是,所有在线网站都将C视为最快的语言条码或汇编。

(进行清晰度编辑以使问题搁置)

如果我在C和BrainFuck中制作了相同的程序(例如,它们计算了斐波那契数列的前100个数字),那么哪个程序可以在运行时更快地完成任务?哪一个编译速度更快?

2 个答案:

答案 0 :(得分:5)

是,不是。有一些语言功能会使语言变慢(某些情况下是垃圾收集,动态类型仅在运行时才知道,…),而其他一些功能会使语言变得更复杂,但允许编译器具有更大的自由度。

要点:C ++的constexpr关键字实现起来有些复杂,但允许程序员告诉编译器“此函数应用程序必须可由其结果替换”。在极端情况下,这使编译器可以以恒定的结果替换昂贵的函数调用(例如fast fourier transform),而无需任何运行时开销。

已编译的C代码非常快,因为它几乎没有不直接映射到汇编器的功能,并且已经进行了近半个世纪的编译器优化。

答案 1 :(得分:2)

这取决于编译器的能力。

编译器将源文件转换为可执行文件。 (对于C而言)程序分为四个阶段:

  • 预处理
  • 编译
  • 组装
  • 链接

通常会创建一个抽象语法树(AST)。 AST通常用于生成中间表示(IR),有时也称为中间语言,用于代码生成。

这种中间语言实际上是编译成机器代码的,这与从哪一种高级语言(在这种意义上说是一种高级语言)得到的无关紧要。