Pourquoi la plupart des programmes Linux sont-ils écrits en C?


30

Pourquoi la plupart des programmes Linux sont-ils écrits en C? Pourquoi ne sont-ils pas écrits avec C ++, qui est plus récent?


14
C++est plus récent que C, mais c'est un peu hors de propos. Ce sont des langues différentes.
Mat

6
Vous devriez probablement le demander à StackOverflow ou à Programmers (où le sujet a en fait déjà été bien couvert ).
rozcietrzewiacz

4
@Mat Eh bien, ce n'est pas tout à fait correct, car C ++ est un surensemble de C. Vous pouvez programmer en C et le compiler avec un compilateur C ++. Il compilera et fonctionnera comme prévu.
polemon

8
@polemon: c'est incorrect, il y a des incompatibilités. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Réponses:


37

Il y a eu de nombreuses discussions à ce sujet. Surtout, la raison est d'ordre philosophique. C a été inventé comme un langage simple pour le développement de systèmes (pas tellement le développement d'applications). Il existe de nombreux arguments pour utiliser C ++, mais il y en a à peu près autant pour ne pas utiliser C ++ et s'en tenir à C.

En fin de compte, c'est un problème historique. La plupart des trucs d'application sont écrits en C, car la plupart des trucs du noyau sont écrits en C. Et comme à l'époque la plupart des trucs étaient écrits en C, les gens ont tendance à utiliser les langues d'origine.

À ce stade, quelqu'un pourrait demander "OK, alors pourquoi le noyau est-il écrit en C et non porté en C ++?" . Cela a été discuté sur kerneltrap il y a quelque temps. Une belle explication qui peut être citée à partir de ce fil est une réponse de yoshi314 (citant directement):

c'est parce que presque toutes les applications c ++ ont besoin d'une bibliothèque standard c ++ distincte pour fonctionner. ils devraient donc le porter sur le noyau, et s'attendre à une surcharge supplémentaire partout.

c ++ est un langage plus complexe et cela signifie que le compilateur crée du code plus complexe à partir de celui-ci. à cause de cela, trouver qu'un problème provient d'un bogue du compilateur plutôt que d'une erreur de code est plus facile en c.

le langage c est également plus dépouillé, et il est plus facile de suivre sa représentation d'assembly, qui est souvent facile à prévoir.

c ++ est plus polyvalent, mais c est plus adapté aux trucs de bas niveau ou intégrés.


D'un autre côté, «la plupart des programmes Linux» est assez trompeur. Jetez un œil aux applications graphiques. Python gagne de plus en plus de terrain, en particulier dans les environnements GUI sous Linux. À propos de la même chose qui se produit avec Windows et .NET.


3
De plus, les C ont un ABI stable et peuvent être facilement connectés à d'autres langages via leur FFI natif tandis que C ++ n'a pas d'ABI lisible par l'homme et g ++ a eu des changements dans l'ABI. Par conséquent, les bibliothèques avaient tendance à être écrites en C plutôt qu'en C ++. Parce que vous voulez avoir une langue dans le projet, les programmes fournis avec la bibliothèque l'ont également fait. (Au moins, c'était une histoire avec Gnome).
Maciej Piechotka

@MaciejPiechotka Tout cela est vrai, et c'est une belle discussion, mais c n'a pas d'ABI défini , sauf qu'il y a souvent une façon "évidente" de travailler sur chaque plate-forme. Après cela, suivez le leader.
dmckee

@dmckee: Je n'ai pas déclaré qu'il était standardisé mais l'API C sur chaque plate-forme suit certaines règles simples (y compris aucun ou peu de mangling) qui changent rarement - ce qui le rend utile à cet effet même s'il n'est pas correct à 100%.
Maciej Piechotka

2
De nos jours, vous pouvez également considérer que ... * tout ce que vous pouvez faire en C, vous pouvez également faire en C ++ de la même manière, pensez aussi à "extern C" ... * le compilateur ne fera pas de code plus complexe si vous n'écrivez pas de code plus complexe ... * vous pouvez écrire les mêmes choses barebone en C ++ ... * vous pouvez lier et utiliser des bibliothèques C ++ à partir de C. En fin de compte, c'est un problème assez historique.
Zrin

7

Après avoir lu l'e-mail suivant de Linus Torvalds, le créateur de linux. Je ne peux m'empêcher de penser que la réponse ci-dessus est incorrecte. Il semble penser que les programmeurs C ++ ne sont pas de bons programmeurs systèmes . Et que les fonctionnalités supplémentaires en C ++ causent souvent plus de problèmes à long terme par rapport aux avantages qu'elles apportent à court terme. Bien que l'on puisse être en désaccord avec lui, il est difficile de surestimer l'influence qu'il a eu sur le système d'exploitation Linux.

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


Merde, c'était dangereux
AFP_555
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.