此問題關注模板元編程結構。我發現了兩篇文章(one和two,但是兩篇文章並沒有顯示有力的證據,但我相信這些說法),它們提供了證據表明C++ 0x原型編譯器將指數編譯時間轉換爲線性編譯時間。C++ 0x TMP編譯速度
我有一個模糊的暗示,汽車,decltype和variadic模板將有東西是促成這一點。我希望看到的是對語言和編譯器技術進行更改的解釋,特別是解釋如何和爲什麼。
就我的技能水平而言,我在憤怒中使用了提升TMP庫精神,以及一些玩具MPL程序。
此問題關注模板元編程結構。我發現了兩篇文章(one和two,但是兩篇文章並沒有顯示有力的證據,但我相信這些說法),它們提供了證據表明C++ 0x原型編譯器將指數編譯時間轉換爲線性編譯時間。C++ 0x TMP編譯速度
我有一個模糊的暗示,汽車,decltype和variadic模板將有東西是促成這一點。我希望看到的是對語言和編譯器技術進行更改的解釋,特別是解釋如何和爲什麼。
就我的技能水平而言,我在憤怒中使用了提升TMP庫精神,以及一些玩具MPL程序。
很明顯,第一個編譯器比第二個編譯器處理速度慢,並且像你說的那樣,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
。
這個問題對於使用像prolog或haskell = D這樣的模板機制的精靈庫是成倍增長的。可變參數模板是我正在尋找的答案的一個維度:D這與新功能集合如何相互作用有關,以防止編譯器花費2分鐘編譯靈魂分析器。 – 2011-02-27 22:38:02
有趣的,你可以提供兩個提到的文章的鏈接? – yonilevy 2011-02-27 14:41:04
我注意到,使用'std :: tuple'和variadic模板一起使用比使用等效boost類更快(並且生成更清晰的錯誤)。我甚至寫了一個boost.mpl的子集來使用元組。編譯時間縮短,複雜度下降。 – KitsuneYMG 2011-02-28 13:47:14