C++0x TMP 编译速度

发布于 2024-10-19 13:58:24 字数 483 浏览 1 评论 0 原文

这个问题重点关注模板元编程结构。我找到了两篇文章(一篇两个,但是两个没有显示确凿的证据,但我相信这些声明)提供的证据表明 c++0x 原型编译器将指数编译时间转变为线性编译时间。

我有一个模糊的预感,auto、decltype 和可变参数模板将有一些东西是这方面的推动者。我希望看到的是对实现这一点的语言和编译器技术的变化的全面解释,特别是解释如何和为什么。

就我的技术水平而言,我在愤怒中使用过Boost TMP库精神,以及一些玩具MPL程序。

This question focuses on template metaprogramming constructs. I have found two articles (one and two, two however doesn't show hard evidence, but I trust the claims) that provide a evidence showing that c++0x prototype compilers turn exponential compilation times to linear compilation times.

I have a vague inkling that auto, decltype and variadic templates will have something are enablers of this. What I would like to see is ground up explanation of the changes to the languages and the compiler technologies that enable this, especially explaining the how and why.

In terms of my skill level, I have used the boost TMP library spirit in anger, and some toy MPL programs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

堇色安年 2024-10-26 13:58:24

很明显,第一个编译器的处理速度比第二个慢,就像你说的, 证据

/* 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 相同。

It's clear that the first is slower to process for the compiler than the second and there is, like you say, 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 &&...);

I know of no workaround for a completely generic auto in C++. Simulating auto requires hundreds if not thousands of lines of codes (see boost.typeof) and then it's still not generic. Same for decltype.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文