Compiler construction C++;0x-TMP编译速度

Compiler construction C++;0x-TMP编译速度,compiler-construction,c++11,template-meta-programming,Compiler Construction,C++11,Template Meta Programming,这个问题的重点是模板元编程构造。我发现了两篇文章(其中两篇没有确凿的证据,但我相信这些说法),它们提供了证据,表明c++0x原型编译器将指数编译时间转变为线性编译时间 我有一个模糊的线索,自动,decltype和可变模板将有一些是这方面的使能器。我想看到的是对语言和编译器技术的变化的详细解释,特别是解释如何和为什么 就我的技能水平而言,我在《愤怒》中使用了boost TMP library spirit和一些玩具MPL程序 很明显,第一个编译器的处理速度要比第二个慢,而且正如您所说 /*首先*/

这个问题的重点是模板元编程构造。我发现了两篇文章(其中两篇没有确凿的证据,但我相信这些说法),它们提供了证据,表明c++0x原型编译器将指数编译时间转变为线性编译时间

我有一个模糊的线索,自动,decltype和可变模板将有一些是这方面的使能器。我想看到的是对语言和编译器技术的变化的详细解释,特别是解释如何和为什么


就我的技能水平而言,我在《愤怒》中使用了boost TMP library spirit和一些玩具MPL程序

很明显,第一个编译器的处理速度要比第二个慢,而且正如您所说

/*首先*/
模板
无效f(常数&);
模板
无效f(A&);
模板
空f(A1常数&,A2&);
模板
空f(A1和A2常数和);
模板
空f(A1常数和A2常数和);
模板
无效f(A1&,A2&);
// ...
/*第二*/
模板
f(T&…)无效;

<>我知道在C++中没有一个完全通用的<代码>自动< /代码>的解决方案。模拟
auto
需要数百行甚至数千行代码(参见boost.typeof),但它仍然不是通用的。同样对于
decltype

有趣的是,你能提供到上述两篇文章的链接吗?我注意到使用
std::tuple
和可变模板比使用等效的boost类快得多(并且产生了更干净的错误)。我甚至编写了boost.mpl的一小部分来使用元组。编译时间缩短了,复杂性也降低了。对于spirit这样使用模板机制(如prolog或haskell=D)的库来说,问题以指数形式复杂化。可变模板是我要寻找的答案的一个维度:D它与新功能集合如何交互有关,以防止编译器采用2编译spirit解析器的分钟数。
/* 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 &&...);