도입 예정이긴 하지만, 일단 평가 목적으로 몇 가지 테스트해보고, 기존 코드 베이스도 좀 옮겨보고 해본 체험기.
나 자신이 주 개발을 C++/Python으로 하는지라, 이 이하의 내용은 C++ 프로그래머 관점이 주다.
C++ 변경 사항(C++ TR1/C++ 0x) 반영에 따른 변화
lambda 구문 추가. 예전에 썼듯이, C++ 은 효과적인 익명 함수 문법이 없기 때문에, 굉장히 괴악한 삽질을 하고서야 closure 비슷한 구문을 만들 수 있었다. 하지만 이런 게 지원 되면 (어차피 functional 에 해당 기능도 추가되고 해서) 상대적으로 쉽게 이를 만들 수 있게 된다.
rvalue reference 및 이를 사용한 STL 구현 변경. “값”에 해당하는 (의미론적으로 위치가 없는) rvalue 참조자가 생겼다 (type&& 문법으로 표기). C++ 의 철학 중 하나가, “사용하지 않는 것의 대가를 치르지 말아라” 인 게 괜한 게 아님. (특히) STL 컨테이너에서 임시 객체 할당하는 경우, 복사 연산이 상당히 줄어들게 된다. (move semantics / perfect forwarding)
rvalue/lvalue 자체가 좀 헷갈리시는 분들은 Visual C++ 팀 블로그의 Rvalue references 란 글을 읽어 보자.
nullptr 지원, auto 타입 지정자 설정 등으로 상대적으로 코드를 쓰기 간편해짐. 엄청 복잡한 템플릿 기반 컨테이너(…)의 iterator 같은걸 생각하면 정말 머리가 아픈데 – 대부분 typedef 땜 빵을 하기야 하지만 – 이런걸 상대적으로 쉽게 넘어가게 해준다.
대부분의 TR1 헤더 및 일부 C++ 0x 기능이 헤더에 추가됨. 문제는 이런 헤더 파일들의 변화로, boost 라이브러리를 사용하는 라이브러리 중 일부가 컴파일 되지 않는다. google-test 1.4.0 릴리즈도 tuple 을 내부적으로 정의해서 쓰고 있어서 이름 충돌 –_- 을 겪게 된다. 내가 짠 라이브러리 중엔 identity functor 를 정의해 쓰던 게 충돌하고 / type_traits 를 사용한 코드도 충돌하고 / boost::function 을 쓰는 코드도 충돌했다(바로 그 closure 코드 –_-).
문제는 내가 작성하는 라이브러리를 몇 가지 VS 버전에서 컴파일 되도록 해야 해서, 정말 하기 싫었던(…), _MSC_VER 값 가지고 조건부 컴파일을 몇 개 추가 했다.
빌드 관련 변경 사항
Native multi-targeting 이란 기능이 추가. VS 2010 솔루션 파일 하나 가지고, VS 2008 혹은 VS 2005 의 툴 체인을 사용해서 빌드 할 수 있게 수정되었다. 다만 이전 버전이 설치되어 있어야 하고, VS 2005는 공식 지원이 아님. 근데 VC++ 팀 블로그에 해당 프로퍼티 파일들이 올라와 있어서 그냥 하니까 되더라;
다만 일부 post-build / pre-build 이벤트에서 msbuild 로 빌드하게 했는데, 이 설정들은 자동으로 컨버팅 되질 않아서, 좀 괴로웠음. 게다가 이건 버전 별로 어떻게 나눠야 할지 좀 갑갑함…
MSBuild 버전이 올라가고, 좀 더 툴 자체가 리파인 되었음. 로그 출력도 좀 더 정갈(?)해지고…
빌드 속도 자체는 광고하던 링크 속도 향상은 미미했던 것 같고, 일부 테스트에선 오히려 느려지기도 하던데 (5% 미만 수준이긴 했지만…).
그리고 컴파일 과정에서 사용하는 플랫폼 SDK 버전이 낮으면(같이 포함된 7.0A 이상을 써야 함) rc 가 이상한 에러를 내뱉는다. 그리고 (기본) include, lib, exe .. path 에 해당하는 설정이 다른 곳으로 이전됨…
컴파일러에서 정의하는 상수들 중 일부가 변경됨. 이건 별도 빌드 파일인 경우엔 신경 쓰지 않으면 곤란해질지도 모르지만, 일단 테스트하는 동안엔 별 문제 안 생겼음.
IDE 에서 눈에 띄는 것들
제대로 된 다중 모니터 지원. 이젠 모니터 세 개를 개발 머신에 물려도 될 것 같다. 일부 출력/watch/… 창만 IDE 프레임 밖으로 꺼낼 수 있었는데, 이젠 개별 편집 창을 꺼낼 수 있게 변경. 게다가 “창 별로” 확대 기능을 지원한다. 이건 시연용?
인텔리센스는 조금 나아진 듯도 하지만, 이건 오래 안 써보면 모르겠고. WPF를 써서인지 메모리 사용량은 좀 늘었지만(약 50~150MiB쯤?), 이 정도는 램 가격 내려간걸 생각하면 별거 아니고.
우리 회사도 VS좀 썼으면..
중이 제 머리 못 깎는 법(?)