C++ 0x의 초안이 나옵니다

via Sutter’s Mill: Trip Report: June 2008 ISO C++ Standards Meeting

C++ 표준위원회의 일원이기도 한 Hurb Sutter의 블로그에 C++ 0x의 초안에 관한 포스팅이 올라왔습니다. 오는 9월에 초안이 나올 예정이라고 합니다. 초안이긴해도 현재의 C++ 표준은 돈 주고 사야해서(…) 보통은 공짜로 볼 수 있는 초안을 보는 현실을 감안하면 큰 차이가 없으니 그걸 새 표준으로 생각하면 될듯도 –_–a

…그리고 많은 컴파일러 제조사들도 일단 그걸 기준으로 컴파일러를 만들어낼테니 :$

일단 이전 포스팅 – 주로 Hurb Sutter 의 – 내용이랑 이번 포스팅 내용을 보면,

Concpet

허브 서터의 포스팅에서는 컨셉(concept)이 추가되는게 제일 큰 변화라고 말하고 있습니다. Java의 interface 개념이랑 눈꼽만큼 닮아있는데, 기존에는 type_traits 같은 개념으로 해결했던 문제를 위한 것이다.

템플릿자체가 컴파일 시간에야 말이 되나 안되나가 — instantiate되느냐 마느냐가 – 결정된다는 문제가 있어서, 이런 문제도 좀 해결하고 – 특정 연산의 존재를 “강제”한다. 즉, SGI의 STL 문서에서 흔히 보게되는 comparable, assignable 같은 “개념”들을 C++ 언어 시스템 자체에 통합 시키려는 시도다. Java의 interface보다는 느슨한 개념이지만 지금 사용하고 있는 type_traits 같은 것보단 훨씬 이해하기 쉬울 거라고 믿고있음;;;

위에서 링크한 초안…에 포함될 문서에있는 예를 가져오면,

template<LessThanComparable T>
const T& min(const T& x, const T& y) {
    return x < y? x : y;
}

SGI STL 문서에 있는 Less-than-comparable 의 “개념”인데, 이걸 언어 차원으로 강제하는 것. 즉 기존의 typename 키워드 대신에 LessThanComparable 을 어딘가에 정의하고 < 연산자가 존재하는 것을 강제하게하자는 얘기.

Auto

Hurb Sutter의 포스팅에 나온 것.  GCC(g++) 사용자라면 typeof 란 연산자를 본 적이 있을텐데, 대충 이런 짓을 할 수 있다.

map< int, float > ifm;
typeof(ifm.begin()) i = ifm.begin();

즉, template 타입처럼 복잡한 타입의 이름을 “추론해서 쉽게 얻어낼 수 있는 곳”에서 이걸 사용자가 귀찮게 생각하지 않아도 되는 syntactic sugar – 적어도 내 생각엔 – 을 주는 것. C++ 0x에서는 다음과 같은 형태다.

auto i = ifm.begin();

auto 라는 키워드가 저런 용도로도 사용할 수 있게 되는 것. 그리고 링크한 글에선 저 키워드의 필요성을 lambda/closue[1] 같은 경우에 함수 타입이 굉장히 복잡하게 표현되는데, 그럴 때는 거의 상식적으로 가능한 유일한 대안이라는 점에서 설명하고 있다.

 

…이 외에도 boost::assign을 대체…까지는 아니더라도 편하게 쓸 수 있는 대입 연산 관련된 항목들 – 초기화 리스트 – ,  Windows API에서 사용할 수 있는 thread local storage 한정자[2] “thread_local”이 생기게 된다는 점 등등 뭐 바뀌는게 많다.

하지만 언제 쓸 수 있을지는 :$

  1. 역시 C++ 0x에 추가되는 개념이다. 전에 한 번 포스팅 했음 []
  2. 명시적인 thread key – value 쌍 말고 데이터 타입의 선언 []

Published by

rein

나는 ...

12 thoughts on “C++ 0x의 초안이 나옵니다”

  1. 요즘 C++ 표준보면, 제가 지금 쓰고있는 언어가 맞긴 한가 무지 궁금해집니다 [..]
    C++을 ‘제대로’하면 다른 언어는 쉽지..라는게 점점 현실화 되가는 듯 하네요…
    문제는 다른 언어 서너개 배우는 만큼의 삽질이 필요하다는게.. […]

  2. 음… auto도 결국 전처리 단계나 컴파일 단계에서 무슨 타입인지 다 결정되는거지? 타입 선언이 복잡해지는 건 스태틱 타이핑 언어의 숙명이라고 생각하는데, 결국엔 저런게 필요해 지는구나 ㅡㅡ;;;

  3. stania / 난 concurrency 지원쪽과 람다가 더 -_-;; (람다는 심지어 템플릿으로 별도 구현해서 지금 쓰고있지; )

    DarkAngel / 숙련도가 필요하긴한데, 충분한 숙련도를 가져서 만든다면 유례없이 효율적인 작업이 가능할 것 같긴합니다. 다만 말 그대로 “충분한 숙련도”가 필요함…

    수원 / 타입 선언이 복잡해지는건 어쩔 수 없긴한데, 저렇게 “컴파일 시간”에만 결정되는 거라면 저 정도의 syntactic sugar는 좀 뿌려주는게 정신건강에 좋은 것 같음[…]

  4. 일념 / GCC에선 그냥 typeof로 버텼는데 VS는 좀 귀찮네요; 저도 좀 나와줬으면함;

    Dish / 그거랑 비슷하지. Hurb Sutter가 쓴 글에도 그 얘기 나옴

  5. 이래저래…C#이나 C++이나 비슷해지나보네요 ^^ (Dish님의 글로 추측 + C#에도 template가 추가된것으로 알고있슴)

    일단…C++이 언어적 표현력 자체는 킹왕짱이긴한데. 너무 넓어서…어느업체에서 다 구현할런지 ㅎㅎㅎ 그래도 점점 embedded 시장에도 C++이 퍼지는것을 보면 흐뭇합니다 ^^; 좀 더 퍼져줬으면….

    더불어 회사에 있는 개발진들도 OOP좀 알아줬으면…(이건 좀 쉽지않긴한데. 쩝…적성검사 및 구문면접으로 뽑으니…학교에서 전공을 대충해도 충분히 입사가 가능한 시스템…-_-;;)

  6. kalstein / C#이랑 비슷해진다기보단, 현 시류에 맞는 패러다임을 추가한다는 느낌이긴하죠.

    C++의 언어적인 표현력은 우회적으로든, 라이브러리로든 이미 다 구현되어있긴해요. 현재 표준안은 그렇게 퍼져있는걸 표준이란 범주에 넘는 작업으로 보입니다.

    회사에 있는 개발자들이 OOP를 아는 것도 중요하긴 한데, 초보는 C++을 쓰면 안된다에 가까워진 것 같기도하고 -_-;;
    뭐랄까 1년쯤은 코드 리뷰해줄 멘터없이 시작레벨 프로그래머를 C++프로젝트에 넣는건 범죄행위일지도…

  7. 음…근데 차후 C++에서는 멀티코어에 대비한…거시기는 없나요? Java는 보니까…싱크로나이즈든가? 그런 메소드를 쓰면…메소드 자체가 동기화되는거 같던데 말이죠.

    OOP문제는 글쎄요. 현시스템은 OOP와 무관하게 되어있고, 그렇다고 기존 인원들이(대충 3~4년 이상 짬밥분들) OOP에 대한 학습열의는 제로입니다.(뭐..제로는 아닐수도 있으니…’0에 수렴한다.’ 는 표현이 더 옳을지도 ㅡ _-;;) 그리고 새로 들어온 인원들도…아무래도 OOP와는 친숙하지않으며 기존시스템을 이어받지요. 혼자 계몽해봐야… 별수없으니 팀웍인 이상 따라가야되는…ㅎㅎㅎ

    하긴 뭐..어떤분께서는…’너가 대기업 들어가서 개발직에 있는것만으로도 관리직으로 있는것보다 낫지않느냐’ 하시더군요. 저말도 맞는거 같긴 하지만 ^^;

  8. kalstein / synchronized 라는 키워드가 있는데 솔직히 별 도움이 안되는 녀석이라고 밖엔 생각되질 않습니다; C++이면 그냥 scoped-lock 개념을 쓰는게 나은 선택이라고 밖엔;

    OOP문제는 흠 -_-; 뭐 이건 분위기문제에 더 가까운거같은데요;

  9. Pingback: rein's world

Leave a Reply