一个感觉可读性比官方范型草案要高的提案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
liulaomo
V2EX    Go 编程语言

一个感觉可读性比官方范型草案要高的提案

  •  
  •   liulaomo 2019-07-28 13:47:00 +08:00 4170 次点击
    这是一个创建于 2266 天前的主题,其中的信息可能已经有所发展或是发生改变。
    10 条回复    2019-07-28 15:55:34 +08:00
    reus
        1
    reus  
       2019-07-28 13:55:42 +08:00
    用 function body 做泛型约束,就已经谈不上“可读性”了,新的 contract 提案和旧的比较,最大的不同就是泛型约束的语法不再用 function body。
    liulaomo
        2
    liulaomo  
    OP
       2019-07-28 13:57:23 +08:00
    @reus
    这个提案也可以不用 function body 来做约束的。
    liulaomo
        3
    liulaomo  
    OP
       2019-07-28 14:00:09 +08:00
    这下面有很多例子中使用了不带 function body 的 contracts。
    https://github.com/dotaheor/unify-Go-builtin-and-custom-generics/tree/master/examples/src/go

    个人感觉此提案相对官方草案有以下优点:
    1. 和内置范型更接近。
    2. 主题语法完全和 Go 1 兼容.
    3. 相对于官方草案,少了很多新语法。
    liulaomo
        5
    liulaomo  
    OP
       2019-07-28 14:38:09 +08:00
    @reus 事实上,此提案更多地借鉴了 C++模板。C++模板不滥用的时候,其实可读性还是挺高的。
    sorra
        6
    sorra  
       2019-07-28 14:53:03 +08:00
    @reus 是很像模板
    @liulaomo 对于大型程序,可读性和对实现代码的依赖是较大的问题
    C++搞 concepts 了,Go contract 草案也许可能参考了这个,参见 B.S.老爷子的文章 Concepts: the Future of Generic Programming
    liulaomo
        7
    liulaomo  
    OP
       2019-07-28 15:05:53 +08:00
    @reus 和 D 模板还真有店像。
    https://en.wikibooks.org/wiki/A_Beginner%27s_Guide_to_D/Templates_and_Generic_Programming/Mixins

    应该说兼有 C++(但 type/function 输出)和 D (多个输出)模板的特点。


    @sorra 这老爷子准备把 C++设计成百科全书吗?作为一个只懂 C++98 的大叔,表示看不懂新世纪的 C++代码。
    Cbdy
        8
    Cbdy  
       2019-07-28 15:11:59 +08:00 via Android
    go 不加泛型也挺好的,写出了 docker 和那么多云原生的组件。港真,go 语言没有必要加泛型,避免增加语言复杂度
    reus
        9
    reus  
       2019-07-28 15:22:47 +08:00 via Android
    @liulaomo c++没有 concept 做约束的话,可能展开很多层才抛错,错误信息就很难理解了。contract 是和 concept 很像的
    liulaomo
        10
    liulaomo  
    OP
       2019-07-28 15:55:34 +08:00
    @Cbdy 加了范型不想用可以不用啊。但对于某些项目来说,范型很重要。目前 Go 主流项目扎堆于于网络和工具一个重要的原因就是缺少范型。范型可以帮助 Go 开拓新的疆土。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2899 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 13:49 PVG 21:49 LAX 06:49 JFK 09:49
    Do have faith in what you're doing.
    ubao 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