C ++ 0x TMP скорость компиляции - PullRequest
3 голосов
/ 27 февраля 2011

Этот вопрос посвящен шаблонным метапрограммирующим конструкциям. Я нашел две статьи ( одна и две , две, однако, не дают убедительных доказательств, но я верю утверждениям), которые предоставляют доказательства того, что компиляторы прототипов c ++ 0x превращаются время экспоненциальной компиляции во времена линейной компиляции.

У меня есть смутное предположение, что шаблоны auto, decltype и variadic будут чем-то способствовать этому. То, что я хотел бы видеть, - это объяснение изменений в языках и технологиях компилятора, которые это позволяют, особенно объясняя, как и почему.

Что касается моего уровня мастерства, я использовал дух библиотеки повышения TMP в гневе и некоторые игрушечные MPL-программы.

1 Ответ

3 голосов
/ 27 февраля 2011

Понятно, что первое обрабатывается компилятором медленнее, чем второе, и, как вы говорите, доказательство этого .

/* 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 &&...);

Я не знаю обходного пути для полностью универсального auto в C ++.Моделирование auto требует сотен, если не тысяч строк кода (см. Boost.typeof), и тогда оно все еще не является общим.То же самое для decltype.

...