Dlaczego większość programów Linuksa jest napisanych w C?

30

Dlaczego większość programów Linuksa jest napisanych w C? Dlaczego nie są napisane w C ++, który jest nowszy?

hpn
źródło
14
C++jest nowszy niż C, ale to trochę nieistotne. Są to różne języki.
Mat
6
Prawdopodobnie powinieneś o to zapytać na StackOverflow lub Programmers (gdzie temat został już dobrze omówiony ).
rozcietrzewiacz
4
@Mat Cóż, nie jest to całkowicie poprawne, ponieważ C ++ jest nadzbiorem C. Możesz programować w C i kompilować go za pomocą kompilatora C ++. Skompiluje się i będzie działać zgodnie z oczekiwaniami.
polemon
8
@polemon: to niepoprawne, istnieją niezgodności. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Odpowiedzi:

37

Było wiele dyskusji na ten temat. Głównie przyczyna jest filozoficzna. C został wymyślony jako prosty język do programowania systemu (nie tyle do programowania aplikacji). Istnieje wiele argumentów przemawiających za użyciem C ++, ale jest ich tyle samo, że nie używają C ++ i trzymają się C.

Ostatecznie jest to problem historyczny. Większość elementów aplikacji jest napisanych w C, ponieważ większość elementów jądra jest napisana w C. A ponieważ większość rzeczy była napisana w C, ludzie używają oryginalnych języków.

W tym momencie ktoś może zapytać „OK, więc dlaczego jądro jest napisane w C i nie jest przeniesione do C ++?” . Zostało to omówione na kerneltrap jakiś czas temu. Jednym miłym wyjaśnieniem, które można zacytować z tego wątku, jest odpowiedź yoshi314 (cytowanie bezpośrednio):

to dlatego, że prawie każda aplikacja c ++ potrzebuje osobnej standardowej biblioteki c ++ do działania. więc musieliby przenieść go do jądra i wszędzie oczekiwać dodatkowego obciążenia.

c ++ jest bardziej złożonym językiem, co oznacza, że ​​kompilator tworzy z niego bardziej złożony kod. z tego powodu stwierdzenie, że problem wynika z błędu kompilatora, zamiast błędu kodu jest łatwiejsze w c.

również język c jest bardziej prosty i łatwiej jest śledzić jego reprezentację asemblera, co często jest łatwe do przewidzenia.

c ++ jest bardziej wszechstronny, ale c jest bardziej odpowiedni dla rzeczy niskiego poziomu lub osadzonych.


Z drugiej strony „większość programów Linuksa” jest dość myląca. Spójrz na aplikacje graficzne. Python staje się coraz bardziej popularny, szczególnie w środowiskach GUI w systemie Linux. O tym samym, co dzieje się z Windows i .NET.

rozcietrzewiacz
źródło
3
Dodatkowo C ma stabilny ABI i może być łatwo podłączony do innych języków za pomocą ich natywnego FFI, podczas gdy C ++ nie ma czytelnego dla człowieka ABI, a g ++ miał zmiany w ABI. Dlatego biblioteki zwykle pisane były w C, a nie w C ++. Ponieważ chcesz mieć jeden język w projekcie, tak też programy dołączone do biblioteki. (Przynajmniej taka była historia z Gnome).
Maciej Piechotka
@MaciejPiechotka Wszystko to jest prawdą i jest to miła dyskusja, ale c nie ma zdefiniowanego ABI , poza tym, że często istnieje „oczywisty” sposób działania na każdej platformie. Następnie podąża za liderem.
dmckee,
@dmckee: Nie powiedziałem, że jest znormalizowany, ale C API na każdej platformie przestrzega pewnych prostych zasad (w tym brak lub minimalne zniekształcenie), które rzadko się zmieniają - co czyni go przydatnym do tego celu, nawet jeśli nie jest w 100% poprawny.
Maciej Piechotka
2
W dzisiejszych czasach możesz również wziąć pod uwagę, że ... * wszystko, co możesz zrobić w C, możesz również zrobić w C ++ w prawie ten sam sposób, pomyśl także „extern C” ... * kompilator nie stworzy bardziej złożonego kodu, jeśli nie piszesz bardziej złożonego kodu ... * możesz pisać te same elementy w C ++ ... * możesz łączyć i używać bibliotek C ++ z C. W końcu jest to dość historyczny problem.
Zrin,
7

Po przeczytaniu następującego e-maila od Linusa Torvaldsa, twórcy Linuksa. Nie mogę przestać myśleć, że powyższa odpowiedź jest nieprawidłowa. Wydaje mu się, że programiści C ++ nie są dobrymi programistami systemowymi . I że dodatkowe funkcje w C ++ często powodują więcej problemów w długim okresie w porównaniu do korzyści, które przynoszą w krótkim okresie. Chociaż można się z nim nie zgodzić, trudno przecenić wpływ, jaki wywarł na system operacyjny Linux.

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

Arturo Hernandez
źródło
Cholera, to było szkodliwe
AFP_555