为什么大多数 Linux 程序都是用 C 编写的?

hpn*_*hpn 33 linux c c++

为什么大多数 Linux 程序都是用 C 编写的?为什么它们不是用更新的 C++ 编写的?

pol*_*mon 39

关于这一点已经有很多讨论。主要是一个哲学上的原因。C 被发明为一种用于系统开发(而不是应用程序开发)的简单语言。使用 C++ 有很多争论,但使用 C++ 并坚持使用 C 的争论也差不多。

归根结底,这是一个历史问题。大多数应用程序的东西都是用 C 编写的,因为大多数内核的东西都是用 C 编写的。而且从那时起大多数东西都是用 C 编写的,人们倾向于使用原始语言。

此时,有人可能会问:“好吧,为什么内核是用 C 编写的,而不是移植到 C++?” . 前段时间在 kerneltrap上已经讨论过这个问题。可以从该线程引用的一个很好的解释是yoshi314 的回复(直接引用):

这是因为几乎每个 c++ 应用程序都需要一个单独的 c++ 标准库来运行。所以他们必须将它移植到内核,并期望在任何地方都有额外的开销。

c++ 是更复杂的语言,这意味着编译器可以从中创建更复杂的代码。因此,发现问题源于编译器错误,而不是在 c 中更容易出现代码错误。

此外,c 语言更加准系统,并且更容易遵循其汇编表示,这通常很容易预测。

c++ 更通用,但 c 更适合低级或嵌入式的东西。


另一方面,“大多数 Linux 程序”具有误导性。看看图形应用程序。Python 越来越受欢迎,尤其是在 Linux 上的 GUI 环境中。与 Windows 和 .NET 发生的事情大致相同。

  • 此外,C 具有稳定的 ABI,并且可以通过其原生 FFI 轻松插入其他语言,而 C++ 没有人类可读的 ABI,而 g++ 对 ABI 进行了更改。因此,这些库倾向于用 C 而不是 C++ 编写。因为您希望在项目中使用一种语言,所以与库捆绑在一起的程序也是如此。(至少那是一个关于 Gnome 的故事)。 (4认同)
  • 现在,你也可以考虑...... *你可以在C中做的一切你也可以在C++中以几乎相同的方式做,想想“extern C”...... *编译器不会制作更复杂的代码,如果你不需要编写更复杂的代码...... * 你可以用 C++ 编写相同的准系统...... * 你可以链接和使用 C 中的 C++ 库。最后,这是一个相当历史性的问题。 (2认同)

小智 11

在阅读了来自 Linux 创始人 Linus Torvalds 的以下电子邮件后。我不禁认为上面的答案是不正确的。他似乎认为 C++ 程序员不是好的系统程序员。而且,与它们在短期内带来的好处相比,C++ 中的额外功能在长期内通常会导致更多问题。虽然人们可能不同意他的观点,但很难夸大他对 linux 操作系统的影响。

http://harmful.cat-v.org/software/c++/linus