Perché la maggior parte dei programmi Linux è scritta in C?


30

Perché la maggior parte dei programmi Linux è scritta in C? Perché non sono scritti con C ++, che è più recente?


14
C++è più recente di C, ma è un po 'irrilevante. Sono lingue diverse.
Mat

6
Probabilmente dovresti chiederlo a StackOverflow o ai programmatori (dove l'argomento è già stato ben trattato ).
rozcietrzewiacz,

4
@Mat Beh, non è del tutto corretto, dato che C ++ è un superset di C. Puoi programmare in C e compilarlo con un compilatore C ++. Compilerà e funzionerà come previsto.
polemon,

8
@polemon: non è corretto, ci sono incompatibilità. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Risposte:


37

Ci sono state molte discussioni su questo. Principalmente, la ragione è filosofica. C è stato inventato come un linguaggio semplice per lo sviluppo del sistema (non tanto per lo sviluppo di applicazioni). Ci sono molti argomenti per usare C ++, ma ce ne sono altrettanti per non usare C ++ e attenersi a C.

Alla fine, è un problema storico. La maggior parte delle cose dell'applicazione è scritta in C, perché la maggior parte delle cose del Kernel è scritta in C. E da allora la maggior parte delle cose è stata scritta in C, le persone tendono ad usare le lingue originali.

A questo punto, qualcuno potrebbe chiedere "OK, quindi perché il kernel è scritto in C e non trasferito in C ++?" . Questo è stato discusso su kerneltrap qualche tempo fa. Una bella spiegazione che può essere citata da questo thread è una risposta di yoshi314 (citando direttamente):

questo perché quasi ogni app c ++ ha bisogno di una libreria standard c ++ separata per funzionare. quindi dovrebbero portarlo sul kernel e aspettarsi un overhead extra ovunque.

c ++ è un linguaggio più complesso e ciò significa che il compilatore crea codice più complesso da esso. per questo motivo, scoprire che un problema deriva dal bug del compilatore, piuttosto che dall'errore di codice è più facile in c.

inoltre il linguaggio c è più barebone ed è più facile seguire la sua rappresentazione di assieme, che è spesso facile da prevedere.

c ++ è più versatile, ma c è più adatto per cose di basso livello o incorporate.


D'altra parte, "la maggior parte dei programmi Linux" è abbastanza fuorviante. Dai un'occhiata alle applicazioni grafiche. Python sta prendendo sempre più piede soprattutto negli ambienti GUI su Linux. Circa la stessa cosa che sta succedendo con Windows e .NET.


3
Inoltre, il C ha un ABI stabile e può essere facilmente collegato ad altre lingue tramite il proprio FFI nativo mentre il C ++ non ha un ABI leggibile dall'uomo e g ++ ha subito cambiamenti nell'ABI. Pertanto, le librerie tendevano a essere scritte in C piuttosto che in C ++. Perché vuoi avere una lingua nel progetto, così i programmi sono stati raggruppati con la libreria. (Almeno quella era una storia con Gnome).
Maciej Piechotka,

@MaciejPiechotka Tutto questo è vero, ed è una bella discussione, ma c non ha un ABI definito , tranne per il fatto che esiste spesso un modo "ovvio" di lavorare su ciascuna piattaforma. Dopodiché seguirà il leader.
dmckee,

@dmckee: non ho dichiarato di aver standardizzato, ma l'API C su ciascuna piattaforma segue alcune semplici regole (inclusa l'assenza di manodopera minima o minima) che raramente cambia - il che lo rende utile allo scopo anche se non corretto al 100%.
Maciej Piechotka,

2
Al giorno d'oggi, puoi anche considerare che ... * tutto ciò che puoi fare in C puoi anche fare in C ++ più o meno allo stesso modo, pensa anche "extern C" ... * il compilatore non renderà il codice più complesso se non scrivi codice più complesso ... * puoi scrivere le stesse cose barebone in C ++ ... * puoi collegare e usare le librerie C ++ da C. Alla fine è un problema piuttosto storico.
Zrin,

7

Dopo aver letto la seguente e-mail da Linus Torvalds, il creatore di Linux. Non posso fare a meno di pensare che la risposta sopra sia errata. Sembra pensare che i programmatori C ++ non siano buoni programmatori di sistemi . E che le funzionalità extra in C ++ spesso causano più problemi a lungo termine rispetto ai benefici che portano a breve termine. Mentre uno può non essere d'accordo con lui, è difficile sopravvalutare l'influenza che ha avuto sul sistema operativo Linux.

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


Dannazione, era dannoso
AFP_555 il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.