有人把这篇文章引起了我的注意,声称(我在解释)STL术语被误用来引用整个C++标准库,而不是从SGI STL中提取的部分。
(...) it refers to the"STL", despite the fact that very few people still use the STL (which was designed at SGI).
Parts of the C++ Standard Library were based on parts of the STL, and it is these parts that many people (including several authors and the notoriously error-ridden cplusplus.com) still refer to as"the STL". However, this is inaccurate; indeed, the C++ standard never mentions"STL", and there are content differences between the two.
(...)"STL" is rarely used to refer to the bits of the stdlib that happen to be based on the SGI STL. People think it's the entire standard library. It gets put on CVs. And it is misleading.
我对C++的历史几乎一无所知,所以我无法判断文章的正确性。我应该避免使用stl这个词吗?或者这是一个孤立的观点?
- 相关讨论
- 人们需要好的名字来描述事物。斯蒂芬诺夫的天才改变了我们的编程方式。像"标准库编程"这样的名字完全没用。称之为"STL编程",每个人都知道你的意思。争论这件事没有抓住要点:我们需要一个好名字。
- @汉斯:不,你错过了一点:"每个人都知道你的意思"不是真的。
- 我不知道你的意思。
- @汉斯:所以请阅读这篇文章,以及下面所有的答案。我不明白"不,你错了,不是每个人都知道你的意思"是什么意思。
- @汉斯:是的,"stl编程"是一个很好的标签,可以用来添加使用stl的代码。但是,在使用IO流的代码上加上一个非常糟糕的标记。STL和流都是标准库的一部分,其中包含不同任务的不同概念。当然,这些任务也必须以不同的方式进行标记。
- 这是一个使用"STL"来引用整个C++标准库的完美例子。我一直很困惑,有那么多人发誓,如果每天几乎都能看到,就没有人会这样做。
- 2747堆栈溢出时"stl streams"的结果。
- "对于大多数意图和目的,STL==C++标准库,但也有一些差异"StdPox.com /问题/ 5719842 / & Helip;
- STL不是最初在EDCOX1 1中开发的,它是由休利特帕卡德在斯特潘诺夫开发的,在EDOCX1 1发布前至少一年正式接受到C++标准中。Stepanov积极与标准委员会(特别是bjarne stroustrup)成员合作,将其纳入C++标准,而Stepanov本人则将该图书馆纳入标准图书馆称为STL。因此,术语STL一直与它被纳入标准库有关,甚至与它的作者和那些帮助他提出建议的人有关。
- 大概这就是为什么每个主要的C++作者继续将标准库的这些部分称为STL,指的是容器和算法。这个术语从未被任何权威性的文本作为一个整体用来指代标准库。
- EDOCX1 0版的原始作者从EDOCX1中引用了它作为C++标准草案库的一部分,9位StPANVOPSC.SCOM/BYTEYCOM.HTM"标准模板库是数据结构的框架(称为STL中的容器)和作为C++标准草案的一部分被接受的算法。一个STL的参考实现已经被惠普公司(Hewlett-Packard)放到了公共领域(它可以从butler.hpl.hp.com下载),而且越来越多的商业供应商现在正在运送STL。"
- @Galik我读过那篇俄语的文章,作为俄语,我应该注意到,俄语中与英语"标准"相关的单词虽然有词根,但在口语中的含义比英语中的词根稍宽一些。这并不意味着它是由标准文档设置的,标准在当时并不存在。它只意味着它应该被普遍使用。有人说STL是在标准失效前几天写的,这是不正确的。这本书是斯蒂芬诺夫在惠普多年的工作中写的,"创作"日期就是它的出版日期。
- @这篇文章是在标准委员会正式接受STL后写的。当时,该标准仍处于起草状态,Stepanov与标准委员会成员(主要是stroustrup)就标准中包含的图书馆细节进行了合作。在文章中,他直截了当地说,这是"作为C++标准草案的一部分"。
"STL"是在C++标准化之前的几天里由Alexander Stepanov编写的。C++通过80年代存在,但是我们现在称之为"C++"的是ISO/IEC 1488—2014年标准化的语言(以及早期版本,例如ISO/IEC 1488∶2011)。
STL已经被广泛地用作C++的库,使程序员可以访问容器、迭代器和算法。当标准化发生时,语言委员会设计了C++标准库的部分(这是语言标准的一部分)与STL非常匹配。
多年来,许多人(包括著名的图书作者和各种网站& MMASH)继续将C++标准库称为"STL",尽管这两个实体是分开的,并且存在一些差异。这些差异在即将到来的新C++标准中更为明显,它包括各种特征并显著地改变某些类。
原来的STL现在通常被称为"C++标准模板库的实现"(而不是真正的历史记录!)与微软VisualStudio或GCC相同的方式提供C++标准库的实现。但是"标准模板库"和"标准库"是不同的。
这场战斗是关于当前的标准库是应该被称为"STL"的全部还是部分,以及/或者它是否与它所称的内容有关。
对于"STL"
有一种学派认为,现在每个人都知道"STL"是标准库,正如大家现在都知道的,"C++"是ISO标准化语言。
它还包括那些相信只要各方都了解正在谈论的内容,这并不真正重要的人。
这是一个更为普遍的术语,因为野兽的本性,其中大部分都使用了被称为"模板"的C++特性。
对于"C++标准库"(或STDLIB)
但是,我订阅了另一个思想流派,它说这令人困惑。人们第一次学习C++不知道这一区别,并且可能不注意小语言的差异。
该文章的作者曾多次遇到过这样的人,他们认为整个C++标准库是STL,包括从不属于STL本身的特征。相比之下,"STL"的大多数声乐支持者确切地知道他们所说的"STL"是什么意思,并拒绝相信并非每个人都"明白"。显然,这个词的用法并不统一。
此外,还存在一些STL类库,它们实际上是原始STL的实现,而不是C++标准库。直到最近,STLPort还是其中之一(即使在那里,混乱也比比皆是!).
此外,C++标准在任何地方都不包含文本"STL",有些人习惯性地使用诸如"STL被包含在C++标准库中"这样的短语,这是很不正确的。
我相信继续以这种方式传播这个词的用法只会导致永远的误解。唉,尝试改变事物可能会完全适得其反,即使它应该是为了更好。我们可能永远被双重意义所束缚。
结论
我很感激这篇文章有点偏颇:我写了你链接的文章。:)不管怎样,我希望这有助于更好地解释这场战斗。
2011年4月13日更新
这里有三个使用"STL"来引用整个C++标准库的完美例子。我一直很困惑,有那么多人发誓,如果每天几乎都能看到,就没有人会这样做。
- if there are not have any opposing上述视图,请评论,我将超过快乐to add them to the答案(即使我disagree with them)。
- 标准模板库was not only the created by Stepanov and Lee,but they also是软件技术实验室工作at the at the time。
- 今天有人问我什么是std::iota标题,因为他不能得到它的工作。它的不安,SGI的标准扩展他们的呼叫,"标准"是因为当它适合他们,"每个人都知道STL"和"that is part of the STL的C++标准库,对吗?和它正在介绍在C++ 0x,but is not available C++ 03。GRR。
- 有人说about the example of another as if it是在synonym STL for the Whole stdlib。
- 维护模式的MS和IS T Stephan STL STL。lavavej,又名。
- "即使himself uses apparently STL STL"the Whole Lot的均值
- Bjarne Stroustrup from the other专门开发differentiates STL标准库部分of the"佳能",在《C++语言程序设计(第4版。
- interestingly,as by noted Stepanov himself version of the first STL,甚was written in计划(the next dialect LISP),ADA和IIRC是C++版本是真的/ 3。
- 好的,那么你会burninating proponent of the STL类标签和标签或somesuch cppstdlib建立?
- 在我hypothetical @ kubaober:完美的现实?是的,绝对。stdlib会给你很好的事情。在真实的世界?哦,probably not。更多的麻烦比它的价值misconception is this只要知道horribly普遍。或也许它会帮助……?嗯,dunno。我知道我不会得到支持的T *,我不管。):
- Bjarne Stroustrup是专门开发differentiates @ mrjoltcola from the other of the STL标准库部分中的"佳能"——Stroustrup是/是教授和我想的地方,there is that to an义务在acknowledge of the /使用人工作,包括STL into the of the IE标准C + +。虽然辐射半allegedly removed so that of the content can be accepted by the保守EN标准委员会。
- 我真的很喜欢你的答案lightnessracesinorbit @!
- 每一prominent author and important to the text only)"是指C++标准容器和算法部分STLas the Library of the proper which the usage legitimacy给。"the reason that the STL和其哲学是所有革命和need to be to as a Whole of Computer Science & Education for用途。标准库的其他部分of the properly are not to as the STL和所有我们的工作surely EN should be to add to the correct"比"听到了吗?
- 纠错:@ galik人物就是我想给你。confuses混合条款的就是人。
- 我把一些时间@ lightnessracesinorbit寻找图书that used to something to the term STL比参考其他容器、迭代器和算法portion Library of the标准与我unable to find one。我们知道,在straustrup,Mayer,萨特和其他使用as the term我描述的程序办理。i have yet to find an author list from the Books,不建议。
- @我认为你的回答与你自己的回答矛盾。首先你说的是"there is a school of thought that says that everybody knows now that"STL" means the standard library"。然后是"The author of that article has numerous times encountered people who believe that the entire C++ Standard Library is the STL, including features that were never part of the STL itself"。那是一样的。我的观点是,STL这个术语的起源只有历史意义。现在学习C++的人不需要知道STL当时是什么样子。现在它只是stdlib的别名。
- @亚历克斯:这是怎么矛盾的?我知道这是同一件事,从来没有提出过其他要求。在我的回答中,我简单地提到了在不同地点的同一组人。
- 我看到的矛盾是,如果我们简化你的陈述,我们会得到这样的结论:"有些人相信x是真的。我不同意,因为我遇到过许多人相信X是真的",然后有一些争论随之而来。
- 尽管你可能是对的,但仍然存在混乱。我想说的一个更好的方法是,如果我们同意称标准库为stl:,就不会有混淆。
- 亚历克斯:事实上,如果每个C++开发者都坐下来达成协议,那么就再也不会有分歧了。但这还没有发生,而且可能永远不会发生:)
- 复杂的问题是C++标准库是其他库的修改完整和/或部分版本的集合,和/或基于上述其他库的唯一库,例如C标准库、STL和Boost。在标准库中使用一个术语来引用这些组中的每一个组可能会有所帮助,但主要的问题是没有人真正解释这些术语及其起源。
- 显然,从C语言的兼容性标题中包含C++标准库的"C标准库"组件的接口,Boost的部分似乎没有自己的子群名称(至少我已经知道),但是大多数教程和其他站点没有解释"STL"是特定的部分。基于原始STL的C++标准库,当使用STL这个术语时,会导致很多混乱(因为没有解释,它只是看起来像标准库的缩写)。
- 因此,C++的标准库包含STL等。STL是一组C++模板类,用来提供通用的编程数据结构和函数,迭代器等C++标准库,或者STDLIB虽然比STL多。就是这样。
- 您有这个帐户stackoverflow.com/users/560648/lightness-races-in-orbit吗?还有stackoverflow.com/users/18771/tomalak吗?其中一个是非活动的吗?
- @约翰内斯肖布·利特:不,另一个托马拉克是一个德国绅士,与我没有任何关系。这只是一起发病。你为什么要问?
- @我只知道一个托马拉克。但现在我意识到他们实际上是两个人。谢谢)
- @约翰内斯肖布·利特:是的,不幸的是,"只有一个托马拉克"这句话实际上不是真的。
- 我读错了吗?这个答案似乎是说,"STL"字面上的意思只是由C++的模板、迭代器、算法等的SGI实现的。然而,这里是一个StruouToup等人的论文,它使用了这个术语——虽然不幸的是它没有定义它。我猜它们指的是C++标准库中任何迭代的子集…open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3351.pdf文件
- @cp.engr你一定是误读了,因为大多数答案都告诉你关于这个话题有不同的观点/方法/观点。你找到了其中一个。真的不知道还能说些什么
- 型回答:"有些人习惯性地使用"STL被包含在C++标准库中"这样的短语,这是很不正确的。"然而,他们的语言创造者似乎是这样使用它的。我同意存在不一致性,并且没有明确定义(afaik),但在我看来,纠正这种情况的唯一方法是将问题升级,并让语言/库维护人员对此发表声明。
- 型@是的,语言创建者通常和其他人一样有罪。这就是升级的原因之一:这场争论已经被打得死去活来,而且没有足够的时间继续与之抗争。
没有一个答案是正确的。Alexander Stepanov开发了一个称为STL的库(当时为惠普工作)。然后建议该库包含在C++标准中。
这基本上是"分叉"发展。委员会包括了一些部分,完全拒绝了其他部分,并重新设计了一些部分(在亚历山大的参与下)。原来的图书馆的开发后来移到了硅图形,但继续与C++标准库分开。
将这些部分添加到标准库后,对标准库的一些其他部分进行了修改,以便更好地适应添加的内容(例如,将begin、end、rbegin和rend添加到std::string中,以便将其用作容器)。大约在同一时间,大多数库(甚至完全无关的部分)都被制成模板以适应不同的类型(例如,标准流)。
有些人还将STL作为"标准库"的一种简短形式。
这意味着,当有人使用"stl"这个词时,他们可能指的是大约6种不同事物中的任何一种。不管是好是坏,大多数使用它的人似乎忽视了意义的多样性,并假定其他人都会认识到他们所指的东西。这导致了许多误解,至少有几场严重的火焰大战让大多数参与者看起来很愚蠢,因为他们只是在谈论完全不同的事情。
不幸的是,这种混乱可能会持续下去。引用"STL"比"C++标准库中的容器、迭代器和算法"更方便,但不包括EDCOX1×4,即使它可以像容器一样。"即使"C++标准库"不是那么长和笨拙,"STL"仍然是更短和更简单。直到或除非有人发明了更精确的术语(必要时),并且同样方便,"stl"将继续使用,并将继续导致混淆。
- 型+1.我推荐"stdlib"。
- 型@tomalak geret'kal:对于整个标准库来说,这类工作是可行的,但即使在那里,你也会遇到一个问题:当我说(例如):"x在stdlib中"时,我指的是标准要求所有符合要求的编译器提供什么,还是某个特定的编译器会提供什么?
- 型@杰瑞:前者,"性病"就是这个意思。:)
- 型@Tomalak Geret'kal:重点不是问你如何使用它,而是指出不同的人以不同的方式使用这个术语(添加名称空间的一个要点是允许供应商安全地定义额外的名称…)
- 型@杰瑞:不知道名称空间是从哪里来的。兼容实现不会向命名空间std添加任何内容。我说的是"stdlib"中的"std",它代表"standard"。我想很清楚那是什么意思!
- 型@Tomalak Geret'kal:当然,实现允许向std中添加内容(&167;17列出了几个保留标识符类)。不过,还不清楚"标准"是什么意思——微软(最近)致力于澄清"标准"库中的哪些部分在标准中,但GCC通常在区分"标准授权"和"我们的库中提供"方面做得很少。
- 型@杰瑞:我真的不认为期望有人把形容词"标准"读成"标准中有这个"是一种延伸。同时,17.4.3.1/1非常清楚,向命名空间std添加内容是ub,除了某些特定的命名情况:这些添加的情况在标准中命名,因此仍然完全符合;标准仍然适用。
- 型SGI和HP的历史是倒退的。史蒂芬诺夫在上SGI之前就在惠普公司工作。
- 型我只是重读了这里的评论,认为值得再加一个(公认是次要的)点:我认为期望"标准"总是意味着"这是标准"有点夸张。特别是,许多C++程序员在标准之前使用了"标准库"这个短语。以免有人认为他们在引用C标准中的库,我会指出,在C标准出现(甚至是草案)之前,C程序员也是如此。
the term"的"标准模板库STL"或"does not show上茶14882 * ISO C++标准。我知道referring to the C++ STL标准库as is wrong。the term"C++标准库"或"标准库"是什么14882:ISO officially used byP></
ISO 14882 C++ Standard:
17 - Library introduction [lib.library]:
This clauses describes the contents of the C++ Standard Library, how
a well-formed C++ program makes use of
the library, and how a conforming
implementation may provide the
entities in the library.
...
设计模式库STL是originally Alexander Stepanov,独立of the C++标准。不管一个人多零件,some of the C++ STL标准库组件包括vector类,类和swapcopylist和算法。P></
but of the C++课程标准包括多更多的东西真的知道the term"the STL的C++标准库"是正确的(和黑莓什么used by the其实是标准的文件)。P></
- + 1。尽管在STL,there was,不std命名空间(IIRC)。
- at the most + C时,不实施"订单compilers命名空间。事实上,我不知道如果他们甚至是茶的标准。
- kragen there was @:嗯,没有标准。
- 哦。嗯,there some books by Stroustrup),但认为这是the same thing is not那么,恩?
我最近也提出了同样的论点,但我相信可以允许一点宽容。如果斯科特·迈耶斯犯了同样的错误,你就有很好的同伴。
- 型@托马拉克:事实上,斯科特没有,埃多克斯1〔0〕。这本书实际上是关于stl的,意思是"std lib的部分源于stepanov的图书馆"。花点时间看一下TOC的书。除了最初的STL之外,我能找到的唯一东西是std::string,它被装备成一个全吹STL容器。
- 型@你显然误解了我的立场。我不会像斯科特那样使用"stl"。请看我的答案。
- 型@托马拉克,我也不会以那种方式使用"stl",尽管我可能在过去犯过罪。我只是觉得不值得痛打别人。
- 型我可以尊重的。我对那些拒绝承认潜在歧义的人非常恼火。:)
- 型您也可以在Bjarne Stroustrup - Ref.StruouStru.COM/DNE2005 5.PDF的公司中:"STL(标准模板库),即ISO C++标准库的容器和算法框架)
从GNU标准C++库(LIbSTDC + +)常见问题解答:
STL(标准模板库)是对C++标准库大块的启发,但是术语不是可互换的,它们并不意味着相同的东西。C++标准库包含很多来自STL的东西,有些甚至不是模板,如EDCOX1,6,EDCX1,7。
libstdc++-v3包含了很多来自sgi stl的代码(最终的合并来自于版本3.3)。与原始SGI代码相比,libstdc++中的代码包含许多修复和更改。
特别是,string不是来自SGI,也没有使用它们的"绳索"类别(尽管这是作为可选扩展包括在内),valarray或其他一些类别也没有。像vector<>这样的类来自SGI,但已经被广泛修改。
有关libstdc++演进的更多信息,请参阅API演进和向后兼容性文档。
SGI STL的常见问题解答仍然是推荐阅读。
仅供参考,截至2018年3月,甚至官方STL网站www.sgi.com/tech/stl/也消失了。