# Standard Template Library

Als Standard Template Library (STL) werden verschiedene in der Programmiersprache C++ geschriebene Bibliotheken bezeichnet.
Ursprünglich wurde mit Standard Template Library eine in den 1980er Jahren bei Hewlett-Packard (kurz: HP) entwickelte, in C++ verfasste Bibliothek bezeichnet, die weitgehend auf generischer Programmierung mit dem Schwerpunkt Datenstrukturen und Algorithmen basierte. Diese Bibliothek beeinflusste maßgeblich die sogenannte C++-Standardbibliothek, die heute fester Bestandteil der Programmiersprache C++ ist.

## Entstehung

Die bei HP entwickelte STL geht auf sehr alte Wurzeln zurück. Schon 1971 gab es erste Entwürfe generischer Bibliotheken von Dave Musser. 1979 begann Alexander Stepanow mit der Entwicklung seiner Ideen auf diesem Gebiet. Die Umsetzung in einer großen Programmiersprache erfolgte jedoch erst 1987 mit der Programmiersprache Ada.
Stepanow und Meng Lee, damals Mitarbeiter bei Hewlett-Packard, nannten die von ihnen entwickelte Programmbibliothek STL. Später wurde diese Bibliothek gemeinfrei. Danach, im Jahr 1993, also zu einer Zeit als sich C++ noch in einem frühen Entwicklungsstadium befand, stellten sie die Bibliothek dem C++-Standardisierungskomitee vor, das daraus im Laufe der Zeit einen konkreten Vorschlag zur Aufnahme in die Programmiersprache C++ ausarbeitete, was schließlich zur Integration führte.
Stepanow wechselte später zu Silicon Graphics (kurz: SGI) und setzte auch danach die Arbeiten an seiner Bibliothek fort.

## Bezug zur C++-Standardbibliothek

Von der heutigen C++-Standardbibliothek stammt zwar ein Großteil aus der STL in ihrer bei HP entwickelten Fassung auf dem Stand von 1993, in verschiedenen Details unterscheidet sie sich aber davon. Aus diesem Grund ist es nicht möglich, eine Teilmenge der C++-Standardbibliothek als STL zu benennen. Auch enthielt die STL in der damaligen Fassung weder Zeichenketten (Strings) noch Ein-/Ausgabedatenströme (Streams). In der C++-Norm kommt der Begriff STL nicht vor.

## Verschiedene Bibliotheken namens STL

Inoffiziell hat die Bezeichnung STL weite Verbreitung. Die unterschiedlichen Vorstellungen über die Bedeutung dieses Begriffs führen aber bisweilen zu Missverständnissen. Bei SGI ist mit „STL“ beispielsweise die dort veröffentlichte Bibliothek gemeint, die sich wiederum stark von der bei HP entwickelten Fassung unterscheidet.
Es gibt keine durch nationale oder internationale Normen definierte Bibliothek namens STL. Die Ideen der STL wurden erstmals 1998 in den damaligen C++98-Standard in die C++ Standard Library aufgenommen und werden seitdem stetig (C++03, C++11, C++14, C++17, C++20) weiterentwickelt.
Die folgenden von der C++-Standardbibliothek unabhängigen Bibliotheken nennen sich STL oder tragen den Bestandteil STL im Namen:
* die ursprüngliche, bei HP entwickelte Bibliothek STL (Entwicklung eingestellt)
* die bei Silicon Graphics gepflegte STL; gegenüber der HP-STL stark erweitert; enthält mehr oder weniger die C++-Standardbibliothek mit Ausnahme der von C übernommenen Bibliotheken; darüber hinaus Erweiterungen wie Hash-Maps, die nicht in den Standard übernommen wurden, sowie rope, ein Datentyp zur effizienteren Verarbeitung sehr langer Zeichenketten (Entwicklung eingestellt)
* die freie Bibliothek STLport; war eine Zeitlang eine Art Alternative zur C++-Standardbibliothek
* eine .Net-Framework-Bibliothek namens STL/CLI; wurde entwickelt zur Ausnutzung von mit C++/CLI eingeführten Spracherweiterungen; lässt sich mit Standard-C++-Compilern nicht übersetzen