В чем разница между "STL" и "стандартной библиотекой C++"?
кто-то принес в этой статье к моему вниманию, что утверждает (я перефразирую) термин STL неправильно используется для обозначения всей стандартной библиотеки C++ вместо частей, которые были взяты из SGI STL.
(...) это относится к "STL", несмотря на то, что очень мало людей все еще используют STL (который был разработан в SGI).
части стандартной библиотеки C++ были основаны на частях STL, и именно эти части многие люди (в том числе несколько авторов и заведомо ошибочных cplusplus.com) по-прежнему называют "STL". Однако это неточно; действительно, стандарт C++ никогда не упоминает "STL", и между ними есть различия в содержании.
(...) "STL" редко используется для обозначения битов stdlib, которые, как оказалось, основаны на SGI STL. Люди думают, что это вся стандартная библиотека. Он попадает на CVs. И это вводит в заблуждение.
Я не знаю что-нибудь об истории C++, поэтому я не могу судить о правильности статьи. Должен ли я воздерживаться от использования термина STL? Или это единичное мнение?
5 ответов:
"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"
существует школа мысли, которая говорит, что теперь все знают, что "STL" означает стандартную библиотеку, так же, как все теперь знают, что "C++" является ISO-стандартизированным языком.
Он также включает в себя тех, кто верит, что это действительно не имеет значения пока все стороны понимают, о чем идет речь.
Это термин, даже более распространен по природе зверя, большая часть которого активно использует функцию C++, известную как "шаблоны".
для "стандартной библиотеки C++" (или stdlib)
однако есть еще одна школа мысли - к которой я присоединяюсь - которая говорит, что это сбивает с толку. Люди, изучающие C++ в первый раз не знать это различие, и может не заметить небольшие языковые различия.
автор этой статьи имеет многочисленные раз столкнулись люди, которые считают, что вся стандартная библиотека C++и STL, включая функции, которые никогда не были частью самого STL. Большинство вокальных сторонников "STL", напротив, точно знают, что они имеют в виду, и отказываются верить, что не все"получают это". Очевидно, что использование этого термина не является единообразной.
кроме того, существуют некоторые STL-подобные библиотеки, которые на самом деле являются реализациями исходного STL, а не стандартной библиотеки C++. До недавно STLPort был один из них (и даже там,путаница бьет ключом!).
кроме того, стандарт C++ нигде не содержит текст "STL", и некоторые люди обычно используют фразы типа "STL is входит в стандартной библиотеке C++", что просто неверно.
Я считаю, что продолжение распространения использования этого термина таким образом просто приведет к непониманию, продолжающемуся вечно. Увы, это может быть совершенно контрпродуктивно пытаться что-то изменить, даже если это должно быть к лучшему. Мы можем просто застрять с двойными значениями навсегда.
вывод
Я ценю, что этот пост был немного предвзятым: я написал статью, на которую вы ссылались. :) В любом случае, я надеюсь, что это поможет объяснить битву немного лучше.
обновление 13/04/2011
здесь три идеальныйпримеры того, кто использует "STL" для ссылки на всю стандартную библиотеку C++. Меня продолжает озадачивать, что так много людей клянутся слепыми, что никто никогда не делает этого, когда это видно почти ежедневно.
нет ни одного ответа, который действительно правильный. Александр Степанов разработал библиотеку под названием STL (в то время работавшую на HP). Затем эта библиотека была предложена для включения в стандарт C++.
это в основном "раздвоенная" разработка. Комитет включил некоторые части, полностью отклонил другие и переработал некоторые (с участием Александра). Разработка оригинальной библиотеки была позже перенесена на Silicon Graphics, но продолжена отдельно от стандарта C++ библиотека.
после того, как эти части были добавлены в стандартную библиотеку, некоторые другие части стандартной библиотеки были изменены, чтобы лучше соответствовать тому, что было добавлено (например,
begin,end,rbeginиrendбыли добавлены кstd::stringпоэтому его можно использовать как контейнер). Примерно в то же время,большинство из библиотеки (даже куски, которые были полностью несвязанные были сделаны в шаблоны для размещения различных типов (например, стандартный потоки.)некоторые люди также используют STL как просто короткую форму "стандартной библиотеки".
это означает, что когда кто-то использует термин "STL", они могут ссылаться на любую из примерно полудюжины разных вещей. К лучшему или худшему, большинство людей, которые используют его, похоже, игнорируют множественность значений и предполагают, что все остальные узнают, что они имеют в виду. Это приводит ко многим недоразумениям и, по крайней мере, к нескольким серьезным пламенным войнам, которые сделали большую часть участники выглядят глупо, потому что они просто говорили о совершенно разных вещах.
к сожалению, путаница, вероятно, будет продолжаться и дальше. Гораздо удобнее ссылаться на "STL", чем на что-то вроде " контейнеры, итераторы и алгоритмы в стандартной библиотеке C++, но не включая
std::string, хотя он может действовать как контейнер."Несмотря на то, что" стандартная библиотека C++ "не такая длинная и неуклюжая," STL " все еще намного короче и проще. До тех пор, пока кто-то не придумает более точные термины (когда это необходимо),и как раз как удобно," STL " будет продолжаться быть использованным и запутанность будет продолжаться привести.
термин "STL" или "стандартная библиотека шаблонов" не отображается нигде в стандарте ISO 14882 C++. Поэтому обратимся к стандартной библиотеке C++, STL-это неправильно. Термин "стандартная библиотека C++ "или" стандартная библиотека " - это то, что официально используется ISO 14882:
стандарт ISO 14882 C++:
17-библиотека введение [lib.библиотека]:
- это предложение описывает содержание C++ Стандартная Библиотека, как хорошо сформированная программа на C++ использует библиотека, и как соответствие реализация может обеспечить сущности в библиотеке.
...
STL-это библиотека, первоначально разработанная Александром Степановым, независимая от стандарта C++. Однако некоторые компоненты стандартной библиотеки C++ включают компоненты STL, такие как
vector,listи алгоритмы, такие какcopyиswap.а конечно, стандарт C++ включает в себя гораздо больше вещей за пределами STL, поэтому термин "стандартная библиотека C++" более корректен (и это то, что фактически используется в документах стандартов).
Я сделал этот же аргумент недавно, но я считаю, что немного терпимости может быть разрешено. Если Скотт Мейерс делает ту же ошибку, вы в хорошей компании.
С стандартная библиотека GNU C++ (libstdc++) FAQ:
STL (стандартная библиотека шаблонов) был вдохновением для больших кусков стандартной библиотеки C++, но термины не взаимозаменяемы, и они не означают одно и то же. Стандартная библиотека C++ включает в себя множество вещей, которые не пришли из STL, и некоторые из них даже не являются шаблонами, такими как
std::localeиstd::thread.Libstdc++ - v3 включает в себя много кода из SGI STL (окончательное слияние было от релиз 3.3). Код в libstdc++ содержит множество исправлений и изменений по сравнению с исходным кодом SGI.
в частности,
stringне из SGI и не использует их класс "rope" (хотя это включено в качестве дополнительного расширения), ни один из нихvalarrayи некоторые другие. Классы, какvector<>были из SGI, но были значительно изменены.дополнительная информация об эволюции libstdc++ можно найти по адресу API evolution и обратной совместимости документация.
The часто задаваемые вопросы для STL SGI по-прежнему рекомендуется чтение.
к вашему сведению, по состоянию на март 2018 года даже официальный сайт STL www.sgi.com/tech/stl/ ушел.
Comments