Blog 4 Min. Lesezeit

C++-Standards und Best Practices: Die perfekte Kombination

Diesen Artikel teilen
C++ Standards and Best Practices: The Perfect Combo

C++ stagnierte viele Jahre lang, und viele Entwickler waren überzeugt, dass die Sprache dasselbe Schicksal wie COBOL, Fortran und VB6 ereilen würde. Doch entgegen allen Erwartungen erhob sich C++ wieder aus der Asche, und die neuen Standards verändern die Art und Weise, wie die Sprache eingesetzt wird, grundlegend.

Die Weiterentwicklung von C++ mit zahlreichen nützlichen neuen Features bedeutet nicht, dass der C++98-Standard schlecht war. Im Gegenteil: Er bot bereits viele hilfreiche Möglichkeiten für die Entwicklung unterschiedlichster Anwendungen. Es gibt zahlreiche gut konzipierte ältere C++-Projekte, deren Code sich leicht warten und weiterentwickeln lässt.

Doom, entwickelt von John Carmack, ist beispielsweise ein gut konzipiertes C++-Spiel, das lediglich die grundlegenden Mechanismen des C++98-Standards nutzt.

Bei der Suche nach Artikeln über Doom 3 findet man beispielsweise Aussagen wie diese:

I spent a bit of time going through the Doom3 source code. It’s probably the cleanest and nicest looking code I’ve ever seen.

Der Schlüssel zum Erfolg lag nicht im Funktionsreichtum der Sprache, sondern vielmehr darin, Best Practices zu befolgen, die den Code leicht lesbar, wartbar und erweiterbar halten.

Natürlich verfügen nicht alle Entwickler über die Fähigkeiten eines John Carmack, und vielleicht benötigen sie eine leistungsfähigere Sprache, die ihnen hilft, sich auf die Geschäftslogik ihrer Anwendungen zu konzentrieren. Doch selbst mit der mächtigsten Programmiersprache wird Code sehr schwer verständlich und wartbar, wenn schlechte Praktiken angewendet werden.

Selbst mit einer komplexen Programmiersprache wie Assembler lässt sich sauberer Code schreiben: Das Spiel Prince of Persia beweist, dass das Prinzip „Keep it simple“ auch bei einer Low-Level-Programmiersprache funktioniert.

Prince of Persia wurde ursprünglich von Jordan Mechner entwickelt und 1989 für den Apple II veröffentlicht. Das Spiel stellte einen großen Fortschritt bei der Qualität von Animationen in Videospielen dar. Am 17. April 2012 hat Jordan Mechnerden Quellcode veröffentlichtvon Prince of Persia. Bei der Untersuchung der Codebasis fällt Folgendes auf:

  • Die Benennung ist klar und leicht verständlich.
pp2
  • Der Code ist in viele kleine Unterroutinen aufgeteilt.

Die Assemblersprache des 6502 ist sehr hardwarenah. Um den Code leichter verständlich und wartbar zu machen, wird das Prinzip „Teile und herrsche“ angewendet. Der Code ist tatsächlich in viele kleine Unterroutinen aufgeteilt, wodurch er sich einfacher lesen und pflegen lässt. Hier ein Beispiel für eine kleine Unterroutine aus dem Quellcode:

pp3

Zurück zu den neuen C++-Standards: Mit all den nützlichen neuen Features können wir sauberen Code schreiben. Wenn wir jedoch schlechte Praktiken anwenden, kann daraus ebenso Code entstehen, der schwer verständlich und wartbar ist. Dieser interessanteBeitragbefasst sich beispielsweise mit der übermäßigen Verwendung des Schlüsselworts auto.

Bjarne Stroustrup und Herb Sutter erkannten die Notwendigkeit grundlegender Richtlinien für das Schreiben von effizientem modernem C++-Code. Vor einigen Jahren stellten sie die „C++ Core Guidelines“ vor. In ihrem GitHub-Repository wird die Motivation für diese Richtlinien wie folgt beschrieben:

This document is a set of guidelines for using C++ well. The aim of this document is to help people to use modern C++ effectively. By "modern C++" we mean C++17, C++14, and C++11. In other words, what would you like your code to look like in 5 years' time, given that you can start now? In 10 years' time?

The guidelines are focused on relatively high-level issues, such as interfaces, resource management, memory management, and concurrency. Such rules affect application architecture and library design. Following the rules will lead to code that is statically type safe, has no resource leaks, and catches many more programming logic errors than is common in code today. And it will run fast -- you can afford to do things right.

Richtlinien sind hilfreich, doch Entwickler können in der Regel nicht stundenlang Code manuell überprüfen, um dessen Einhaltung sicherzustellen. Deshalb ist es sinnvoller, diese Prüfungen mit einem Tool durchzuführen.

clang-tidy ist dafür das passende Tool. Es bietet zahlreiche interessantePrüfungen, darunter auch Prüfungen für einige Regeln der CppCoreGuidelines.

Zusammenfassend sind die neuen C++-Standards eine sehr begrüßenswerte Entwicklung. Ein Dank gilt allen Mitgliedern der C++-Community, die dazu beigetragen haben, sie möglich zu machen – eine keineswegs einfache Aufgabe. Ohne grundlegende Best Practices und Richtlinien kann Code jedoch schnell unlesbar, schwer wartbar und nur mühsam weiterzuentwickeln werden.

Diesen Artikel teilen