V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rushcheyo
V2EX  ›  C

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

  •  
  •   rushcheyo · 2016-02-14 21:42:24 +08:00 · 2570 次点击
    这是一个创建于 3197 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    #elif is_same<..., ...>
    ...
    #endif
    以消除函数调用的开销。
    你提的问题 4# 写了。
    rushcheyo
        19
    rushcheyo  
    OP
       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
        20
    wbsdty331  
       2016-02-16 08:14:45 +08:00
    有的公司不让用.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2918 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:20 · PVG 15:20 · LAX 23:20 · JFK 02:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.