C++

Was ist C++?

C++ ist eine der wohl verbreitetsten Programmiersprachen. Im Gegensatz zu vielen anderen beliebten Sprachen ist C++ darauf ausgelegt direkt in Maschinencode übersetzt zu werden. Deshalb ist es eine gute Wahl, für die Programmierung von performancekritischen Anwendungen. Außerdem hat sich C++ über viele Jahrzehnte weiterentwickelt und ist so sehr funktionsreich geworden. Bei der Weiterentwicklung wurde stets auf Rückwärtskompatibilität geachtet. Bei der Einführung neuer Funktionalität musste deshalb allerdings auf die alte Syntax Rücksicht genommen werden. Man könnte sagen, dies lässt die Sprachen teilweise etwas "alt aussehen".
Ein weiteres Hauptmerkmal von C++ ist die Freiheit bei der Speicherprogrammierung. Diese Freiheit gibt viele Möglichkeiten, wird allerdings oft auch als Risikoquelle wahrgenommen, da sich sehr schwer auffindbare Fehler einschleichen können.
Es gibt neue Programmiersprachen die sich dieser Probleme annehmen. Ein Beispiel hierfür ist die Programmiersprache Rust. Allerdings gehen Absicherungen der Speicherprogrammierung mit zusätzlichem Programmieraufwand und/oder Beschränkung der Freiheiten einher.
So ist C++ noch immer eine gute Wahl für die Programmierung systemnaher Software.

Meine Game-engine mit C++

Die Entwicklung von Computerspielen hat mich schon immer sehr fasziniert. Sie stellt allerdings nicht wirklich einen abgrenzbaren Fachbereich der Informatik dar. Vielmehr wird abhängig vom Spiel Wissen aus sehr vielen verschiedenen Fachbereichen benötigt. Trotzdem lassen sich bestimmte Grundgerüste und Funktionen für verschiedene Spiele wiederverwenden. Game-engines stellen solche Grundgerüste zur Verfügung. So können sich die Spieleentwickler auf die Programmierung der für ihr eigenes Spiel spezifischen Funktionalität konzentrieren.
Mich persönlich interessieren allerdings auch gerade die sehr systemnahen und oft performancekritischen Problemstellungen, derer sich eine Game-engine annehmen muss. Deshalb habe ich einige Zeit damit verbracht eine eigene kleine 2D-game-engine mit C++ zu entwickeln. Im Zuge dessen habe ich mich unter Anderem mit folgenden Themen auseinandergesetzt:

  • Einlesen von Dateiformaten
  • Strukturierte Einbindung und Verwaltung von Ressourcen (z.B. Bilder)
  • Erstellen und Verwenden von Programmbibliotheken (Linux: .so, Windows: .dll)
  • Serialisierung komplexer Datenstrukturen
  • Geometrie im zweidimensionalen Raum
  • 2D-Physik Simulation
  • Netzwerkkommunikation mit TCP und UDP
  • Grafik- und Shaderprogrammierung mit OpenGL
  • Entwicklung eines Entity-Component-Systems (Speicherverwaltung)
  • C++ Templates