【发布时间】:2010-11-13 11:44:28
【问题描述】:
出于好奇,我想知道解析 C++ 的一些“理论”结果是什么。
让 n 是我的项目的大小(例如,在 LOC 中,但由于我们将处理 big-O,所以它不是很重要)
- C++ 是否在 O(n) 中解析?如果不是,复杂程度如何?
- C(或 Java 或其语法意义上的任何更简单的语言)是否在 O(n) 中解析?
- C++1x 会引入更难解析的新特性吗?
参考将不胜感激!
【问题讨论】:
-
Re C++1x:当然。只是一些库功能大量使用了模板元编程,众所周知,这会导致编译时间过长。
-
我认为 C 有一些 O(N)(或者几乎是 O(N))解析器,但肯定不是 C++。我不认为 C++ 解析速度可以用 /any/ Big-O 表示法来近似,除了 O(N^frand()) 之外,其中 'frand' 是一个无法预测的浮点随机值。
-
@sbi:不确定它是“确定的”。编译器只需要支持模板/constexpr 递归到某个实现定义的值,这意味着无论你调用什么模板,它最多只能添加有限数量的表达式和语句。
O(N+1000)仍然只是O(N)。 -
@Damon:再读一遍。我写了 "Re C++1x: 肯定的。"这是从 2010 年 11 月开始的,所以 C++1x 指的是后来的 C++11,它引入了 lambda 函数,
>>用于关闭嵌套模板参数列表和其他肯定使 C++ 更难解析的东西。
标签: c++ parsing theory big-o compiler-theory