Warum sind die meisten Linux-Programme in C geschrieben?

30

Warum sind die meisten Linux-Programme in C geschrieben? Warum werden sie nicht mit C ++ geschrieben, das neuer ist?

hpn
quelle
14
C++ist neuer als C, aber das ist ein bisschen irrelevant. Sie sind verschiedene Sprachen.
Mat
6
Sie sollten dies wahrscheinlich bei StackOverflow oder Programmierern nachfragen (wo das Thema tatsächlich bereits gut behandelt wurde ).
rozcietrzewiacz
4
@Mat Nun, es ist nicht ganz richtig, da C ++ eine Obermenge von C ist. Sie können in C programmieren und es mit einem C ++ - Compiler kompilieren. Es wird wie erwartet kompiliert und funktioniert.
Polemon
8
@polemon: das ist falsch, es gibt inkompatibilitäten. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Antworten:

37

Es gab viele Diskussionen darüber. Der Grund ist hauptsächlich ein philosophischer. C wurde als einfache Sprache für die Systementwicklung erfunden (weniger für die Anwendungsentwicklung). Es gibt viele Argumente für die Verwendung von C ++, aber es gibt ungefähr so viele für nicht mit C ++ und dem Festhalten an C.

Am Ende ist es ein historisches Problem. Die meisten Anwendungen sind in C geschrieben, da die meisten Kernel-Anwendungen in C geschrieben sind. Seitdem die meisten Anwendungen in C geschrieben wurden, werden in der Regel die Originalsprache verwendet.

An dieser Stelle könnte jemand fragen: "OK, warum ist der Kernel in C geschrieben und nicht nach C ++ portiert?" . Dies wurde vor einiger Zeit auf Kerneltrap diskutiert . Eine nette Erklärung, die aus diesem Thread zitiert werden kann, ist eine Antwort von yoshi314 (direkt zitierend):

Das liegt daran, dass fast jede C ++ - App eine separate C ++ - Standardbibliothek benötigt, um zu funktionieren. Sie müssten es also auf den Kernel portieren und überall einen zusätzlichen Overhead erwarten.

c ++ ist eine komplexere Sprache und das bedeutet, dass der Compiler komplexeren Code daraus erstellt. Aus diesem Grund ist es in c einfacher, festzustellen, dass ein Problem auf einen Compiler-Fehler und nicht auf einen Codefehler zurückzuführen ist.

Auch die Sprache C ist mehr Barebone und es ist einfacher, der Assembly-Darstellung zu folgen, die oft leicht vorherzusagen ist.

c ++ ist vielseitiger, aber c eignet sich eher für Low-Level- oder Embedded-Inhalte.


Andererseits sind "die meisten Linux-Programme" ziemlich irreführend. Schauen Sie sich grafische Anwendungen an. Insbesondere in GUI-Umgebungen unter Linux gewinnt Python immer mehr an Bedeutung. Ungefähr dasselbe passiert mit Windows und .NET.

rozcietrzewiacz
quelle
3
Darüber hinaus verfügt das C über eine stabile ABI und kann problemlos über das native FFI in andere Sprachen eingebunden werden, während C ++ keine von Menschen lesbare ABI aufweist und g ++ Änderungen an der ABI aufweist. Daher wurden die Bibliotheken eher in C als in C ++ geschrieben. Da Sie eine Sprache im Projekt haben möchten, wurden die Programme mit der Bibliothek gebündelt. (Zumindest war das eine Geschichte mit Gnome).
Maciej Piechotka
@MaciejPiechotka All dies ist wahr und es ist eine nette Diskussion, aber c hat kein definiertes ABI , außer dass es oft einen "offensichtlichen" Weg gibt, die Dinge auf jeder Plattform zu bearbeiten. Danach folgt er dem Anführer.
dmckee
@dmckee: Ich habe nicht angegeben, dass es standardisiert ist, aber die C-API auf jeder Plattform folgt bestimmten einfachen Regeln (einschließlich keiner oder minimaler Mangelung), die sich selten ändern - was es für den Zweck nützlich macht, auch wenn sie nicht zu 100% korrekt sind.
Maciej Piechotka
2
Heutzutage können Sie auch berücksichtigen, dass ... * alles, was Sie in C tun können, Sie auch in C ++ auf die gleiche Weise tun können, denken Sie auch an "extern C" ... * der Compiler wird keinen komplexeren Code erstellen, wenn Sie schreiben keinen komplexeren Code ... * Sie können dasselbe Barebone-Zeug in C ++ schreiben ... * Sie können C ++ - Bibliotheken von C aus verknüpfen und verwenden. Am Ende ist es ein ziemlich historisches Problem.
Zrin
7

Nach dem Lesen der folgenden E-Mail von Linus Torvalds, dem Schöpfer von Linux. Ich kann nicht anders als zu denken, dass die Antwort oben falsch ist. Er scheint zu denken , dass C ++ Programmierer sind nicht gut Systeme Programmierer. Und dass die zusätzlichen Funktionen in C ++ langfristig häufig mehr Probleme verursachen als die kurzfristigen Vorteile. Man kann ihm zwar nicht zustimmen, aber es ist schwierig, den Einfluss, den er auf das Linux-Betriebssystem hatte, zu übertreiben.

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

Arturo Hernandez
quelle
Verdammt, das war schädlich
AFP_555