503 votes

Ce qui ' s ce STL vs « Bibliothèque Standard de C++ » combattre tout sur ?

Quelqu'un a apporté cet article à mon attention que les réclamations (je paraphrase) la STL terme utilisé pour désigner l'ensemble de la Norme C++ de la Bibliothèque à la place des pièces qui ont été prises à partir de SGI STL.

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

Les parties de la Norme C++ de la Bibliothèque ont été basés sur des parties de la STL, et c'est dans ces pièces que beaucoup de gens (y compris plusieurs auteurs et par la célèbre monté par erreur cplusplus.com) se réfèrent encore "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 l'ensemble de la bibliothèque standard. Il est mis sur un Cv. Et il est trompeur.

Je ne sais rien à propos de C++de l'histoire donc je ne peux pas juger de l'article est correct. Devrais-je éviter d'utiliser le terme STL? Ou est-ce une opinion isolée?

634voto

Lightness Races in Orbit Points 122793

Le "STL" a été écrit par Alexander Stepanov dans les jours avant le C++ a été standardisé. C++ existé à travers les années 80, mais ce que nous appelons maintenant "C++" est le langage normalisé dans la norme ISO/IEC 14882:1998 (et la norme ISO/IEC 14882:2003).

Le TSL a été déjà largement utilisé comme une bibliothèque en C++, pour donner aux développeurs l'accès à conteneurs, les itérateurs et les algorithmes. Lors de la normalisation qui s'est passé, la langue comité des parties de la Norme C++ de la Bibliothèque (qui fait partie de la langue standard) à la très près correspondre à la STL.

Au fil des ans, beaucoup de gens — y compris les éminents auteurs de livre, et par la célèbre monté par erreur cplusplus.com — ont continué à se référer à la Norme C++ de la Bibliothèque comme "le TSL", malgré le fait que les deux entités sont séparées et qu'il existe certaines différences. Ces différences sont encore plus prononcées dans la prochaine nouvelle norme C++, qui comprend différentes fonctionnalités et modifie de manière significative de certaines classes.

L'original de la STL est maintenant souvent appelé "une mise en œuvre de la Norme C++ Template Library" (plutôt vers l'arrière à la réalité historique!), de la même manière que votre Microsoft Visual Studio ou GCC navires de mise en œuvre de la Norme C++ de la Bibliothèque. Mais le "Modèle Standard de la Bibliothèque" et de la "Bibliothèque Standard" ne sont pas la même chose.

La bataille est de savoir si la Norme actuelle de la Bibliothèque doit être appelé "le TSL" en tout ou en partie, et/ou s'il importe de quoi il est appelé.

Pour "STL"

Il y a une école de pensée qui dit que tout le monde sait aujourd'hui que la "STL" s'entend de la bibliothèque standard, comme tout le monde sait maintenant que "C++" est la norme ISO-langage normalisé.

Il comprend également ceux qui croient qu' il n'a pas vraiment d'importance , tant que toutes les parties comprennent ce qui est en train de parler.

C'est un terme encore plus répandue de par la nature de la bête, une grande partie de ce qui rend l'utilisation intensive du C++ fonctionnalité connue sous le nom de "modèles".

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

Cependant, il y a une autre école de pensée à laquelle je suis abonné, — qui dit que c'est déroutant. L'apprentissage de C++ pour la première fois de ne pas connaître cette distinction, et peut ne pas remarquer les petites différences de langage.

L'auteur de cet article a de nombreuses reprises rencontré des gens qui croient que l'ensemble du C++ Standard Library est le TSL, y compris des fonctionnalités qui n'ont jamais fait partie de la STL. Plus ardents promoteurs de la "STL", en revanche, savent exactement ce qu'ils veulent dire par la, et de refuser de croire que tout le monde ne "reçoit". Clairement, l'usage du terme n'est pas uniforme.

En outre, il y a quelques STL-comme les bibliothèques, qui sont en fait des implémentations de l'original de la STL, pas le C++ de la Bibliothèque Standard. Jusqu'à récemment, STLPort était l'un d'entre eux (et même là, la confusion abonde!).

En outre, la Norme C++ ne contient pas le texte "STL" n'importe où, et certaines personnes habituellement employer des expressions comme "le TSL est inclus dans le Standard C++ Library", qui est un format incorrect.

C'est ma conviction que le fait de continuer à propager l'utilisation de ce terme dans cette façon ne fera que mener à l'incompréhension d'aller à l'infini. 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 vivons peut-être coincé avec les double sens pour toujours.

Conclusion

J'apprécie que ce post a été un peu biaisé: j'ai écrit l'article que vous avez lié. :) De toute façon, j'espère que cela aide à expliquer la bataille un peu mieux.

Mise à jour 13/04/2011

Voici trois parfaits exemples de quelqu'un qui utilise "le TSL" pour désigner l'ensemble de la Norme C++ de la Bibliothèque. Il continue de déflecteur de moi que beaucoup de gens jure aveugle que personne n'a jamais fait cela, quand il est facile de voir sur une base quasi quotidienne.

91voto

Jerry Coffin Points 237758

Il n'y a pas de réponse c'est vraiment correct. Alexander Stepanov développé une bibliothèque, il a appelé STL (travaillant pour des HP à l'époque). Cette bibliothèque a ensuite été proposés pour inclusion dans la norme C++.

Que, fondamentalement, "en fourche" de développement. Le comité a inclus certaines parties, rejeté d'autres complètement, et repensé un peu (avec Alexandre de la participation). Le développement de la bibliothèque d'origine, a été déplacé à Silicon Graphics, mais poursuivie séparément de la norme C++ de la bibliothèque.

Après ces pièces ont été ajoutées à la bibliothèque standard, certaines autres parties de la bibliothèque standard ont été modifiés pour mieux s'ajuster à ce qui a été ajouté (par exemple, begin, end, rbegin et rend ont été ajoutés à l' std::string de sorte qu'il peut être utilisé comme un conteneur). Dans le même temps, la plupart de la bibliothèque (même les pièces qui ont été complètement indépendantes ont été faites dans les modèles pour s'adapter à différents types (par exemple, les flux standard).

Certaines personnes utilisent également STL comme une forme abrégée de "Bibliothèque STandard".

Cela signifie que lorsque quelqu'un utilise le terme "STL" ils pourraient se référer à aucune d'environ une demi-douzaine de choses différentes. Pour le meilleur ou pour le pire, la plupart des gens qui l'utilisent semble ignorer la multiplicité de significations, et supposer que tout le monde va reconnaître ce qu'ils ont faites référence. Cela conduit à de nombreux malentendus, et au moins un peu de sérieux les trolls qui ont fait la plupart des participants sembler idiot parce qu'ils étaient tout simplement de parler de choses totalement différentes.

Malheureusement, la confusion est susceptible de se poursuivre sans relâche. Il est beaucoup plus commode de se référer à "STL" que quelque chose comme "les conteneurs, les itérateurs, et des algorithmes en C++ de la bibliothèque standard, mais ne comprenant pas l' std::string, même s'il peut agir comme un conteneur." Même si "C++ standard library" n'est pas aussi long et maladroit que ça, "STL" est encore beaucoup plus court et plus simple encore. Jusqu'à ce que ou à moins que quelqu'un invente des termes plus précis (si nécessaire), et tout aussi pratique, le "TSL" continuera à être utilisé et de la confusion continuera de résultat.

63voto

In silico Points 30778

Le terme "STL" ou "Standard Template Library" ne s'affiche pas partout dans la norme ISO 14882 C++ standard. Donc, en se référant à la norme C++ de la bibliothèque STL est faux. Le terme de "C++ Standard Library" ou "bibliothèque standard" est ce qui est utilisé officiellement par l'ISO 14882:

ISO 14882 C++ Standard:

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

  1. Cette clauses décrit le contenu de la Norme C++ de la Bibliothèque, comment un bien formée programme en C++ qui rend l'utilisation de la bibliothèque, et de façon conforme la mise en œuvre peut fournir l' les entités dans la bibliothèque.

...

STL est une bibliothèque à l'origine conçu par Alexander Stepanov, indépendant de la norme C++. Cependant, certaines composantes de la norme C++ bibliothèque STL des composants tels que l' vector, list et algorithmes tels que ceux - copy et swap.

Mais bien sûr, le C++ standard comprend beaucoup plus de choses à l'extérieur de la STL, de sorte que le terme "C++ standard library" est plus correct (et c'est ce qui est effectivement utilisé par les documents de normes).

23voto

Mark Ransom Points 132545

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

11voto

Nawaz Points 148870

Au départ, STL ne figurait pas dans la bibliothèque Standard de C++. Il l’habitude d’être une bibliothèque séparée, tout comme coup de pouce. Plus tard, il a été inclus dans la bibliothèque Standard. Mais beaucoup de programmeurs parlent encore habituelle de STL ; que je pense aussi parce que c’est la mise en œuvre largement utilise le modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X