Z czego to widzę jądra systemów operacyjnych pisze się w czystym C. Ciekawi mnie czemu nie używa się do tego C++ skoro podobno ma taką samą wydajność jak C oraz łatwiej w nim utrzymać duże projekty? Czy ma to związek z tym? http://harmful.cat-v.org/software/c++/linus
AFAIK były kernele pisane w C++, np. mikrojądra z rodziny L4.
Nie znam się więc się wypowiem:
C++ ma kilka funkcjonalności które się nie przydadzą w pisaniu kernela:
- wyjątki
- wątki
- wbudowany operator new (jedna ogólna sterta)
- biblioteka standardowa (pliki, konsola, klawiatura)
Niektóre wręcz przeszkadzają:
- ABI (brak standardu)
</del>
Są oczywiście pisane jądra w C++, ale jakoś te systemy co znalazłem nie rozwijają się oszałamiająco:
- https://www.haiku-os.org/
- BeOS
- Symbian
Dodam kilka groszy od siebie.
Kernel/drivery fragmentami są pisane dość nisko poziomowo, sam jestem programistą embedded i c++ troszkę wkurza.
Taki przykładzik:
#include <stdio.h>
typedef struct{ }empty;
int main(){
printf("%d\n", sizeof(empty));
return 0;
}
W C++ zwróci 1 a w C, zgodnie z oczekiwaniami, zwróci 0.
Chociaż jak się w strukturę wrzuci char data[0];
(taka tablica z tego co pamiętam, w najnowszych? kompilatorach C++ stawia problemy) to wyświetli się 0 :)
Co do popularności, w większości popularne systemy, to te, nad którymi prace rozpoczęły się dawno dawno temu, gdzie C++ dopiero raczkował, a C było już dość fajne.
Nie ukrywam też z drugiej strony, że fajnie pierdyknąć sobię klasę zamiast co kawałek przekazywać struktury do funkcji.
W C też mocno trzeba się pilnować z alokacją pamięci, ze zwalnianiem itp. nie jak w przypadku C++, walnę std::list (mocno upraszczając) i jest fajnie - ale co z tego, jak pisząc drivery to i tak trzeba się bardzo pilnować. Może C++ zbyt by rozleniwił programistów?
Ale tak naprawdę, myślę jakby jakiś bardzo znany system/kernel będzie kiedyś przepisywany do C++ to i C++ fragmentami będzie bardziej dopasowany do takich celów.
Otwornica napisał(a)
Co do popularności, w większości popularne systemy, to te, nad którymi prace rozpoczęły się dawno dawno temu, gdzie C++ dopiero raczkował, a C było już dość fajne.
I to jest główna przyczyna, bo gdyby była większa presja na C++ ze strony twórców systemów, to problemy z niskopoziomowym zastosowaniem C++ dawno by zostały rozwiązane.
char data[0]; (taka tablica z tego co pamiętam, w najnowszych? kompilatorach C++ stawia problemy)
Może dlatego, że odwołanie do tak (nie)zaalokowanej pamięci najprawdopodobniej będzie UB? Nie spodziewałbym się tu różnicy między C a C++.
char data[0]
oraz char data[]
w strukturze oznacza odwołanie do wszystkich danych od ostatniego pola struktury "w dal". Nie można robić na takim czymś sizeof. Używa się tego np. w sytuacji, gdy masz protokół typu length-value (albo type-length-value).