Programming

"STL"과 "C ++ 표준 라이브러리"의 차이점은 무엇입니까?

procodes 2020. 2. 18. 22:54
반응형

"STL"과 "C ++ 표준 라이브러리"의 차이점은 무엇입니까?


누군가가 SGI STL에서 가져온 부분 대신 전체 C ++ 표준 라이브러리를 언급하는 데 STL 용어가 잘못 사용 되었다고 주장 하면서이 기사 에 주목했습니다 .

(...) STL (SGI에서 설계 한)을 사용하는 사람이 거의 없음에도 불구하고 "STL"을 나타냅니다.

C ++ 표준 라이브러리의 일부는 STL의 일부를 기반으로했으며 많은 사람들 (여러 저자 및 악명 높은 오류가 발생한 cplusplus.com 포함)이 여전히 "STL"이라고 언급하는 부분입니다. 그러나 이것은 정확하지 않습니다. 실제로 C ++ 표준은 "STL"을 언급하지 않으며, 둘 사이에 내용 차이가 있습니다.

(...) "STL"은 SGI STL을 기반으로하는 stdlib의 비트를 나타내는 데 거의 사용되지 않습니다. 사람들은 그것이 전체 표준 라이브러리라고 생각합니다. 이력서에 올라갑니다. 그리고 오해의 소지가 있습니다.

나는 C ++의 역사에 대해 거의 알지 못하므로 기사의 정확성을 판단 할 수 없습니다. STL이라는 용어를 사용하지 않아야합니까? 아니면 이것은 고립 된 의견입니까?


"STL" C ++이 표준화되기 오래 전부터 Alexander Stepanov가 작성했습니다 . C ++은 80 년대에 존재했지만 이제 " C ++ "라고하는 것은 ISO / IEC 14882 : 2014 (및 ISO / IEC 14882 : 2011과 같은 이전 버전)에서 표준화 된 언어입니다.

STL은 이미 C ++ 용 라이브러리로 널리 사용되어 프로그래머에게 컨테이너, 반복자 및 알고리즘에 대한 액세스 권한을 부여했습니다. 표준화가 일어 났을 때, 언어위원회는 설계 의 부품 수 (언어 표준의 일부 임) C ++ 표준 라이브러리 매우 밀접하게 STL과 일치합니다.

수년 동안 저명한 저술가와 다양한 웹 사이트를 포함하여 많은 사람들이 C ++ 표준 라이브러리를 "STL"이라고 계속 언급했지만 두 개체가 분리되어 있고 약간의 차이가 있습니다. 이러한 차이점은 다가오는 새로운 C ++ 표준에서 더욱 두드러지며 다양한 기능을 포함하고 일부 클래스를 크게 변경합니다.

원래 STL은 Microsoft Visual Studio 또는 GCC가 C ++ 표준 라이브러리의 구현을 제공하는 것과 같은 방식으로 종종 "C ++ 표준 템플릿 라이브러리의 구현"(실제 기록으로 거꾸로!)이라고합니다. 그러나 "표준 템플릿 라이브러리"와 "표준 라이브러리"는 같은 것이 아닙니다.

현재 표준 라이브러리를 "STL"로 전체 또는 부분적으로 호출해야하는지, 그리고 그것이 무엇을 호출하는지가 중요합니다.

"STL"의 경우

모든 사람들이 이제 "C ++"가 ISO 표준 언어임을 알고있는 것처럼, "STL"이 표준 라이브러리를 의미한다는 것을 모든 사람들이 알고 있다고 생각하는 학교가 있습니다.

또한 모든 당사자가 대화 내용을 이해하는 한 실제로 중요하지 않다고 믿는 사람들도 포함합니다 .

이 용어는 짐승의 본질에 의해 더욱 널리 사용되는 용어로, 대부분 "템플릿"으로 알려진 C ++ 기능을 많이 사용합니다.

"C ++ 표준 라이브러리"(또는 stdlib)

그러나, 내가 구독하고있는 다른 생각의 학교가 있는데, 이것이 혼란 스럽다고 말합니다. 처음으로 C ++를 배우는 사람들은 하지 않는 이 차이를 알고, 작은 언어의 차이를 알 수 없습니다.

이 기사의 저자 는 STL 자체에 포함되지 않은 기능을 포함 하여 전체 C ++ 표준 라이브러리 STL 이라고 생각하는 사람들을 여러 번 만나게 되었습니다. 대조적으로, "STL"의 대부분의 음성 지지자들은 그것이 의미하는 바를 정확히 알고 모든 사람이 그것을 얻지는 않는다고 믿지 않습니다. 분명히이 용어의 사용법은 일정하지 않습니다.

또한 C ++ 표준 라이브러리가 아닌 원래 STL을 구현 한 일부 STL 유사 라이브러리가 있습니다. 최근까지 STLPort 는 그중 하나였습니다 (그리고 심지어 혼란이 가득합니다!).

또한 C ++ 표준에는 "STL"이라는 텍스트가 포함되어 있지 않으며 일부 사람들은 "STL이 C ++ 표준 라이브러리에 포함되어 있습니다 "와 같은 문구를 습관적으로 사용합니다 .

이런 식으로 용어의 사용을 계속 전파하면 오해가 영원히 계속 될 것입니다. 아아, 그것이 더 좋을 것으로 생각 되더라도 물건을 바꾸려고 시도하는 것은 완전히 비생산적 일 수 있습니다. 우리는 이중 의미를 영원히 붙잡을 수 있습니다.

결론

이 게시물이 약간 편향되어 있다는 점에 감사드립니다. 링크 된 기사를 작성했습니다. :) 어쨌든, 이것이 전투를 조금 더 잘 설명하는 데 도움이되기를 바랍니다.

2011 년 4 월 13 일 업데이트

다음은 세 가지 완벽한 예제 전체 C ++ 표준 라이브러리를 참조하는 "는 STL"을 사용하는 사람의이. 거의 매일 매일 보는 것이 평범 할 때 많은 사람들이 맹인을 맹목적으로 맹세하지 않는다고 계속해서 당황합니다.


실제로 올바른 답은 없습니다. Alexander Stepanov는 STL (당시 HP에서 일함)이라는 라이브러리를 개발했습니다. 그런 다음이 라이브러리는 C ++ 표준에 포함되도록 제안되었습니다.

그것은 기본적으로 "포크 된"개발입니다. 위원회는 일부를 포함하고 일부를 완전히 거부했으며 (알렉산더의 참여로) 일부를 재 설계했다. 원래 라이브러리의 개발은 나중에 Silicon Graphics로 옮겨졌지만 C ++ 표준 라이브러리와 별도로 계속되었습니다.

그 조각이 표준 라이브러리에 추가 된 후, 표준 라이브러리의 일부 다른 부분이 더 추가 된 것과 맞게 수정 된 (예를 들어, begin, end, rbeginrend에 추가 된 std::string이 컨테이너처럼 사용할 수 있도록). 같은시기에 대부분 의 라이브러리 ( 완전히 관련이없는 부분조차도 )는 다른 유형 (예 : 표준 스트림)을 수용하기 위해 템플릿으로 만들어졌습니다.

어떤 사람들은 또한 STL을 "표준 라이브러리"의 짧은 형태로 사용합니다.

That means when somebody uses the term "STL" they could be referring to any of about half a dozen different things. For better or worse, most people who use it seem to ignore the multiplicity of meanings, and assume that everybody else will recognize what they're referring to. This leads to many misunderstandings, and at least a few serious flame-wars that made most of the participants look foolish because they were simply talking about entirely different things.

불행히도 혼란은 계속 완화 될 것입니다. "C ++ 표준 라이브러리의 컨테이너, 반복자 및 알고리즘이지만 std::string컨테이너처럼 작동 할 수는 있지만 포함하지 않는"컨테이너보다 "STL"을 참조하는 것이 훨씬 편리합니다 . "C ++ 표준 라이브러리"가 그렇게 길고 서투른 것은 아니지만 "STL"은 여전히 ​​훨씬 짧고 단순합니다. 까지 또는 (필요한 경우) 더 정확한이다 누군가 발명 한 용어를 제외 하고 단지 편리으로, "STL은"계속 사용됩니다 및 혼란이 야기 할 것입니다.


"STL"또는 "표준 템플릿 라이브러리"라는 용어는 ISO 14882 C ++ 표준의 어느 곳에도 나타나지 않습니다. 따라서 STL로 C ++ 표준 라이브러리를 참조하는 것은 잘못되었습니다. "C ++ 표준 라이브러리"또는 "표준 라이브러리"라는 용어는 ISO 14882에서 공식적으로 사용되는 것입니다.

ISO 14882 C ++ 표준 :

17-라이브러리 소개 [lib.library] :

  1. 이 절은 C ++ 표준 라이브러리 의 내용 , 잘 구성된 C ++ 프로그램이 라이브러리를 사용하는 방법 및 준수 구현이 라이브러리의 엔티티를 제공하는 방법을 설명합니다.

...

STL은 원래 C ++ 표준과 무관하게 Alexander Stepanov가 설계 한 라이브러리입니다. 그러나, C ++ 표준 라이브러리의 일부 구성 요소는 STL의 같은 구성 요소를 포함 vector, list와 같은 알고리즘 copyswap.

물론 C ++ 표준에는 STL 외부에 훨씬 더 많은 것이 포함되어 있으므로 "C ++ 표준 라이브러리"라는 용어가 더 정확합니다 (그리고 표준 문서에서 실제로 사용되는 것임).


나는 최근 에이 같은 주장을했지만, 약간의 관용이 허용 될 수 있다고 생각합니다. 경우 스콧 마이어스는 같은 실수를, 당신은 좋은 회사에있어.


로부터 GNU 표준 C ++ 라이브러리 (libstdc ++) 자주 묻는 질문 :


STL (Standard Template Library)은 C ++ 표준 라이브러리의 많은 부분에 영감을 주었지만 용어는 서로 바꾸어 사용할 수 없으며 같은 의미가 아닙니다. C ++ 표준 라이브러리에는 STL에서 제공되지 않은 많은 것들이 포함되어 있으며 그중 일부는 std::locale및과 같은 템플릿조차 아닙니다 std::thread.

Libstdc ++-v3는 SGI STL 의 많은 코드를 통합합니다 (최종 병합은 릴리스 3.3 에서 이루어졌습니다 ). libstdc ++의 코드에는 원래 SGI 코드와 비교하여 많은 수정 및 변경 사항이 포함되어 있습니다.

특히 stringSGI 출신이 아니며 "로프"클래스를 사용하지 않습니다 (선택적 확장으로 포함되어 있음에도 불구하고) valarray. 같은 수업 vector<>은 SGI 출신이지만 광범위하게 수정되었습니다.

libstdc ++의 진화에 대한 자세한 내용은 API evolution이전 버전과의 호환성 설명서를 참조하십시오.

자주 묻는 질문 SGI의 STL에 대한 여전히 읽기를 권장합니다.


참고로 2018 년 3 월 현재 공식 STL 웹 사이트 www.sgi.com/tech/stl/도 사라졌습니다 .

참고 URL : https://stackoverflow.com/questions/5205491/whats-the-difference-between-stl-and-c-standard-library



반응형