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


30

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


14
C++比较新C,但这有点无关紧要。他们是不同的语言。

6
您可能应该在StackOverflow或Programmers上问这个问题(实际上已经很好地讨论了该话题)。
rozcietrzewiacz 2011年

4
@Mat好吧,这不是完全正确的,因为C ++是C的超集。您可以使用C进行编程,并使用C ++编译器进行编译。它将按预期进行编译和工作。
polemon 2011年

8
@polemon:这是不正确的,存在不兼容性。en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
马太福音

Answers:


37

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

最后,这是一个历史问题。大多数应用程序用C编写,因为大多数内核用C编写。从那时起,大多数应用程序用C编写,所以人们倾向于使用原始语言。

此时,有人可能会问:“好,那为什么用C编写内核而不移植到C ++?” 。前一段时间在kerneltrap上对此进行了讨论。可以从该线程引用的一个很好的解释是yoshi314的响应(直接引用):

那是因为几乎每个c ++应用程序都需要一个单独的c ++标准库来运行。因此他们将不得不将其移植到内核,并期望到处都有额外的开销。

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

C语言也更准,而且易于遵循其汇编表示形式,这通常很容易预测。

c ++更具通用性,但c更适合于底层或嵌入式工具。


另一方面,“大多数Linux程序”具有很大的误导性。看一下图形应用程序。Python的应用越来越广泛,尤其是在Linux上的GUI环境中。与Windows和.NET发生的事情差不多。


3
此外,C具有稳定的ABI,可以轻松地通过其本机FFI插入其他语言,而C ++没有人类可读的ABI,而g ++在ABI中有所更改。因此,这些库倾向于用C而不是C ++编写。因为您想在项目中使用一种语言,所以与库捆绑在一起的程序也是如此。(至少那是Gnome的故事)。
Maciej Piechotka 2011年

@MaciejPiechotka所有这些都是对的,这是一个很好的讨论,但是c没有定义的ABI,只是在每个平台上通常都有一种“显而易见的”工作方式。之后,跟随领导者。
dmckee 2011年

@dmckee:我没有说过它是标准化的,但是每个平台上的C API都遵循某些简单的规则(包括无规则或最小限度的修改),这些规则很少更改-即使没有100%正确,这也对它有用。
Maciej Piechotka

2
如今,您还可以考虑... *您可以在C中做的所有事情,也可以以几乎相同的方式在C ++中做,也可以考虑“外部C” ... *如果编译器不会编写更复杂的代码,您不会编写更复杂的代码... *您可以在C ++中编写相同的准系统内容... *您可以从C中链接和使用C ++库。最后,这是一个历史悠久的问题。
Zrin 2014年

7

在阅读了Linux的创建者Linus Torvalds的以下电子邮件之后。我不禁以为上面的答案是不正确的。他似乎认为C ++程序员不是优秀的系统程序员。与从短期来看,C ++的额外功能相比,从长期来看,它们经常会引起更多的问题。尽管有人可能不同意他的观点,但很难夸大他对Linux操作系统的影响。

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


该死的,那很有害
AFP_555
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.