Jemand machte mich auf diesen Artikel aufmerksam, der behauptet (ich paraphrasiere), dass der STL-Begriff missbraucht wird, um auf die gesamte C ++ - Standardbibliothek anstatt auf die Teile zu verweisen, die aus SGI STL stammen.
(...) es bezieht sich auf die "STL", obwohl nur noch sehr wenige Menschen die STL verwenden (die bei SGI entwickelt wurde).
Teile der C ++ - Standardbibliothek basierten auf Teilen der STL, und diese Teile werden von vielen Personen (einschließlich mehrerer Autoren und der notorisch fehlerbehafteten cplusplus.com) immer noch als "STL" bezeichnet. Dies ist jedoch ungenau; In der Tat erwähnt der C ++ - Standard niemals "STL", und es gibt inhaltliche Unterschiede zwischen den beiden.
(...) "STL" wird selten verwendet, um auf die Bits der stdlib zu verweisen, die zufällig auf der SGI STL basieren. Die Leute denken, es ist die gesamte Standardbibliothek. Es wird in Lebensläufe aufgenommen. Und es ist irreführend.
Ich weiß kaum etwas über die Geschichte von C ++, daher kann ich die Richtigkeit des Artikels nicht beurteilen. Sollte ich den Begriff STL nicht verwenden? Oder ist das eine isolierte Meinung?
Antworten:
Die "STL" wurde von Alexander Stepanov in den Tagen lange vor der Standardisierung von C ++ geschrieben. C ++ existierte in den 80ern, aber was wir jetzt " C ++ " nennen " nennen, ist die in ISO / IEC 14882: 2014 (und früheren Versionen wie ISO / IEC 14882: 2011) standardisierte Sprache.
Die STL wurde bereits häufig als Bibliothek für C ++ verwendet, um Programmierern Zugriff auf Container, Iteratoren und Algorithmen zu gewähren. Als die Standardisierung erfolgte, entwarf das Sprachkomitee Teile der C ++ - Standardbibliothek (die Teil des Sprachstandards ist) so, dass sie sehr genau mit der STL übereinstimmen.
Im Laufe der Jahre haben viele Menschen - darunter prominente Buchautoren und verschiedene Websites - die C ++ - Standardbibliothek weiterhin als "STL" bezeichnet, obwohl die beiden Entitäten getrennt sind und es einige Unterschiede gibt. Diese Unterschiede sind im kommenden neuen C ++ - Standard noch ausgeprägter, der verschiedene Funktionen enthält und einige Klassen erheblich verändert.
Die ursprüngliche STL wird heute häufig als "Implementierung der C ++ - Standardvorlagenbibliothek" bezeichnet (eher rückwärts zum tatsächlichen Verlauf!), So wie Microsoft Visual Studio oder GCC eine Implementierung der C ++ - Standardbibliothek ausliefert. Die "Standard Template Library" und die "Standard Library" sind jedoch nicht dasselbe.
Im Kampf geht es darum, ob die aktuelle Standardbibliothek ganz oder teilweise als "STL" bezeichnet werden soll und / oder ob es darauf ankommt, wie sie heißt.
Für "STL"
Es gibt eine Denkschule, die besagt, dass jeder jetzt weiß, dass "STL" die Standardbibliothek bedeutet, genauso wie jeder jetzt weiß, dass "C ++" die ISO-standardisierte Sprache ist.
Es schließt auch diejenigen ein, die glauben, dass es nicht wirklich wichtig ist , solange alle Parteien verstehen, worüber gesprochen wird.
Es ist ein Begriff, der durch die Natur des Tieres noch häufiger verwendet wird. In vielen Fällen wird die als "Vorlagen" bekannte C ++ - Funktion stark genutzt.
Für "C ++ Standard Library" (oder stdlib)
Es gibt jedoch eine andere Denkrichtung - der ich mich anschließe -, die besagt, dass dies verwirrend ist. Leute, die zum ersten Mal C ++ lernen nicht kennen diese Unterscheidung und nicht kleine sprachliche Unterschiede feststellen.
Der Autor dieses Artikels ist mehrfach auf Leute gestoßen, die glauben, dass die gesamte C ++ - Standardbibliothek vorhanden ist die STL, einschließlich Funktionen , die nie Teil der STL selbst waren. Im Gegensatz dazu wissen die meisten Befürworter der "STL" genau, was sie damit meinen, und weigern sich zu glauben, dass nicht jeder "es versteht". Die Verwendung des Begriffs ist eindeutig nicht einheitlich.
Darüber hinaus gibt es einige STL-ähnliche Bibliotheken, bei denen es sich tatsächlich um Implementierungen der ursprünglichen STL handelt, nicht der C ++ - Standardbibliothek. Bis vor kurzem war STLPort einer von ihnen (und selbst dort die Verwirrung !).
Des Weiteren wird der C ++ Standard - nicht den Text „STL“ enthalten überall, und einige Leute gewöhnlich Sätze beschäftigen wie „die STL ist enthalten in der C ++ Standard Library“, die schlicht falsch ist.
Ich bin der Überzeugung, dass die weitere Verbreitung der Verwendung des Begriffs auf diese Weise nur zu einem Missverständnis führen wird, das für immer andauert. Leider kann es völlig kontraproduktiv sein, zu versuchen, Dinge zu ändern, selbst wenn es zum Besseren sein soll. Wir können nur für immer mit Doppelbedeutungen stecken bleiben.
Fazit
Ich schätze, dass dieser Beitrag etwas voreingenommen war: Ich habe den Artikel geschrieben, auf den Sie verlinkt haben. :) Wie auch immer, ich hoffe das hilft, den Kampf ein bisschen besser zu erklären.
Update 13/04/2011
Hier sind drei perfekte Beispiele für jemanden, der "die STL" verwendet, um auf die gesamte C ++ - Standardbibliothek zu verweisen. Es verwirrt mich weiterhin, dass so viele Menschen blind schwören, dass niemand dies jemals tut, wenn es fast täglich zu sehen ist.
quelle
std::iota
befindet, weil er es nicht zum Laufen bringen konnte. Es ist eine nicht standardmäßige SGI-Erweiterung , die sie "Standard" nennen, wenn es ihnen passt, weil es "die STL" ist, und jeder weiß, dass "die STL" Teil der C ++ - Standardbibliothek ist, oder? Und es wurde in C ++ 0x eingeführt, ist aber in C ++ 03 nicht verfügbar. Grrr.Es gibt keine Antwort, die wirklich richtig ist. Alexander Stepanov entwickelte eine Bibliothek namens STL (damals für HP tätig). Diese Bibliothek wurde dann zur Aufnahme in den C ++ - Standard vorgeschlagen.
Diese "gespaltene" Entwicklung im Grunde. Das Komitee umfasste einige Teile, lehnte andere vollständig ab und gestaltete einige neu (unter Beteiligung von Alexander). Die Entwicklung der ursprünglichen Bibliothek wurde später auf Silicon Graphics verschoben, jedoch getrennt von der C ++ - Standardbibliothek fortgesetzt.
Nachdem diese Stücke auf der Standard - Bibliothek hinzugefügt wurden, wurden einige andere Teile der Standardbibliothek zu passen besser modifiziert mit dem, was hinzugefügt wurde ( zum Beispiel
begin
,end
,rbegin
undrend
wurden hinzugefügt ,std::string
so dass es wie ein Behälter verwendet werden könnte). Etwa zur gleichen Zeit war der größte Teil der Bibliothek (sogar Stücke, die komplett waren ohne Bezug) wurden in Vorlagen aus verschiedenen Typen aufnehmen (zB Standard - Streams).Einige Leute verwenden STL auch nur als Kurzform der "STandard Library".
Das heißt, wenn jemand den Begriff "STL" verwendet, kann er sich auf eines von etwa einem halben Dutzend verschiedener Dinge beziehen. Ob gut oder schlecht, die meisten Leute, die es benutzen, scheinen die Vielzahl der Bedeutungen zu ignorieren und davon auszugehen, dass alle anderen erkennen, worauf sie sich beziehen. Dies führt zu vielen Missverständnissen und zumindest einigen ernsthaften Flammenkriegen, die die meisten Teilnehmer dumm aussehen ließen, weil sie einfach über ganz andere Dinge sprachen.
Leider wird die Verwirrung wahrscheinlich unvermindert anhalten. Es ist viel bequemer, auf "STL" zu verweisen als auf "die Container, Iteratoren und Algorithmen in der C ++ - Standardbibliothek, jedoch nicht auf diese
std::string
, obwohl sie sich wie ein Container verhalten können". Obwohl "C ++ Standard Library" nicht ganz so lang und ungeschickt ist, ist "STL" immer noch viel kürzer und einfacher. Bis oder solange jemand Begriffe erfindet, die präziser (wenn nötig) und genauso praktisch sind, wird "STL" weiterhin verwendet und es kommt weiterhin zu Verwirrung.quelle
std
. Ich habe über "std" in "stdlib" gesprochen, was für "standard" steht. Ich denke es ist ziemlich klar was das bedeutet!std
UB ist, außer in einigen bestimmten benannten Fällen: Diese Fälle des Hinzufügens sind im Standard benannt und daher immer noch vollkommen konform; "Standard" würde weiterhin gelten.Der Begriff "STL" oder "Standard Template Library" kommt im ISO 14882 C ++ - Standard nirgendwo vor. Es ist also falsch, die C ++ - Standardbibliothek als STL zu bezeichnen. Der Begriff "C ++ Standard Library" oder "Standard Library" wird von ISO 14882 offiziell verwendet:
STL ist eine Bibliothek, die ursprünglich von Alexander Stepanov unabhängig vom C ++ - Standard entworfen wurde. Allerdings sind einige Komponenten der C ++ Standardbibliothek STL - Komponenten wie
vector
,list
und Algorithmen wiecopy
undswap
.Aber natürlich enthält der C ++ - Standard viel mehr Dinge außerhalb der STL, daher ist der Begriff "C ++ - Standardbibliothek" korrekter (und wird tatsächlich von den Standarddokumenten verwendet).
quelle
std
Namespace (IIRC) gab.Ich habe das gleiche Argument kürzlich vorgebracht, aber ich glaube, dass ein wenig Toleranz erlaubt sein kann. Wenn Scott Meyers den gleichen Fehler macht, sind Sie in guter Gesellschaft.
quelle
-1
von mir. Das Buch handelt in der Tat von der STL im Sinne von "den Teilen der Standardbibliothek, die aus Stepanovs Bibliothek stammen". Nehmen Sie sich Zeit, um das Inhaltsverzeichnis der Bücher durchzusehen. Das einzige, was ich außerhalb der ursprünglichen STL finden konnte, warstd::string
, dass es sich um einen ausgewachsenen STL-Container handelte.Aus den häufig gestellten Fragen zur GNU Standard C ++ - Bibliothek (libstdc ++) :
Die STL (Standard Template Library) war die Inspiration für große Teile der C ++ Standard Library, aber die Begriffe sind nicht austauschbar und bedeuten nicht dasselbe. Die C ++ - Standardbibliothek enthält viele Dinge, die nicht aus der STL stammen, und einige davon sind nicht einmal Vorlagen wie
std::locale
undstd::thread
.Libstdc ++ - v3 enthält viel Code aus der SGI STL (die endgültige Zusammenführung erfolgte ab Version 3.3 ). Der Code in libstdc ++ enthält viele Korrekturen und Änderungen im Vergleich zum ursprünglichen SGI-Code.
Insbesondere
string
ist nicht von SGI und nutzt ihre "Seil" -Klasse nicht (obwohl dies als optionale Erweiterung enthalten ist), weder istvalarray
noch einige andere. Klassen wievector<>
waren von SGI, wurden aber umfassend modifiziert.Weitere Informationen zur Entwicklung von libstdc ++ finden Sie unter API-Entwicklung und Abwärtskompatibilität Dokumentation zur .
Die FAQ für die STL von SGI wird weiterhin empfohlen.
Zu Ihrer Information , ab März 2018 ist sogar die offizielle STL-Website www.sgi.com/tech/stl/ weg .
quelle