Visual C++ 11 베타 출시!!!

Visual C++ 10 2012. 3. 3. 09:00 Posted by 알 수 없는 사용자

드디어 (미국 시간)2 29일에 Windows 8 Consumer Preview과 함께 Visual Studio 11 베타 버전이 나왔습니다.

저는 31일 새벽에 다운로드 받은 후 그날 저녁쯤에 설치를 했습니다.

일단 OS와 툴 둘 다 베타 버전이라서 편의성을 위해서 VirtualBox에 설치를 했습니다.

 

설치를 하면서 저는 C++ 프로그래머답게 Visual C++ 11(VC++11) 10에 비교해서 어떤 변화가 있는지 찾아 보았습니다.

 

결론부터 말하면 C++11 부분은 CPT 버전이 나왔을 때 보다는 좋아졌지만 아직은 살짝 아쉬운 부분이 있으며 전체적으로 VC++11 10에 비해서 많은 변화가 생겼습니다(다른 말로 말하면 공부할게 많아졌습니다^^;).

MSDN에 소개된 글을 보면 VC++11의 특징은 크게 4개로 나눌 수 있습니다.

 

 

 

C++11 지원 강화

STL

새롭게 추가된 STL 라이브러리

<atomic>, <chrono>, <condition_variable>, <filesystem>, <future>, <mutex>, <ratio>, <thread>

가장 눈에 띄는 것은 스레드 관련 라이브러리입니다.

 

 

컨테이너의 메모리 최적화

vector은 기존 16바이트에서 12바이트, map 16바이트에서 8바이트로 축소

 

 

모든 컨테이너에 Emplacement 함수 구현

 

 

 

코어 언어

range-based for-loop, override/final, 강한 형 타입 및 전방 선언 enums

VC++10에서 정말 많은 사랑을 받는 것 중의 하나가 auto라면 이번 VC++11에서는 range-based for-loop라고 생각합니다. 이것은 배열이나 컨테이너들을 사용할 때 편리한데 아래와 같이 사용할 수 있습니다.

 

int Numbers[3] = { 1, 2, 3 };

for( int &n : Numbers )

{

   std::cout << n << std::endl;

}

 

바로 for( int &n : Numbers ) 부분이 range-based for-loop 인데 보면 알 수 있듯이 편리와 안전 둘 다를 잡을 수 있습니다.

 

 

Variadic Templates

Variadic Templates은 가변 길이 인수 템플릿으로 현재는 올바르게 지원하는 것은 아닙니다. 현재는 매크로를 사용하여 임시적으로 구현되어 있습니다. 기본으로는 최대 5개까지 지원하고 _VARIADIC_MAX 라는 매크로의 값을 변경하면 최대 10개까지 늘릴 수 있습니다.

 

 

Stateless lambda

변수를 캡쳐하지 않는 람다 식은 함수 포인터로 변환할 수 있다 라는 사양이 C++ 11에 추가되었는데 이것을 MS에서는 Stateless lambda라고 부릅니다. 이것을 사용하면 Windows 프로시저의 콜백 함수에 람다 식을 사용할 수 있습니다.

 

 

 

WinRT 지원

Windows 8 개발과 관계가 있는 부분입니다.

Windows 8 Metro 스타일과 데스크 탑 스타일 두 개의 모드를 지원하는데 데스크 탑 모드는 현재 우리가 사용하고 있는 것과 동일한 것이고 Metro 스타일은 테블릿을 위한 모드입니다.

Metro에서 만드는 비 관리형 C++ 코드는 WinRT를 사용합니다.

UI XAML을 사용하고 C++ Component Extensions(C++/CX)을 사용하여 닷넷을 경계의 구분 없이 사용할 수 있습니다

VC++ 프로젝트 템플릿을 보면 WinRT와 관련된 것이 새로 많이 생겼습니다. 위 그림의 Direct2D Application이나 Direct3D Application은 모두 WinRT용입니다.

 

 

병렬 프로그래밍

새로운 병렬 알고리즘 추가 - parallel_sort, parallel_reduce, parallel_transform

 

새로운 병렬 컨테이너 추가 – priority_queue, map 등 추가

 

스케쥴러 기능 향상

 

C++ AMP – CUDA와 비슷한 GPU를 사용한 병렬 프로그래밍. DirectX 11 Direct Compute가 개량 되었다고 생각해도 좋을 것 같습니다.

 

 

 

향상된 IDE

코드 분석 기능 강화

 

더 똑똑해진 인텔리센스

 

네이티브 C++도 유닛테스트 지원

 

코드 커버리지 기능 지원

 

 

 

 

 

베타 버전이 나왔고 흥미로운 것들이 많아서 저는 조금씩 조금씩 VC++ 11의 새로운 부분을 공부해 나가려고 합니다. 이전처럼 공부한 것들을 여기에 정리해서 올릴 예정이니 관심 있는 분들은 같이 공부해 나가기 바랍니다^^

 

 

 

참고

What's New in Visual Studio 11 Beta for C++ Developers

http://blogs.msdn.com/b/vcblog/archive/2012/02/29/10272778.aspx

 

MSDN VC++11

http://msdn.microsoft.com/ko-kr/library/hh409293%28v=vs.110%29.aspx

 

 

Windows 8에서의 개발 개념

http://jacking.tistory.com/887

 

Windows Runtime(WinRT)에서 사용하는 C++ Component Extensions(C++/CX)?

http://jacking.tistory.com/888