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 ((역시 C++ 0x에 추가되는 개념이다. 전에 한 번 포스팅 했음)) 같은 경우에 함수 타입이 굉장히 복잡하게 표현되는데, 그럴 때는 거의 상식적으로 가능한 유일한 대안이라는 점에서 설명하고 있다.
…이 외에도 boost::assign을 대체…까지는 아니더라도 편하게 쓸 수 있는 대입 연산 관련된 항목들 – 초기화 리스트 – , Windows API에서 사용할 수 있는 thread local storage 한정자 ((명시적인 thread key – value 쌍 말고 데이터 타입의 선언)) “thread_local”이 생기게 된다는 점 등등 뭐 바뀌는게 많다.
하지만 언제 쓸 수 있을지는 :$
auto 가 제일 와닿을것 같네요 ㅎ
요즘 C++ 표준보면, 제가 지금 쓰고있는 언어가 맞긴 한가 무지 궁금해집니다 [..]
C++을 ‘제대로’하면 다른 언어는 쉽지..라는게 점점 현실화 되가는 듯 하네요…
문제는 다른 언어 서너개 배우는 만큼의 삽질이 필요하다는게.. […]
음… auto도 결국 전처리 단계나 컴파일 단계에서 무슨 타입인지 다 결정되는거지? 타입 선언이 복잡해지는 건 스태틱 타이핑 언어의 숙명이라고 생각하는데, 결국엔 저런게 필요해 지는구나 ㅡㅡ;;;
stania / 난 concurrency 지원쪽과 람다가 더 -_-;; (람다는 심지어 템플릿으로 별도 구현해서 지금 쓰고있지; )
DarkAngel / 숙련도가 필요하긴한데, 충분한 숙련도를 가져서 만든다면 유례없이 효율적인 작업이 가능할 것 같긴합니다. 다만 말 그대로 “충분한 숙련도”가 필요함…
수원 / 타입 선언이 복잡해지는건 어쩔 수 없긴한데, 저렇게 “컴파일 시간”에만 결정되는 거라면 저 정도의 syntactic sugar는 좀 뿌려주는게 정신건강에 좋은 것 같음[…]
auto 전부터 기대하고 있었는데 도입되면 좀 편해질 듯. 근데 과연 몇 년 기다려야 하려나.
C# 3.0의 var 같은 애군요.
일념 / GCC에선 그냥 typeof로 버텼는데 VS는 좀 귀찮네요; 저도 좀 나와줬으면함;
Dish / 그거랑 비슷하지. Hurb Sutter가 쓴 글에도 그 얘기 나옴
이래저래…C#이나 C++이나 비슷해지나보네요 ^^ (Dish님의 글로 추측 + C#에도 template가 추가된것으로 알고있슴)
일단…C++이 언어적 표현력 자체는 킹왕짱이긴한데. 너무 넓어서…어느업체에서 다 구현할런지 ㅎㅎㅎ 그래도 점점 embedded 시장에도 C++이 퍼지는것을 보면 흐뭇합니다 ^^; 좀 더 퍼져줬으면….
더불어 회사에 있는 개발진들도 OOP좀 알아줬으면…(이건 좀 쉽지않긴한데. 쩝…적성검사 및 구문면접으로 뽑으니…학교에서 전공을 대충해도 충분히 입사가 가능한 시스템…-_-;;)
kalstein / C#이랑 비슷해진다기보단, 현 시류에 맞는 패러다임을 추가한다는 느낌이긴하죠.
C++의 언어적인 표현력은 우회적으로든, 라이브러리로든 이미 다 구현되어있긴해요. 현재 표준안은 그렇게 퍼져있는걸 표준이란 범주에 넘는 작업으로 보입니다.
회사에 있는 개발자들이 OOP를 아는 것도 중요하긴 한데, 초보는 C++을 쓰면 안된다에 가까워진 것 같기도하고 -_-;;
뭐랄까 1년쯤은 코드 리뷰해줄 멘터없이 시작레벨 프로그래머를 C++프로젝트에 넣는건 범죄행위일지도…
음…근데 차후 C++에서는 멀티코어에 대비한…거시기는 없나요? Java는 보니까…싱크로나이즈든가? 그런 메소드를 쓰면…메소드 자체가 동기화되는거 같던데 말이죠.
OOP문제는 글쎄요. 현시스템은 OOP와 무관하게 되어있고, 그렇다고 기존 인원들이(대충 3~4년 이상 짬밥분들) OOP에 대한 학습열의는 제로입니다.(뭐..제로는 아닐수도 있으니…’0에 수렴한다.’ 는 표현이 더 옳을지도 ㅡ _-;;) 그리고 새로 들어온 인원들도…아무래도 OOP와는 친숙하지않으며 기존시스템을 이어받지요. 혼자 계몽해봐야… 별수없으니 팀웍인 이상 따라가야되는…ㅎㅎㅎ
하긴 뭐..어떤분께서는…’너가 대기업 들어가서 개발직에 있는것만으로도 관리직으로 있는것보다 낫지않느냐’ 하시더군요. 저말도 맞는거 같긴 하지만 ^^;
kalstein / synchronized 라는 키워드가 있는데 솔직히 별 도움이 안되는 녀석이라고 밖엔 생각되질 않습니다; C++이면 그냥 scoped-lock 개념을 쓰는게 나은 선택이라고 밖엔;
OOP문제는 흠 -_-; 뭐 이건 분위기문제에 더 가까운거같은데요;
C++ 0x draft 등장…
Sutter’s Mill 에서 가져온 소식.
프로그래밍 언어인 C++ 의 새 표준안인 C++ 0x의 초안(working draft)이 지난 9월 ISO C++ commitee에서 발행되었다.
실제로 이 초안을 가지고 토론(?) / 버그 픽스 / 모호….