哪个编译 and/or 更快地计算斐波那契数列的前 100 个数字:C 或 Brainfuck

Which would compile and/or calculate the first 100 numbers of the fibonacci sequence faster: C or Brainfuck

我对是什么造就了一种语言知之甚少"fast",但对我来说,一种为极简主义设计的语言也应该非常快,对吧?

C 比 BrainFuck 更接近英语,BrainFuck 的编译器大小非常小,只有 1024 字节,与大约 100 KB 的 Tiny C 编译器相比几乎没有。

但是网上所有的网站都把C当成最快的语言吧字节码或者汇编。

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

如果我用 C 和 BrainFuck 编写相同的程序(例如,计算斐波那契数列的前 100 个数字),哪个在运行时完成任务的速度更快?哪个编译速度更快?

是也不是。有些语言特性会使语言变慢(在某些情况下,垃圾收集、动态类型仅在运行时已知,……)和其他特性会使它变得更复杂,但允许编译器有更多的自由。

恰当的例子:constexpr keyword of C++ is somewhat complex to implement, but allows the programmer to tell the compiler "This function application has to be replaceable by its result". In extreme cases, this allows the compiler to replace costly function calls (e.g. a fast fourier transform) 具有不变的结果,没有任何运行时成本。

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

这取决于编译器的能力。

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

  • Pre-processing
  • 编译
  • 大会
  • 正在链接

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

这个中间语言实际上被编译成机器码,你从哪个高级语言(从这个意义上说是 brainfuck 高级语言)得到它并不重要。