整个 STL 都即将用 Concepts 重写有什么好处? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rushcheyo
V2EX    C

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

  •  
  •   rushcheyo 2016 年 2 月 14 日 3092 次点击
    这是一个创建于 3721 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    20 条回复    2016-02-16 08:14:45 +08:00
    arrowna
        1
    arrowna  
       2016 年 2 月 14 日
    谁来重写?哪里看到的消息?
    rushcheyo
        2
    rushcheyo  
    OP
       2016 年 2 月 14 日
    @arrowna C++17 的提案都不看,没资格回答这个问题。
    orzfly
        3
    orzfly  
       2016 年 2 月 14 日
    @rushcheyo 为什么不把消息出处、提案的链接也贴出来一下,方便对此不知情的人呢?
    rushcheyo
        4
    rushcheyo  
    OP
       2016 年 2 月 14 日   1
    消息出处: 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
        5
    rushcheyo  
    OP
       2016 年 2 月 14 日
    kotokz
        6
    kotokz  
       2016 年 2 月 14 日
    compile 速度会有提升,最起码失败的更快了。
    rushcheyo
        7
    rushcheyo  
    OP
       2016 年 2 月 14 日
    @kotokz 唔…… Compile 速度提升 GCC 的 Concepts 实现者已经提到了(他说大概 7 - 10x )。然而代码膨胀等方面呢?

    还有现在这个 Concepts ,与 abstract class 到底区别在哪? Abstract class 相比还更加灵活(因为有了继承的不同选择)。
    kotokz
        8
    kotokz  
       2016 年 2 月 15 日
    @rushcheyo

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

    concepts 是跟 template 有关系, abstract class 更多是 polymorphism
    northisland
        9
    northisland  
       2016 年 2 月 15 日 via iPhone   3
    @arrowna 不知无害为君子

    @rushcheyo 知之无害为小人
    rushcheyo
        10
    rushcheyo  
    OP
       2016 年 2 月 15 日
    @northisland
    1. 你的诗句引用错了,鉴于有人批判我咬文嚼字,我就不多说了。
    2. 我说话的语气取决于对方说话的语气。
    bombless
        11
    bombless  
       2016 年 2 月 15 日 via Android
    concept 很重要,不了解的人可以说是还不了解 cpp 有多。 concept 解决的问题跟 abstract class 解决的问题没啥关联,没有可比性

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

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

    #elif is_same<..., ...>
    ...
    #endif
    以消除函数调用的开销。
    你提的问题 4# 写了。
    rushcheyo
        19
    rushcheyo  
    OP
       2016 年 2 月 15 日
    @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
        20
    wbsdty331  
       2016 年 2 月 16 日
    有的公司不让用.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5409 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 137ms UTC 06:43 PVG 14:43 LAX 23:43 JFK 02:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86