Quelle est la différence entre "STL" et "C++ Standard Library"?

Quelqu'un a apporté cet article à mon attention que les revendications (Je paraphrase) le terme STL est utilisé à tort pour se référer à l'ensemble de la bibliothèque Standard C++ au lieu des pièces qui ont été prises à partir de SGI STL.

(...) il fait référence à la" STL", malgré le fait que très peu de personnes utilisent encore la STL (qui a été conçue chez SGI).

parties de la bibliothèque Standard C++ étaient basées sur et ce sont ces parties que beaucoup de gens (y compris plusieurs auteurs et les cplusplus.com) toujours appelé "le STL". Cependant, cela est inexact; en effet, la norme C++ ne mentionne jamais "STL", et il y a des différences de contenu entre les deux.

(...) "STL" est rarement utilisé pour désigner les bits de la stdlib qui se trouvent être basée sur les SIG STL. Les gens pensent que c'est toute la bibliothèque standard. Il est mis sur CVs. Et c'est trompeur.

Je ne sais rien de L'histoire de C++donc je ne peux pas juger de la justesse de l'article. Devrais-je m'abstenir d'utiliser le terme STL? Ou est-ce une opinion isolée?

381
demandé sur xskxzr 2011-03-05 20:32:14

5 réponses

le "STL" a été écrit par Alexander Stepanov dans les jours bien avant C++ a été standardisé. C++ a existé dans les années 80, mais ce que nous appelons maintenant " C++ " est le langage standardisé dans ISO/IEC 14882:2014 (et versions antérieures, telles que ISO/IEC 14882:2011).

le STL était déjà largement utilisé comme bibliothèque pour C++, donnant aux programmeurs accès à des conteneurs, des itérateurs et des algorithmes. Quand la standardisation a eu lieu, le Comité de langue a conçu parties de la bibliothèque standard C++ (qui fait partie de la norme de langue) à très très proche de la norme STL.

au fil des ans, de nombreuses personnes - y compris des auteurs de livres éminents et divers sites Web - ont continué à appeler la bibliothèque Standard C++ "la STL", malgré le fait que les deux entités sont séparées et qu'il y a quelques différences. Ces différences sont encore plus prononcé dans la nouvelle norme C++ à venir, qui comprend diverses fonctionnalités et modifie considérablement certaines classes.

le STL original est maintenant souvent appelé "une implémentation de la bibliothèque de modèles Standard C++" (plutôt en arrière vers l'histoire réelle!), de la même manière que votre Microsoft Visual Studio ou GCC fournit une implémentation de la bibliothèque Standard C++. Mais la "bibliothèque de modèles Standard" et la "bibliothèque Standard" ne sont pas la même chose.

la bataille porte sur la question de savoir si la bibliothèque Standard actuelle devrait être appelée" la STL " en tout ou en partie, et/ou si cela importe ce qu'on appelle.

Pour "STL"

il y a une école de pensée qui dit que tout le monde sait maintenant que" STL "signifie la bibliothèque standard, tout comme tout le monde sait maintenant que" C++ " est le langage standardisé ISO.

Cela inclut aussi ceux qui croient que cela n'a pas vraiment d'importance tant que toutes les parties comprennent ce dont on parle.

c'est un terme rendu encore plus répandu par la nature de The beast, qui utilise beaucoup la fonctionnalité C++ connue sous le nom de"templates".

Pour "C++ Standard Library" (ou stdlib)

cependant, il y a une autre école de pensée - à laquelle je souscris - qui dit que c'est déroutant. Les gens qui apprennent le C++ pour la première fois ne connaissent pas cette distinction, et ne remarqueront peut-être pas de petites différences linguistiques.

l'auteur de cet article a rencontré à plusieurs reprises des gens qui croient que toute la bibliothèque standard C++ est le STL, y compris des fonctionnalités qui n'ont jamais fait partie du STL lui-même. La plupart des partisans du "STL", en revanche, savent exactement ce qu'ils entendent par là et refusent de croire que non tout le monde est d'". Clairement, l'usage du terme n'est pas uniforme.

de plus, il existe certaines bibliothèques de type STL qui sont en fait des implémentations de la bibliothèque STL originale, et non de la bibliothèque Standard C++. Jusqu'à récemment, STLPort était l'un d'eux (et même là, la confusion abonde!).

de plus, la norme C++ ne contient le texte "STL" nulle part, et certaines personnes emploient habituellement des phrases comme "le TSL est inclus dans le C++ Standard Library", qui est un format incorrect.

je crois que le fait de continuer à propager l'usage du terme de cette façon ne fera qu'entraîner un malentendu qui perdurera à jamais. Hélas, il peut être tout à fait contre-productif de tenter de changer les choses, même si c'est censé être pour le mieux. Nous pouvons être coincés avec des doubles sens pour toujours.

Conclusion

j'apprécie que ce post a été un peu biaisé: j'ai écrit l'article que vous avez lié. :) Quoi qu'il en soit, j'espère que cela aidera à expliquer la bataille un peu mieux.

mise à jour 13/04/2011

Voici trois parfait exemples de quelqu'un qui utilise "le TSL" pour désigner l'ensemble de la Norme C++ de la Bibliothèque. Il continue à déconcerter moi que tant de gens jurent aveugle que personne ne le fait jamais, quand il est évident de voir presque tous les jours.

502
répondu Lightness Races in Orbit 2017-05-23 12:26:33

il n'y a pas une seule réponse qui soit vraiment correcte. Alexander Stepanov a développé une bibliothèque qu'il a appelé STL (travaillant pour HP à l'époque). Cette bibliothèque a ensuite été proposée pour inclusion dans la norme c++.

qui a essentiellement "bifurqué" le développement. Le Comité comprenait certaines parties, en a rejeté d'autres complètement et en a redessiné quelques-unes (avec la participation d'Alexander). Le développement de la bibliothèque d'origine a été plus tard déplacé à Silicon Graphics, mais a continué séparément de la Bibliothèque standard C++.

après que ces pièces ont été ajoutées à la bibliothèque standard, certaines autres parties de la bibliothèque standard ont été modifiées pour mieux s'adapter à ce qui a été ajouté (par ex., begin , end , rbegin et rend ont été ajoutés à std::string afin qu'il puisse être utilisé comme un conteneur). À peu près à la même époque, la plupart de la bibliothèque (même les pièces qui étaient complètement sans rapport ont été faites dans des gabarits pour s'adapter à différents types (p. ex. cours d'eau standard).

certaines personnes utilisent aussi STL comme une forme courte de"bibliothèque STandard".

cela signifie que quand quelqu'un utilise le terme" STL " ils pourraient faire référence à l'une d'une demi-douzaine de choses différentes. Pour le meilleur et pour le pire, la plupart des gens qui l'utilisent semblent ignorer la multiplicité des significations, et supposent que tout le monde reconnaîtra ce à quoi ils font référence. Cela conduit à de nombreux malentendus, et au moins quelques guerres enflammées sérieuses qui ont fait passer la plupart des participants pour des idiots parce qu'ils parlaient simplement de choses totalement différentes.

malheureusement, la confusion risque de perdurer. Il est beaucoup plus pratique de faire référence à "STL" que quelque chose comme "les conteneurs, les itérateurs, et les algorithmes dans la bibliothèque standard C++, mais sans inclure std::string , même si cela peut agir comme un conteneur."Même si" bibliothèque standard c++" n'est pas aussi long et maladroit comme cela, "STL" est encore beaucoup plus court et plus simple encore. Jusqu'à ou à moins que quelqu'un invente des termes plus précis (si nécessaire), et tout aussi commode, "STL" continuera d'être utilisé et la confusion continuera d'en résulter.

77
répondu Jerry Coffin 2013-06-01 18:21:49

le terme" STL "ou" Standard Template Library " n'apparaît nulle part dans la norme ISO 14882 c++. Ainsi, se référer à la bibliothèque standard C++ comme STL est une erreur. Le terme "bibliothèque standard C++" ou "bibliothèque standard" est ce qui est officiellement utilisé par la norme ISO 14882:

norme ISO 14882 C++:

17 - Bibliothèque introduction [lib.bibliothèque]:

  1. Cette clauses décrit le contenu de la C++ bibliothèque Standard , comment un programme C++ bien formé utilise la bibliothèque, et comment un conforme la mise en œuvre peut fournir les entités dans la bibliothèque.

...

STL est une bibliothèque conçue à L'origine par Alexander Stepanov, indépendante de la norme C++. Cependant, certains composants de la bibliothèque standard C++ incluent STL des composants comme vector , list et des algorithmes comme copy et swap .

mais bien sûr le standard c++ inclut beaucoup plus de choses en dehors du STL, donc le terme" bibliothèque standard C++ " est plus correct (et c'est ce qui est réellement utilisé par les documents standards).

44
répondu In silico 2011-03-05 17:54:02

j'ai fait ce même argument récemment, mais je crois qu'un peu de tolérance peut être admise. Si Scott Meyers fait la même erreur, vous êtes en bonne compagnie.

23
répondu Mark Ransom 2011-03-05 17:58:23

de la GNU Standard C++ Library (libstdc++) FAQ :


le STL (Standard Template Library) a été l'inspiration pour de grands morceaux de la bibliothèque Standard C++, mais les termes ne sont pas interchangeables et ils ne veulent pas dire la même chose. La bibliothèque Standard c++ inclut beaucoup de choses qui ne viennent pas de la STL, et certaines ne sont même pas des modèles, comme std::locale et std::thread .

Libstdc++ - v3 incorpore beaucoup de code de le SGI STL (la fusion finale était de version 3.3 ). Le code dans libstdc++ contient de nombreuses corrections et modifications par rapport au Code SGI d'origine.

en particulier, string ne provient pas de SGI et ne fait pas usage de leur classe de" corde "(bien que cela soit inclus comme extension facultative), ni n'est valarray ni d'autres. Les Classes comme vector<> étaient SGI, mais ont été considérablement modifiés.

plus d'informations sur l'évolution de libstdc++ peuvent être trouvées dans la documentation API evolution et rétrocompatibilité .

Le FAQ pour les SIG de la STL est toujours recommandé la lecture.


pour information, depuis mars 2018 même le site officiel de STL www.sgi.com/tech/stl / is partie .

1
répondu vstepaniuk 2018-04-13 17:30:53