Pisanie jądra w C++ zamiast C

1

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

1

AFAIK były kernele pisane w C++, np. mikrojądra z rodziny L4.

1

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:

2

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.

0
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++.

1
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).

1 użytkowników online, w tym zalogowanych: 0, gości: 1