C++ Standard Library und die STL
Sagt dir das Akronym STL etwas? Nein, noch nicht?! STL steht für Standard Template Library und egal in welchem Forum ich unterwegs bin oder welches Buch ich lese, überall wird mir die STL nahegelegt.
Wer wirklich große Programme effizient schreiben möchte, der kommt nicht umher Bibliotheken zu benutzen. Schließlich muss man nicht jedesmal das Rad neu erfinden. Das wäre sehr umständlich. Zudem fast jede Aufgabe mit Verwendung von Software Libraries ziemlich vereinfacht wird.
Und mit welcher Bibliothek beginnst du am besten? Im Fall von C++ natürlich mit der C++ Standard Library. Oder der STL? Moment mal, sind das zwei Bezeichnung für dasselbe? Wo liegen eigentlich die Unterschiede?
Mir bleibt also keine andere Wahl. Ich muss mich, allein schon aus Neugierde, mit der STL auseinandersetzen. Diese ist geweckt. Jetzt will ich wissen was mir ständig empfohlen wird und warum.
STL - Standard Template Library
Die STL wurde schon in den frühen Zeiten, bevor C++ standardisiert wurde, von Alexander Stepanov bei Hewlett Packard geschrieben. Was wir heute C++ nennen ist im ISO/IEC 14882:2017 (oder ältere Fassungen) niedergeschrieben und nicht vergeleichbar mit damalige Programmiersprache.
Schnell verbreitete sich die STL und war sehr beliebt. Verständlicherweise, denn sie gab Programmieren fertige Klassen und neue Datentypen an die Hand, mit denen sich viele grundlegenden Aufgabe sofort lösen ließen.
Die Bibliothek basiert vollständig auf dem Konzept der Trennung von Datenspeicherung und Datenmanipulation. Zu diesem Zweck wurden die drei Haupkomponenten Container, Iteratoren und Algorithmen eingeführt.
Container Klassen dienen zur Speicherung von Daten. Algorithmen sind für die Manipulation von Daten zuständig, haben aber keinen Zugriff auf die Daten. Nur Iteratoren können auf Speicheradressen der Container zeigen und ermöglichen das Zugreifen. Der Algorithmus arbeitet also mit dem Iterator zusammen und manipuliert so indirekt die Daten des Containers.
Diese Komponenten sollten generisch sein. Die generische Programmierung hält Funktionen und Klassen so allgemein, dass diese nicht auf irgendeinen Datentypen beschränkt sind. Damit das überhaupt möglich ist, musste das Konzept der Templates eingeführt werden.
Daher auch der Name Standard Template Library. Alle Klasse aus dieser Bibliothek sind als Templates geschrieben.
Es wird Zeit für einen Standard
In den 90’er gab es die ersten Bestrebungen C++ zu vereinheitlichen und gemeisam weiterzuentwickeln. Ein weltweiter Standard sollte definiert werden.
Eine Programmiersprache besteht nicht nur aus Vokabeln und Grammatikregel, um dem Computer eine Anweisung zu geben. Zu den besonderen Schlüsselwörtern und der speziellen Syntax zur Programmstrukturierung gehört auch eine Standard Bibliothek, um einen vollstänsigen Sprachstandard zu haben.
Aufgrund der vielen Vorteile der STL, flossen unter Einverständis von Alexander Stepanov große Teile davon in die erste Fassung der C++ Standard Library ein. Doch dazu kam noch einiges mehr.
Zu den Bestandteilen gehören:
- String
- Numerische Berechnungen
- Eingabe- und Ausgabe
- Fehlerbehandlung
- Nationale Besonderheiten
- Speicher-Verwaltung
- Laufzeit-Typerkennung
- Hilfsfunktionen
- Standard Template Library
Selbst die C Standard Library gehört zur C++ Standard Library, da die Kompatibilität zu C immer gewährleistet sein soll.
Du siehst also, die C++ Standard Library ist bei weitem mehr als die STL. Hinzu kommt, dass mit jeder neuen Fassung des ISO Standards die Bibliothek erweitert, verbessert und verändert wird. Zurzeit wird an der ISO/IEC 14882:2020 gearbeitet. Darin steckt mehr als zwanzig Jahre Erfahrung und Fortschritt verglichen mit der ersten Fassung.
Doch haben in diesem Zeitraum viele Entwickler und Buch Autoren weiterhin den Namen STL verwendet. Obwohl es offensichtlich zwei verschiedene Entitäten sind.
Wie heißt du?
Nun stehen wir da. Haben zwei Namen und zwei Bibliotheken. Eigentlich eine geeignete Konstellation für klare Verhältnisse.
Um dieses Wirrwarr perfekt zu machen, gibt es emotionale Diskussionen darüber, ob die gesamte Standard Library STL genannt werden sollte oder nur Teile davon. Oder ob es nicht ganz egal sei, wie man es nennt.
Die eine Gruppe argumentiert damit, dass doch mittlerweile bekannt sei, dass heute mit dem Begriff STL die Standard Library gemeint wäre. Genauso, wie jeder mit C++ den ISO Standard verbindet und keine der älteren Versionen.
Wiederum andere sagen, dass der Name egal sei. Solange jeder weiß worüber gerade gesprochen wird.
Gegner der STL Bezeichnung finde es zu verwirrend. Wer heute anfängt C++ zu lernen kennt die Standrad Template Library nicht und muss sich an diesen Begriff genauso gewöhnen, wie an jeden anderen.
Dann treffen sie auf eine Bibliothek, die tatsächlich eine Umsetzung der ursprünglichen STL ist. Dieser fehlt es an den zusätzlichen Eigenschaften der Standard Library und dem unerfahrenen Nutzer an dem Verständnis warum.
Es sieht bisher nicht aus, als würde es bald zu einer Einigung kommen. Die verschiedenen Lager bestehen auf ihre Meinungen und das Namenschaos bleibt vorerst.
Die Konklusion
Ein großer Teil der aktuellen C++ Standard Library hat seinen Ursprung aus der bei HP entwickelten Fassung der STL. Doch nicht alles wurde übernommen und manches unterscheidet sich sogar davon. Deshalb können meiner Meinung nach die beiden Bibliotheken nicht gleichgesetzt oder die Namen synonym verwendet werden.
Selbst nur eine Teilmenge der C++ Standard Library als STL zu bezeichen funktioniert nicht. Denn auch übernommene Teile wurden mit der Weiterentwicklung der Bibliothek verändert.
Hinzu kommen andere Bestandteile, wie Strings oder Streams, die damals nicht in der STL enthalten waren.
Zudem wirst du den Begriff STL in der C++ ISO Norm nicht finden.
Stellst du die beiden Bibliotheken gegenüber sind Überschneidungen sichtbar, aber die Unterschiede stechen sehr hervor. Um eine klare und eindeutige Kommunikation zu gewährleisten, werde ich fortan die ISO Bezeichnung C++ Standard Library beibehalten.
Und wie stehst du dazu? Siehst du auch ein Begriffschoas oder sind das für dich eher Haarspaltereien?
Ich wünsche dir maximalen Erfolg!
Quellen
- [1] U. Breymann, Der C++ Programmierer. C++ lernen – professionell anwenden – Lösungen nutzen. Aktuell zu C++17. München: Carl Hanser Verlag GmbH & Co. KG; 5. Auflage, 6. November 2017. S. 427 ff
- [2] Standard C++ Foundation, ‘The Standard’, 2019. [Online]. Available: https://isocpp.org/std/the-standard. [Accessed: 24-Jul-2019].
- [3] ISO, ‘ISO International Standard ISO/IEC 14882:2017(E) – Programming Language C++’, 2017. [Online]. Available: https://www.iso.org/standard/68564.html. [Accessed: 24-Jul-2019].
- [4] A. Stevens, ‘Interview Alex Stepanov’, Dr. Dobb’s Journal, 1995. [Online]. Available: http://stepanovpapers.com/drdobbs-interview.html. [Accessed: 24-Jul-2019].
- [5] Leibniz Universität, ‘Ergänzungen zu dem Handbuch “C++ für C-Programmierer” - C++-Standard-Library’. Hannover: Leibniz Universität. [Online]. Available: https://www.luis.uni-hannover.de/fileadmin/buecher/umdrucke/CPlus_Handbuch/standardLib_02.pdf. [Accessed: 24-Jul-2019].