Alguém chamou minha atenção para este artigo que afirma (estou parafraseando) que o termo STL é usado incorretamente para se referir a toda a biblioteca padrão do C ++, em vez das partes que foram retiradas do SGI STL.
(...) refere-se ao "STL", apesar de muito poucas pessoas ainda usarem o STL (que foi projetado na SGI).
Partes da biblioteca padrão do C ++ eram baseadas em partes do STL, e é nessas partes que muitas pessoas (incluindo vários autores e o notável cplusplus.com) ainda se referem como "o STL". No entanto, isso é impreciso; de fato, o padrão C ++ nunca menciona "STL" e há diferenças de conteúdo entre os dois.
(...) "STL" raramente é usado para se referir aos bits do stdlib que são baseados no SGI STL. As pessoas pensam que é a biblioteca padrão inteira. É colocado nos currículos. E isso é enganador.
Eu quase não sei nada sobre a história do C ++, então não posso julgar a correção do artigo. Devo me abster de usar o termo STL? Ou isso é uma opinião isolada?
Respostas:
O "STL" foi escrito por Alexander Stepanov nos dias anteriores à padronização do C ++. O C ++ existia nos anos 80, mas o que chamamos agora de " C ++ " é a linguagem padronizada na ISO / IEC 14882: 2014 (e versões anteriores, como ISO / IEC 14882: 2011).
O STL já era amplamente utilizado como uma biblioteca para C ++, dando aos programadores acesso a contêineres, iteradores e algoritmos. Quando a padronização aconteceu, a comissão de linguagem projetada partes da biblioteca padrão C ++ (que faz parte do padrão de linguagem) para muito coincidem com o STL.
Ao longo dos anos, muitas pessoas - incluindo autores de livros de destaque e vários sites - continuaram a se referir à Biblioteca Padrão C ++ como "a STL", apesar do fato de as duas entidades serem separadas e de haver algumas diferenças. Essas diferenças são ainda mais acentuadas no novo novo padrão C ++, que inclui vários recursos e altera significativamente algumas classes.
O STL original agora é chamado de "uma implementação da Biblioteca de modelos padrão do C ++" (em vez do histórico real!), Da mesma maneira que o Microsoft Visual Studio ou GCC envia uma implementação da Biblioteca padrão do C ++. Mas a "Biblioteca de modelos padrão" e a "Biblioteca padrão" não são a mesma coisa.
A batalha é sobre se a atual Biblioteca Padrão deve ser chamada de "STL", no todo ou em parte, e / ou se importa como é chamada.
Para "STL"
Existe uma escola de pensamento que diz que todo mundo sabe agora que "STL" significa a biblioteca padrão, assim como todo mundo agora sabe que "C ++" é a linguagem padronizada pela ISO.
Também inclui aqueles que acreditam que isso realmente não importa , desde que todas as partes entendam o que está sendo discutido.
É um termo tornado ainda mais prevalente pela natureza da fera, muito do que faz uso pesado do recurso C ++ conhecido como "modelos".
Para "Biblioteca Padrão C ++" (ou stdlib)
No entanto, há outra escola de pensamento - na qual eu assino - que diz que isso é confuso. As pessoas que aprendem C ++ pela primeira vez não conhecem essa distinção e podem não perceber pequenas diferenças de idioma.
O autor desse artigo encontrou inúmeras vezes pessoas que acreditam que toda a biblioteca padrão do C ++ é a STL, incluindo recursos que nunca fizeram parte da própria STL. A maioria dos defensores vocais do "the STL", em contraste, sabe exatamente o que eles querem dizer com isso e se recusa a acreditar que nem todo mundo "entende". Claramente, o uso do termo não é uniforme.
Além disso, existem algumas bibliotecas semelhantes a STL que são de fato implementações da STL original, não a Biblioteca Padrão C ++. Até recentemente, o STLPort era um deles (e mesmo lá, a confusão é abundante!).
Além disso, o padrão C ++ não contém o texto "STL" em nenhum lugar e algumas pessoas costumam usar frases como "o STL está incluído na biblioteca padrão do C ++", o que é totalmente incorreto.
É minha convicção que continuar propagando o uso do termo dessa maneira apenas levará ao mal-entendido para sempre. Infelizmente, pode ser totalmente contraproducente tentar mudar as coisas, mesmo que seja para melhor. Podemos ficar presos a dois significados para sempre.
Conclusão
Compreendo que este post tenha sido um pouco tendencioso: escrevi o artigo ao qual você vinculou. :) De qualquer forma, espero que isso ajude a explicar a batalha um pouco melhor.
Atualização 13/04/2011
Aqui estão três exemplos perfeitos de alguém que está usando "o STL" para se referir a toda a biblioteca padrão do C ++. Continua me confundindo o fato de tantas pessoas jurarem que são cegas que ninguém faz isso, quando é fácil ver quase diariamente.
fonte
std::iota
está, porque ele não conseguiu fazê-lo funcionar. É uma extensão não padrão da SGI , que eles chamam de "padrão" quando lhes convém, porque é "o STL", e todo mundo sabe que "o STL" faz parte da C ++ Standard Library, certo? E foi introduzido no C ++ 0x, mas não está disponível no C ++ 03. Grrr.Não há uma resposta realmente correta. Alexander Stepanov desenvolveu uma biblioteca chamada STL (trabalhando para a HP na época). Essa biblioteca foi proposta para inclusão no padrão C ++.
Isso basicamente "bifurcou" o desenvolvimento. O comitê incluiu algumas partes, rejeitou outras completamente e redesenhou algumas (com a participação de Alexander). O desenvolvimento da biblioteca original foi posteriormente transferido para a Silicon Graphics, mas continuou separadamente da biblioteca padrão C ++.
Depois essas peças foram adicionados à biblioteca de padrão, algumas outras partes da biblioteca padr foram modificadas para melhorar o ajuste com o que foi adicionado (por exemplo,
begin
,end
,rbegin
erend
foram adicionados astd::string
isso, poderia ser usado como um recipiente). Na mesma época, a maior parte da biblioteca (mesmo peças completamente não relacionadas) foi transformada em modelos para acomodar tipos diferentes (por exemplo, fluxos padrão).Algumas pessoas também usam o STL apenas como uma forma curta de "Biblioteca Padrão".
Isso significa que quando alguém usa o termo "STL", pode estar se referindo a qualquer uma das meia dúzia de coisas diferentes. Para o bem ou para o mal, a maioria das pessoas que o usa parece ignorar a multiplicidade de significados e assume que todo mundo reconhecerá a que se refere. Isso leva a muitos mal-entendidos e pelo menos algumas sérias guerras de chamas que fizeram a maioria dos participantes parecer tola porque estavam simplesmente falando de coisas totalmente diferentes.
Infelizmente, é provável que a confusão continue inabalável. É muito mais conveniente se referir a "STL" do que algo como "os contêineres, iteradores e algoritmos na biblioteca padrão C ++, mas não incluindo
std::string
, mesmo que possa agir como um contêiner". Embora a "biblioteca padrão C ++" não seja tão longa e desajeitada como essa, "STL" ainda é muito mais curta e simples. Até ou a menos que alguém invente termos que sejam mais precisos (quando necessário) e igualmente convenientes, "STL" continuará a ser usado e a confusão continuará a resultar.fonte
std
. Eu estava falando sobre o "std" em "stdlib", que significa "padrão". Eu acho que é bem claro o que isso significa!std
é UB, exceto em alguns casos nomeados específicos: esses casos de adição são nomeados no padrão e, portanto, ainda são perfeitamente compatíveis; "padrão" ainda se aplicaria.O termo "STL" ou "Biblioteca de modelos padrão" não aparece em nenhum lugar do padrão ISO 14882 C ++. Portanto, referir-se à biblioteca padrão C ++ como STL está errado. O termo "Biblioteca Padrão C ++" ou "biblioteca padrão" é o que é oficialmente usado pela ISO 14882:
STL é uma biblioteca originalmente projetada por Alexander Stepanov, independente do padrão C ++. No entanto, alguns componentes da biblioteca padrão C ++ incluem componentes STL como
vector
,list
e algoritmos comocopy
eswap
.Mas é claro que o padrão C ++ inclui muito mais coisas fora da STL, portanto o termo "biblioteca padrão C ++" é mais correto (e é o que é realmente usado pelos documentos de padrões).
fonte
std
espaço para nome (IIRC).Argumentei esse mesmo argumento recentemente, mas acredito que um pouco de tolerância possa ser permitida. Se Scott Meyers cometer o mesmo erro, você estará em boa companhia.
fonte
-1
de mim. O livro é realmente sobre o STL no sentido de "as partes da lib std provenientes da biblioteca de Stepanov". Aproveite o tempo para examinar os livros TOC. A única coisa que encontrei fora da STL original foistd::string
e ela foi equipada para ser um contêiner completo da STL.Na FAQ da biblioteca C ++ padrão GNU (libstdc ++) :
A STL (Standard Template Library) foi a inspiração para grandes partes da C ++ Standard Library, mas os termos não são intercambiáveis e não significam a mesma coisa. A Biblioteca Padrão C ++ inclui muitas coisas que não vieram da STL e algumas delas nem são modelos, como
std::locale
estd::thread
.O Libstdc ++ - v3 incorpora muito código do SGI STL (a mesclagem final foi do release 3.3 ). O código no libstdc ++ contém muitas correções e alterações em comparação com o código SGI original.
Em particular,
string
não é da SGI e não faz uso de sua classe "corda" (embora isso esteja incluído como uma extensão opcional), nem évalarray
nem algumas outras. Classes comovector<>
eram da SGI, mas foram extensivamente modificadas.Mais informações sobre a evolução do libstdc ++ podem ser encontradas na documentação de evolução da API e compatibilidade com versões anteriores .
O FAQ do STL da SGI ainda é uma leitura recomendada.
Para sua informação, em março de 2018, até o site oficial da STL www.sgi.com/tech/stl/ desapareceu .
fonte