整个 STL 都即将用 Concepts 重写有什么好处?

2016-02-14 21:42:24 +08:00
 rushcheyo

除了报错信息更加友好以外,性能是增了还是减了?

2495 次点击
所在节点    C
20 条回复
arrowna
2016-02-14 21:58:36 +08:00
谁来重写?哪里看到的消息?
rushcheyo
2016-02-14 22:03:55 +08:00
@arrowna C++17 的提案都不看,没资格回答这个问题。
orzfly
2016-02-14 22:35:03 +08:00
@rushcheyo 为什么不把消息出处、提案的链接也贴出来一下,方便对此不知情的人呢?
rushcheyo
2016-02-14 23:16:06 +08:00
消息出处: https://www.reddit.com/r/cpp/comments/3dzv6i/eric_niebler_on_twitter_the_concepts_ts_was_voted/
提案链接:暂不公开,但是可以看 Bjarne Stroustrup 的论文 Thoughts on C++17 中 Concepts 的部分: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4361.pdf
rushcheyo
2016-02-14 23:16:18 +08:00
kotokz
2016-02-14 23:23:13 +08:00
compile 速度会有提升,最起码失败的更快了。
rushcheyo
2016-02-14 23:35:45 +08:00
@kotokz 唔…… Compile 速度提升 GCC 的 Concepts 实现者已经提到了(他说大概 7 - 10x )。然而代码膨胀等方面呢?

还有现在这个 Concepts ,与 abstract class 到底区别在哪? Abstract class 相比还更加灵活(因为有了继承的不同选择)。
kotokz
2016-02-15 00:02:59 +08:00
@rushcheyo

code bloat 最大的影响就是 complie time.
dead code 会在 link 的时候 eliminate 掉

concepts 是跟 template 有关系, abstract class 更多是 polymorphism
northisland
2016-02-15 00:08:37 +08:00
@arrowna 不知无害为君子

@rushcheyo 知之无害为小人
rushcheyo
2016-02-15 00:27:29 +08:00
@northisland
1. 你的诗句引用错了,鉴于有人批判我咬文嚼字,我就不多说了。
2. 我说话的语气取决于对方说话的语气。
bombless
2016-02-15 01:51:33 +08:00
concept 很重要,不了解的人可以说是还不了解 cpp 有多屌。 concept 解决的问题跟 abstract class 解决的问题没啥关联,没有可比性

不只是报错消息,写模板代码的思路会小有变化,写的时候思路更清晰了。

不过多数人并不写模板代码,对这些人来说的确主要是报错信息变了
minsheng
2016-02-15 02:48:41 +08:00
不就一个 type class ……能有多屌,看看 Haskell 加了 type class 后多出哪些东西就好了
hqs123
2016-02-15 08:56:15 +08:00
请教楼主 Concepts 是什么东西?
rushcheyo
2016-02-15 09:59:19 +08:00
@hqs123 麻烦你自己读 cppreference ,或者维基百科。
raysonx
2016-02-15 10:20:33 +08:00
C++又在加新特性了。。。
rushcheyo
2016-02-15 11:34:37 +08:00
@raysonx C++17 以后,不但 C++ 是一门崭新的语言, STL 也会焕然一新(重写)。
到时候再接受新特性,不妨现在就开始研究学习。
拒绝历史潮流的人会被碾碎。
breeswish
2016-02-15 14:40:27 +08:00
回答问题:这和运行时性能没关系,运行时性能不会增也不会减;当然,编译时会减少
提出问题:在哪里有说“整个 STL 都即将用 Concepts 重写”
rushcheyo
2016-02-15 14:49:39 +08:00
@breeswish
然而 traits 能够优化了。其实原来就能写成:
#if is_same<..., ...>

#elif is_same<..., ...>
...
#endif
以消除函数调用的开销。
你提的问题 4# 写了。
rushcheyo
2016-02-15 14:50:48 +08:00
@breeswish is_same 可以修改定义为这样以支持:
template <typename T, typename U>
constexpr const bool is_same = false;

template <typename T>
constexpr const bool is_same<T, T> = true;
wbsdty331
2016-02-16 08:14:45 +08:00
有的公司不让用.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256477

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX