The New C++: Part 2
h2. Library TR
p. 추가되는 Library facility들에 대한 자세한 글을 쓰다보니, 너무 오래걸려서, 일단 먼저 각각에 대한 간단한 설명을 정리하려고 한다. 이 글은 JTC1.22.19768 ISO/IEC TR 19768 – C++ Library Extensions[1] 문서와 CUJ 2004년 9월호에 Herb Sutter가 기고한 Trip Report: March 2004[2]에 나와있는 정보를 기초로 하여 작성된 것이다.
h3. Smart pointers (shared_ptr, weak_ptr)
p. 일반적으로 Smart pointer는 동적으로 할당된 object에 대한 pointer를 안전하게 다루게 해줄 수 있도록 해준다. shared_ptr은 이미 표준에 포함되어있는, auto_ptr의 치명적인 결함(특히, container에 넣을 수 없는 점)을 보완하는, reference counting 방식의 smart pointer이다. weak_ptr은, shared_ptr에서 raw한 pointer를 빼내는 대신 dangling pointer 문제를 안전하게 처리해주는 pointer의 역할을 대신해준다.
h3. Tuple types (tuple)
p. pair가 2개의 type을 저장하는 generic container라면, tuple은 n개로 확장한 형태이다.
h3. Generalized function pointers (function)
p. function pointer의 역할을 하는 세가지 C++ 요소, 즉 function pointer, member function pointer, functor들에 대한 facade로 똑같이 취급할 수 있도록 해준다.
h3. Nearly complete C99 library compatibility
p. 기본적으로 모든 C99와 C++03의 차이를 반영하는 것을 목적으로 하고 있다.
h3. Hash-based container (unordered_set, unordered_map, unordered_multiset unordered_multimap)
p. 많은 C++ 사용자들이 필요로 해왔을 Hash table을 기초로 하는 container가 추가된다.
h3. Type traits (alignment_of, has_nothrow_copy, has_virtual_destructor, is_base_of, is_const, is_convertible, ..)
p. type에 대한 정보, type 간의 관계에 대한 정보들을 얻어낼 수 있는 traits들을 제공함으로써, concept check나 meta programming에 도움을 줄 수 있다.
h3. Regular expressions (basic_regex)
p. 말그대로 regular expression. ‘basic_’이란 prefix에서 짐작할 수 있듯이, string 만을 위한 것은 아니라는 것을 알 수 있다.
h3. Random-number generation(random_device, poisson_distribution)
p. C library 함수들에 비해 어떤 장점이 있는지는 좀 더 살펴봐야할 듯 하다.
h3. Mathematical special functions
p. 여러가지 수학 함수들. 본인은 잘 모르기 때문에, 관심 있는 사람은 직접 draft[1]를 참고하시길.
h3. 아직 draft에는 없지만 Trip Report[2]에서 언급하고 있는 facility들.
h4. [“N1548, A Proposal to Add a Fixed Size Array Wrapper to the Standard Library Technical Support”:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1479.html]
p. 기존의 array를 container 형태로 구현한 것. initializer 문법을 지원하면서도, 다른 container와 유사한 interface를 가지므로, 사용성을 크게 해치지 않으면서 자연스럽게 C++ Standard Library에(특히, algorithm) 어울릴 수 있다.
h4. [“N1550, New Iterator Concepts”:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1477.html]
p. 기존의 iterator가 access와 positioning을 동시에 취급하는 개념이라서 좀 더 넓은 범위의 iterator 개념을 표현할 수 없었던 문제가 있었다. 이를 해결하기 위해 두 개념을 분리하는 iterator 구조에 대한 제안.
h4. [“N1530, Iterator Facade and Adaptor”:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1530.html]
p. 서로 다른 종류의 iterator들을 wrap하는 iterator facade와 다른 방식으로 동작하는 iterator로 변용해주는 adaptor를 정의한다. 위의 ‘New Iterator Concept’에 의존한다.
h3. Conclusion
p. 언제 쓰여질 지 모를 다음 part에서는 Evolution WG에서 언급되는 C++ language 자체에 대한 변경 사항들을 정리해보겠다. 그 다음부터는 Library TR Draft를 중심으로 흥미가 가는 내용에 대해서 자세히 써보려고 생각 중..
fn1. [“http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1540.pdf”:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1540.pdf]
fn2. [“http://www.cuj.com/”:http://www.cuj.com/]