„STL” został napisany przez Aleksandra Stepanowa na wiele dni przed standaryzacją C ++. C ++ istniał w latach 80., ale to, co teraz nazywamy „ C ++ ”, jest językiem znormalizowanym w ISO / IEC 14882: 2014 (i wcześniejszych wersjach, takich jak ISO / IEC 14882: 2011).
STL był już szeroko stosowany jako biblioteka dla C ++, dając programistom dostęp do kontenerów, iteratorów i algorytmów. Kiedy nastąpiła standaryzacja, komitet językowy zaprojektował części Standardowej Biblioteki C ++ (która jest częścią standardu językowego), aby bardzo ściśle pasowały do STL.
Przez lata wiele osób - w tym wybitni autorzy książek i różne strony internetowe - nadal używało Standardowej Biblioteki C ++ jako „STL”, pomimo faktu, że te dwa podmioty są oddzielne i istnieją pewne różnice. Różnice te są jeszcze bardziej wyraźne w nadchodzącym nowym standardzie C ++, który zawiera różne funkcje i znacząco zmienia niektóre klasy.
Oryginalny STL jest obecnie często nazywany „implementacją Standardowej Biblioteki Szablonów C ++” (raczej wstecz do faktycznej historii!), W taki sam sposób, w jaki Microsoft Visual Studio lub GCC dostarcza implementację Standardowej Biblioteki C ++. Ale „Standardowa biblioteka szablonów” i „Standardowa biblioteka” to nie to samo.
Bitwa dotyczy tego, czy obecna Biblioteka Standardowa powinna być nazywana „STL” w całości czy w części i / lub czy ma znaczenie, jak się nazywa.
Dla „STL”
Istnieje szkoła myślenia, która mówi, że wszyscy wiedzą, że „STL” oznacza bibliotekę standardową, podobnie jak wszyscy wiedzą, że „C ++” jest językiem znormalizowanym ISO.
Dotyczy to również tych, którzy uważają, że to nie ma znaczenia, o ile wszystkie strony rozumieją, o czym mówi się.
Jest to termin jeszcze bardziej rozpowszechniony ze względu na naturę bestii, z których wiele w dużym stopniu wykorzystuje funkcję C ++ znaną jako „szablony”.
Dla „C ++ Standard Library” (lub stdlib)
Istnieje jednak inna szkoła myślenia - do której się zgadzam - która mówi, że jest to mylące. Ludzie uczący się C ++ po raz pierwszy nie znają tego rozróżnienia i mogą nie zauważyć niewielkich różnic językowych.
Autor tego artykułu wiele razy spotykał się z ludźmi, którzy wierzą, że cała biblioteka standardowa C ++ to STL, w tym funkcje, które nigdy nie były częścią samej STL. Z drugiej strony większość głosicieli „STL” dokładnie wie, co przez to rozumieją i nie wierzy, że nie wszyscy to rozumieją. Oczywiście użycie tego terminu nie jest jednolite.
Ponadto istnieją biblioteki podobne do STL, które w rzeczywistości są implementacjami oryginalnej biblioteki STL, a nie biblioteki standardowej C ++. Do niedawna STLPort był jednym z nich (i nawet tam zamieszanie jest ogromne!).
Ponadto standard C ++ nie zawiera nigdzie tekstu „STL”, a niektóre osoby zwykle używają zwrotów takich jak „STL znajduje się w standardowej bibliotece C ++”, co jest po prostu niepoprawne.
Wierzę, że dalsze rozpowszechnianie użycia tego terminu w ten sposób doprowadzi do nieporozumień, które będą trwały wiecznie. Niestety próba zmiany rzeczy może być całkowicie bezproduktywna, nawet jeśli ma to być lepsze. Możemy po prostu utknąć na zawsze w podwójnym znaczeniu.
Wniosek
Doceniam to, że ten post był nieco stronniczy: napisałem artykuł, do którego linkujesz. :) W każdym razie mam nadzieję, że to pomoże trochę lepiej wyjaśnić bitwę.
Aktualizacja 13/04/2011
Oto trzy doskonałe przykłady kogoś, kto używa „STL” w odniesieniu do całej biblioteki standardowej C ++. Wciąż mnie zaskakuje, że tak wielu ludzi przysięga na ślepo, że nikt tego nigdy nie robi, kiedy widać to prawie codziennie.