3

이 질문은 템플릿 메타 프로그래밍 구문에 중점을 둡니다. 두 개의 기사 (onetwo, 두 개는 확실한 증거는 보이지 않지만 클레임을 신뢰 함)는 C++ 0x 프로토 타입 컴파일러가 선형 컴파일 시간에 지수 컴파일 시간을 사용한다는 증거를 제공합니다.C++ 0x TMP 컴파일 속도

나는 auto, decltype 및 variadic 템플릿에 뭔가 도움이되는 막연한 느낌이 있습니다. 필자가보고 싶은 것은 언어와이 기술을 가능하게하는 컴파일러 기술의 변경에 대한 설명입니다. 특히 방법과 이유를 설명합니다.

필자는 기술 수준면에서 분노의 TMP 라이브러리 정신과 일부 장난감 MPL 프로그램을 사용했습니다.

+0

흥미로운 점은 두 개의 언급 된 기사에 대한 링크를 제공 할 수 있었습니까? – yonilevy

+0

variadic 템플릿과 함께'std :: tuple'을 사용하는 것이 등가 부스트 클래스를 사용하는 것보다 훨씬 빠르다는 것을 알게되었습니다. 나는 심지어 튜플을 사용하기 위해 boost.mpl의 작은 하위 집합을 작성했습니다. 컴파일 시간은 줄어들고 복잡성은 줄어 듭니다. – KitsuneYMG

답변

3

첫 번째 컴파일러는 두 번째 것보다 처리 속도가 느리고 분명히 evidence for that과 같습니다.

/* first */ 
template<typename A> 
void f(A const&); 
template<typename A> 
void f(A&); 

template<typename A1, typename A2> 
void f(A1 const&, A2&); 
template<typename A1, typename A2> 
void f(A1&, A2 const&); 
template<typename A1, typename A2> 
void f(A1 const&, A2 const&); 
template<typename A1, typename A2> 
void f(A1&, A2&); 

// ... 

/* second */ 
template<typename ...T> 
void f(T &&...); 

C 일반에서는 auto이라는 일반적인 해결 방법이 없습니다. auto을 시뮬레이트하려면 수천 줄이 아닌 수백 줄의 코드가 필요합니다 (boost.typeof 참조). 그럼에도 여전히 일반적인 것은 아닙니다. decltype와 동일합니다.

+0

prolog 나 haskell = D와 같은 템플릿 메커니즘을 사용하는 정신과 같은 라이브러리의 경우 문제는 기하 급수적으로 복잡해집니다. variadic 템플릿은 내가 찾고있는 대답 중 하나의 차원이다. D 그것은 컴파일러가 영적 파서를 컴파일하는 데 2 ​​분이 걸리는 것을 방지하기 위해 새로운 기능 모음이 상호 작용하는 방식과 관련이있다. –