Bei Programmiersprachen haben viele Informatiker Präferenzen, welche manchmal gar mit einer
Art religiösem Eifer verteidigt werden.
Und das gilt natürlich auch für die Betriebssystementwicklung, wenn auch hier die Auswahl der Sprachen etwas
eingeschränkt ist.
2004 kam auf der LKML, der Linux-Körner-Mailing-List beispielsweise diese Mail, in der Linus Torvalds
auf eine eben solche Diskussion antwortet, im konkreten Fall mit dem Vorschlag C++ für
Teile des Kernels zu verwenden.
Im berüchtigten Mailing-Listen-Ton verweist er dabei auf die hohe Komplexität dieser
Programmiersprache sowie deren Übersetzer und sieht drei Gründe, warum man einen Betriebssystem-Kern
überhaupt in C++ entwickeln würde.
Erstens, man sucht Probleme, zweitens, man ist C++ jünger und erkennt nicht, dass man
eh nur ein c-endliches Subset von C++ verwendet oder drittens, die Hausaufgaben verlangen
ist.
Nun, machen wir es kurz, auf euch trifft Punkt 3 zu, wir lassen euch schlicht keine andere
Wahl.
Nachdem das jetzt geklärt ist, schauen wir uns diese Sprache mal genauer an.
Ein Ziel bei der Entwicklung von C++ war es, zum klassischen C möglichst kompatibel zu
bleiben, um den Programmierern den Umstieg zu erleichtern.
Soweit dies das neue Sprachkonzept erlaubt.
Eine Ausnahme ist beispielsweise, wenn man Schlüsselworte verwendet, die es in C nicht
gibt.
Eine Variable mit dem Namen class ist in C valide, in C++ führt er aber zu einem Übersetzerfehler.
Wenn man von solchen Sonderfällen absieht, ist einfaches Ansieh C, wie ihr es aus dem
Grundström kennt, in den meisten Fällen auch gleichzeitig valides C++.
Das gilt auch für dieses Beispielprogramm, welches lediglich Informatik 4 ausgibt und
auch sowohl von einem C als auch einem C++ Übersetzer ohne Probleme akzeptiert wird.
Allerdings würde ein Vollblut C++ Programmierer dies ein wenig anders schreiben.
So würde er den Header stdio.h durch C stdio austauschen.
Beide sind dem Übersetzer bekannt, aber C stdio ist eine auf C++ angepasste Variante
des C-Headers stdio.h.
Außerdem bietet C++ ein neues Konzept zur Aus- und Eingabe.
Stream-Operatoren.
Diese sind im Header.io Stream definiert.
Im Gegensatz zur fehleranfälligen printf-F-Familie mit Format, Strings und einer variablen Anzahl
an Parametern wird hier eine Verkettung von Aufrufen an den Shift-Operator des C-Out-Objekts
durchgeführt.
Zudem sorgen Namensräume für Ordnung.
Alle Funktionen aus der C++ Standard Library sind im Namensraum std definiert, was bei
C-Out und Endline mit angegeben werden muss.
Da Stringverarbeitung mittels Charr-Arrays in C eher kompliziert zu nutzen ist und regelmäßig
zu Puffer überläufen und damit Sicherheitslücken führt, gibt es in C++ einen dedizierten String-Datentyp
mit internem Längenfeld, welcher alle häufig benötigten Operationen bereitstellt.
Es wirkt bereits etwas umständlich, bei jeder Funktion und Objekt explizit den Namensraum
durch das entsprechende Präfix std anzugeben.
Alternativ kann mittels Using-Namespace der Suchpfad für Symbole ohne Namensraum-Prefix
bestimmt werden.
Dabei sind Namensräume eine hilfreiche Möglichkeit, Funktionen zu gruppieren und hierarchisch
zu verwalten.
Anders als in C, wo alle Symbole in einem flachen Namensraum organisiert werden, ist
es in C++ möglich, Symbole gleichen Namens in verschiedenen Namensräumen zu haben, ähnlich
Presenters
Zugänglich über
Offener Zugang
Dauer
00:26:01 Min
Aufnahmedatum
2020-10-01
Hochgeladen am
2020-10-16 15:16:31
Sprache
de-DE
C++ für die Betriebssystemprogrammierung (Freiwilliges Zusatzseminar der Lehrveranstaltung Betriebssysteme)
Siehe auch (optionale) Übungsaufgabe 0
Folien und Transkript zum Video.