Кто-то обратил мое внимание на эту статью , утверждая, что (я перефразирую) термин STL неправильно используется для ссылки на всю Стандартную библиотеку C ++ вместо частей, взятых из SGI STL.
(...) это относится к «STL», несмотря на то, что очень немногие люди все еще используют STL (который был разработан в SGI).
Части Стандартной библиотеки C ++ были основаны на частях STL, и именно эти части многие люди (в том числе несколько авторов и пресловутый cplusplus.com, подверженный ошибкам) все еще называют «STL». Тем не менее, это неточно; действительно, стандарт C ++ никогда не упоминает «STL», и между ними есть различия в содержании.
(...) "STL" редко используется для ссылки на биты stdlib, которые основаны на SGI STL. Люди думают, что это вся стандартная библиотека. Это ставится на резюме. И это вводит в заблуждение.
Я почти ничего не знаю об истории C ++, поэтому не могу судить о правильности статьи. Должен ли я воздерживаться от использования термина STL? Или это изолированное мнение?
Ответы:
«STL» был написан Александром Степановым за несколько дней до стандартизации C ++. C ++ существовал в течение 80-х годов, но то, что мы сейчас называем « C ++ », является языком, стандартизированным в ISO / IEC 14882: 2014 (и более ранних версиях, таких как ISO / IEC 14882: 2011).
STL уже широко использовался в качестве библиотеки для C ++, предоставляя программистам доступ к контейнерам, итераторам и алгоритмам. Когда произошла стандартизация, языковой комитет разработал части стандартной библиотеки C ++ (которая является частью языкового стандарта), чтобы очень близко соответствовать STL.
В течение многих лет многие люди, включая известных авторов книг и различные веб-сайты, продолжали называть Стандартную библиотеку C ++ «STL», несмотря на то, что эти две сущности являются отдельными и существуют некоторые различия. Эти различия еще более заметны в новом стандарте C ++, который включает в себя различные функции и существенно меняет некоторые классы.
Первоначальный STL теперь часто называют «реализацией стандартной библиотеки шаблонов C ++» (скорее назад к реальной истории!), Так же, как ваша Microsoft Visual Studio или GCC поставляет реализацию стандартной библиотеки C ++. Но «Стандартная библиотека шаблонов» и «Стандартная библиотека» - это не одно и то же.
Битва заключается в том, должна ли текущая Стандартная библиотека называться «STL» полностью или частично, и / или имеет ли значение то, как она называется.
Для "СТЛ"
Существует школа мысли, которая говорит, что теперь все знают, что «STL» означает стандартную библиотеку, точно так же, как все теперь знают, что «C ++» является стандартизированным языком ISO.
Сюда также входят те, кто считает, что это на самом деле не имеет значения, пока все стороны понимают, о чем идет речь.
Этот термин стал еще более распространенным в природе зверя, во многих из которых широко используется функция C ++, известная как «шаблоны».
Для "Стандартной библиотеки C ++" (или stdlib)
Однако есть еще одна школа мысли, на которую я подписываюсь, которая говорит, что это сбивает с толку. Люди, изучающие C ++ впервые , не знают этого различия и могут не заметить небольших языковых различий.
Автор этой статьи неоднократно сталкивался с людьми, которые считают, что вся стандартная библиотека C ++ является STL, включая функции, которые никогда не были частью самого STL. Напротив, большинство сторонников "STL" точно знают, что они имеют в виду, и отказываются верить, что не все "понимают" это. Понятно, что использование термина не является единообразным.
Кроме того, есть некоторые STL-подобные библиотеки, которые на самом деле являются реализациями исходного STL, а не Стандартной библиотеки C ++. До недавнего времени STLPort был одним из них (и даже там, путаница изобилует!).
Кроме того, стандарт C ++ нигде не содержит текста «STL», и некоторые люди обычно используют такие фразы, как «STL включен в стандартную библиотеку C ++», что совершенно неверно.
Я считаю, что продолжение пропаганды использования термина таким образом приведет к недоразумению, которое будет продолжаться вечно. Увы, попытка изменить ситуацию может быть совершенно непродуктивной, даже если это должно быть к лучшему. Мы можем быть застряли с двойным смыслом навсегда.
Вывод
Я ценю, что этот пост был немного предвзятым: я написал статью, на которую вы ссылались. :) Во всяком случае, я надеюсь, что это поможет объяснить битву немного лучше.
Обновление 13/04/2011
Вот три прекрасных примера того, кто использует «STL» для ссылки на всю стандартную библиотеку C ++. Меня продолжает сбивать с толку то, что так много людей слепо ругаются, что никто этого не делает, когда это видно почти каждый день.
источник
std::iota
, потому что он не мог заставить его работать. Это нестандартное расширение SGI , которое они называют «стандартным», когда оно подходит им, потому что это «STL», и все знают, что «STL» является частью стандартной библиотеки C ++, верно? И это было введено в C ++ 0x, но не доступно в C ++ 03. Хмм.Нет единственно правильного ответа. Александр Степанов разработал библиотеку, которую он назвал STL (в то время работал на HP). Затем эта библиотека была предложена для включения в стандарт C ++.
Это в основном «разветвленная» разработка. Комитет включал некоторые части, полностью отклонил другие и изменил некоторые (с участием Александра). Разработка исходной библиотеки была позже перенесена в Silicon Graphics, но продолжена отдельно от стандартной библиотеки C ++.
После того, как эти части были добавлены к стандартной библиотеке, некоторые другие части стандартной библиотеки были изменены , чтобы соответствовать лучше с тем, что был добавлен (например,
begin
,end
,rbegin
иrend
были добавлены ,std::string
так что можно было бы использовать как контейнер). Примерно в то же время большая часть библиотеки (даже фрагменты, которые были совершенно не связаны) были превращены в шаблоны для размещения различных типов (например, стандартных потоков).Некоторые люди также используют STL в качестве краткой формы «Стандартной библиотеки».
Это означает, что когда кто-то использует термин «STL», он может относиться к любому из примерно полдюжины разных вещей. К счастью или к сожалению, большинство людей, которые используют его, похоже, игнорируют множество значений и предполагают, что все остальные поймут, что они имеют в виду. Это приводит ко многим недоразумениям и, по крайней мере, к нескольким серьезным огненным войнам, которые заставили большинство участников выглядеть глупо, потому что они просто говорили о совершенно разных вещах.
К сожалению, путаница, вероятно, сохранится. Гораздо удобнее ссылаться на «STL», чем на «контейнеры, итераторы и алгоритмы в стандартной библиотеке C ++, но не включая
std::string
, даже если он может действовать как контейнер». Хотя «стандартная библиотека C ++» не такая длинная и неуклюжая, «STL» все еще намного короче и проще. До тех пор, пока кто-нибудь не изобрел термины, которые являются более точными (когда это необходимо) и столь же удобными, «STL» будет продолжать использоваться, и в результате возникнет путаница.источник
std
. Я говорил о «std» в «stdlib», что означает «стандартный». Я думаю, это довольно ясно, что это значит!std
является UB, за исключением некоторых конкретных именованных случаев: эти случаи добавления названы в стандарте и, таким образом, все еще полностью совместимы; «стандарт» все равно будет применяться.Термин «STL» или «Стандартная библиотека шаблонов» не встречается нигде в стандарте ISO 14882 C ++. Поэтому ссылаться на стандартную библиотеку C ++ как на STL неправильно. Термин «Стандартная библиотека C ++» или «стандартная библиотека» - это то, что официально используется ISO 14882:
STL - это библиотека, изначально разработанная Александром Степановым, независимая от стандарта C ++. Однако некоторые компоненты стандартной библиотеки C ++ включают в себя компоненты STL, например
vector
,list
и алгоритмы, подобныеcopy
иswap
.Но, конечно, стандарт C ++ включает в себя гораздо больше вещей вне STL, поэтому термин «стандартная библиотека C ++» является более правильным (и это то, что фактически используется в документах стандартов).
источник
std
пространства имен (IIRC).Я недавно привел этот же аргумент, но я верю, что можно допустить небольшую терпимость. Если Скотт Мейерс совершит ту же ошибку, вы в хорошей компании.
источник
-1
от меня. Книга действительно о STL в значении «частей стандартной библиотеки, происходящих из библиотеки Степанова». Потратьте время, чтобы просмотреть книги TOC. Единственное, что я мог найти за пределами оригинального STL, это тоstd::string
, что он был оборудован как полноценный контейнер STL.Из FAQ библиотеки GNU Standard C ++ (libstdc ++) :
STL (Стандартная библиотека шаблонов) была источником вдохновения для больших кусков Стандартной библиотеки C ++, но термины не являются взаимозаменяемыми и не означают одно и то же. Стандартная библиотека C ++ включает в себя множество вещей, которые не пришли из STL, и некоторые из них даже не являются шаблонами, такими как
std::locale
иstd::thread
.Libstdc ++ - v3 включает в себя много кода из SGI STL (окончательное слияние было из версии 3.3 ). Код в libstdc ++ содержит множество исправлений и изменений по сравнению с исходным кодом SGI.
В частности,
string
он не из SGI и не использует их класс «веревки» (хотя это включено в качестве дополнительного расширения),valarray
а также ни некоторые другие. Классы вродеvector<>
были от SGI, но были сильно изменены.Более подробную информацию об эволюции libstdc ++ можно найти в документации по развитию API и обратной совместимости .
FAQ для STL от SGI еще рекомендуется чтение.
К вашему сведению, по состоянию на март 2018 года даже официальный веб-сайт STL www.sgi.com/tech/stl/ пропал .
источник