드디어 (미국 시간)2월 29일에 Windows 8 Consumer Preview과 함께 Visual Studio 11 베타 버전이 나왔습니다.
저는 3월1일 새벽에 다운로드 받은 후 그날 저녁쯤에 설치를 했습니다.
일단 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)란?
'Visual C++ 10' 카테고리의 다른 글
[ VC11 ] 대격변(?) Visual C++ 11 (3) | 2012.06.25 |
---|---|
Visual C++ 10에서 디버깅하기 (6) | 2012.04.25 |
C++ AMP (2) | 2011.06.28 |
ALM for C++ in Microsoft Visual Studio 2010 세션 정리 (VS에서 VC++의 차별은 사라진다!) (2) | 2011.05.23 |
[SafeInt] C++에서 안전한 정수 연산을 하자 - 4 (0) | 2011.03.07 |