C++0x 작업은 현재도 진행 중입니다. Rapperswill 회의에서 공개된 드래프트 내용입니다.

 

최신 드래프트는 N3126입니다. 하지만 이 드래프트에는 Rapperswill 회의에서 변경하기로 한 것을 다 포함하지 않고 있다고 합니다. 이유는 세세한 부분을 고민 중이라고 합니다.

 

 

N3103: Security impact of noexcept

단순한 예시를 위한 페이퍼. noexcept라고 선언 함수가 예외를 밖으로 던졌을 경우 즉시 terminate해야 한다. 이 룰을 지켜지지 않는 경우 어느 실행 환경에서는 보안 상의 문제를 일으킨다. 따라서 반드시 terminate되도록 구현해야 한다.

 

 

N3106

min/max/minmax에 있어서의 문면의 변경 실수의 수정.

 

 

N3108

std::basic_string의 최적화 수법으로서 현재 주류의 small-string optimization이라는 것이 있다.

대충 아래의 코드와 같다. 이미 VC++에서는 구현되어 있다

 

// char의 문자열을 저장하는 클래스

class String

{

    char * ptr ;

size_t size ;

 

    // 문자열 길이가 충분히 작은 경우 동적 할당을 하지 않고 이것을 사용

    char small_string_buffer[8] ;

} ;

 

std::string에 저장하는 문자열이 짧은 문자열 이라는 것은 자주 있는 케이스이다. 이런 경우 특별히 small_string_buffer를 사용하면 일부러 동적으로 메모리를 확보할 필요가 없어진다.

std::basic_string는 컨테이너의 요건을 충족하고 있다. 그런데 새로운 swap의 정의를 충족하려고 하면 이 small-string optimization를 사용할 수 없게 된다. 이 때문에 std::basic_string에 한계, swap 후의 이터레이터가 무효가 된다고 하는 조건을 덧붙여 이러한 최적화를 할 수 있도록 하는 제안.

 

 

N3109: US 108

C++0xrvalue 레퍼런스를 추가한 목적은 rvalue에 대한 Move semantics 때문이다. auto_ptr과 같은 lvalue에 대한 Move sematnics를 제공하는 라이브러리는 deprecated 이다. 그 때문에unique_ptr의 생성자는 rvalueauto_ptr만을 인수에 취하도록 한다. lvalueauto_ptr를 인수로 있는 생성자는 삭제한다.

 

 

N3112: Proposed Resolution for CH 15

Pittsburgh 회의에서 Move 생성자와 Move 대입 연산자의 의미를 바꾸었지만 그 변경이 라이브러리의 기존의 문장에 영향을 미치고 있다. 그에 대한 수정.

 

 

N3113: Async Launch Policies (CH36)

asynclaunch에는 세 개의 옵션이 있다. Async, sync, any 이다. anyasync이면서도 sync도 아닌 구현 의존의 방법이라는 것이 되지만 이렇게 애매모호한 정의로는 벤더는 온전히 의미가 있는 구현을 제공할 수 없고, 또한 유저는 포터블한 코드를 쓸 수 없다. 그 때문에 이것을 구현 의존의 식별자로 한다.

, sync라는 이름은 오해를 부르기 쉽기 때문에 deferred라고 개명하는 것을 제안.

 

 

N3114 - throw() becomes noexcept

타이틀 대로 라이브러리의 throw()noexcept로 변경하는 제안.

 

 

N3122: Observers for the three handler functions

C++0x에는 multi-thread라고 하는 개념이 들어간다. 그렇게 되면 당연 나오는 문제는 데이터 경합(data race)이다. 이 때문에 operator newoperator delete, C 라이브러리의calloc/malloc/realloc/free은 데이터 경합을 일으켜서는 안 된다고 규정되었다.

 

이 제약은 유저에 의한 operator newoperator delete overload 시에도 당연 지키지 않으면 안 된다. 그러나 set_new_handler는 값을 변경하면서 앞의 값을 얻는다고 하는 사양이다. 그렇다면 set_new_handler의 사양에는 어떠한 배타적 처리를 강구하지 않으면 안 되지만 유저 코드와 라이브러리 코드와의 사이로의 공통의 배타적 처리라고 하는 것은 무리다. 그렇다면 유저 코드의operator new 중에서 set_new_handler가 사용할 수 없는 것은 아닌가?

이 문제에 대처하기 위해 new handlerget 하기 위한 라이브러리가 추가 되었다. get_new_handler() 이다. 오히려 지금까지 없는 것이 이상했던 것. 한층 더 get_unexpected()get_terminate()도 추가 되었다.

 

set_unexpected()set_terminate()nullpointer를 사수는 안 된다고 하는 룰을 완화하기로 했다. 그러나 이것은 set_unexpected()set_terminate()nullpointer를 지정한다고 하는 코드의 거동을 미 규정(undefined는 아니고 unspecified)으로 해버릴 수 도 있다

 

 

N3123: Bringing result_of near to INVOKE

result_of의 문면을 INVOKE를 사용하여 기술하도록 했다.

 

 

N3124: C and C++ Alignment Compatibility

Alignment 지정 문법을 attribute로부터 specifier으로 옮기는 제안. 이것에 의해 alignas라고 하는 키워드가 도입. 이것은 specifier이다. 아래와 같이 기술할 예정.

alignas(16) char buffer[128] ;

 

 

N3125: Omnibus Memory Model and Atomics Paper

현재의 기획의 문면에 있어서의 메모리 모델과 동기 처리의 문제점을 ML 상에서 논의하고 있었다. 그 정리.

 

 

N3128: C++ Timeout Specification

스레드의 스케줄링 등의 지연을 quality of implementation라고 부른다. 또 프로세서나 메모리의 코스트를 쓸데 없이 올리지 않기 위한 지연을 quality of management라고 부른다. 그렇다면현실의 환경에 있어서의 타임 아웃의 실시간이라는 것은 목적의 시간 + quality of implementation + quality of management로 나타내질 것이다. 규격에서도 이 개념을 도입한 문면에 바꾸어 넣는다.

 

 

N3129: Managing C++ Associated Asynchronous State

Associated Asynchronous State 주위의 문면을 이해하기 어렵기 때문에 새로운 용어를 정의하고 그 용어를 이용하여 문면을 고쳐 쓰는 제안.

 

 

N3130: Lockable Requirements for C++0x

문면의 섬세한 수정.

 

 

N3131: Compile-time rational arithmetic and overflow

Compile-time rational arithmetic이 결과는 표현할 수 있다고 해도 계산 과정에서 오버플로우를 일으키는 경우는 어떻게 하면 좋을까?. 예를 들어  ratio_multiply<ratio<INTMAX_MAX,2>, ratio<2,INTMAX_MAX>>는 최종적으로 ratio<1,1>라고 계산된다. 그러나 그 계산 과정에서 오버플로우를 일으킨다. 제안은 최종적인 결과가 표현 가능하면 합법이다. 구현은 다른 알고리즘을 사용하는 것에 의해서 오버플로우를 회피하는 것이 추천.

 

 

N3132: Mathematizing C++ Concurrency: The Post-Rapperswil Model

내용은 FCD에서 합의되었던 C++의 메모리 모델을 수학적으로 기술하여 한층 더 영어에 의한 대역을 붙인 .

 

 

N3136: Coherence Requirements Detailed

Coherence Requirements의 추가。

 

 

C and C++ Liaison: Compatibility for Atomics

C 언어와 C++ 사이의 atomic의 호환성의 비교.

 

 

 

출처:

(영어) http://j2k.naver.com/j2k_frame.php/korean/www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/#mailing2010-08

(일본어) http://cpplover.blogspot.com/2010/08/post-rapperswil-mailing.html

 

 

by 흥배 2010.09.14 08:00