相比 Go, Rust 是不是也是一个好选择呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ericgui
V2EX    程序员

相比 Go, Rust 是不是也是一个好选择呢?

  •  1
     
  •   ericgui 2019-06-21 11:45:11 +08:00 22338 次点击
    这是一个创建于 2305 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主要是觉得 Go 很怪异,
    Rust 的包管理似乎非常靠谱,比 Go 强了不止 62%
    实在很不习惯 Go 乱七八糟的包管理
    83 条回复    2020-01-12 16:16:24 +08:00
    unifier
        1
    unifier  
       2019-06-21 11:52:15 +08:00   3
    反正我用 c++的时候,觉得 go 的包管理其实也不是那么烂
    janxin
        2
    janxin  
       2019-06-21 11:54:47 +08:00   7
    Java 了解一下,世界上最好的语言
    pmispig
        3
    pmispig  
       2019-06-21 11:54:57 +08:00
    rust 是 Javascript 的作者弄得。。感觉和写 js 一样狗屎的体验,特别是异步
    agdhole
        4
    agdhole  
       2019-06-21 12:07:12 +08:00
    rust 和 golang 目标用户都不是一个吧
    vsitebon
        5
    vsitebon  
       2019-06-21 12:07:42 +08:00
    @pmispig Rust 语言原本是 Mozilla 员工 Graydon Hoare 的私人项目,Brendan Eich 是 Javascript 主要创造者与架构师,只能说 Rust 是 Mozilla 基金会的项目吧
    129ykx733D016U2n
        6
    129ykx733D016U2n  
       2019-06-21 12:37:02 +08:00
    不学捣鼓 C/C++,Rust 是目前一个不错的选择
    firebroo
        7
    firebroo  
       2019-06-21 12:39:55 +08:00   1
    反正我用 c++的时候,觉得 go 的包管理其实也不是那么烂
    ericgui
        8
    ericgui  
    OP
       2019-06-21 12:46:30 +08:00
    @pmispig 这正是我觉得 rust 不错的一个重要原因。。。。。
    abel1989
        9
    abel1989  
       2019-06-21 12:55:35 +08:00
    go mod 了解一下
    GlobalNPC
        10
    GlobalNPC  
       2019-06-21 12:56:40 +08:00
    为什么是 62%?
    ericgui
        11
    ericgui  
    OP
       2019-06-21 13:08:11 +08:00
    @infun 一个梗
    impl
        12
    impl  
       2019-06-21 13:24:25 +08:00 via Android
    轻装上阵:go
    全副武装:rust
    loading
        13
    loading  
       2019-06-21 13:32:40 +08:00 via Android
    go 感觉还行,rust 没接触,现在我最反感 npm 了。
    liulaomo
        14
    liulaomo  
       2019-06-21 13:36:58 +08:00   1
    转发:

    If you want to make love wearing nothing, choose C.

    If you want to make love wearing a condom, choose Go.

    If you want to make love wearing a spacesuit, choose Rust.
    dodo2012
        15
    dodo2012  
       2019-06-21 13:38:29 +08:00
    rust 在借用和所有权上就要搞晕一群人,入门太陡峭,昨天还看 reddit 上有个说又试着学习了一次,感觉还是太难了。go 的话感觉拿起来很快就上手了。
    MeteorCat
        16
    MeteorCat  
       2019-06-21 14:12:52 +08:00 via Android
    如果没深入学 c/c++,可以考虑用学习 rust ;我以前用过一点写自己个人的 api,但是想搞个全局单例感觉处处被制约
    rb6221
        17
    rb6221  
       2019-06-21 14:17:57 +08:00 via iPhone   1
    挺喜欢 rust 的气质 但是感觉用途范围好像不太广,而且国内资料挺少的(相对而言)。
    yemoluo
        18
    yemoluo  
       2019-06-21 14:21:42 +08:00
    最近正在努力做 rust 的笔记,差不多快完成了

    那个,rust 语言国内肯定比不上 go , 这个,没啥好说的。
    trait
        19
    trait  
       2019-06-21 15:33:19 +08:00   1
    rust go 没有可比性
    语言特性上来说 rust 更接近 haskell 函数式家族,go rob 都说了给刚毕业的 C/C++写不利索的学生准备的,短平快
    trait
        20
    trait  
       2019-06-21 15:35:12 +08:00
    @pmispig ???? rust 跟他有啥关系
    Phariel
        21
    Phariel  
       2019-06-21 15:36:49 +08:00
    golang 要什么包管理 直接 go get from github 一把梭!!!
    hst001
        22
    hst001  
       2019-06-21 15:55:31 +08:00
    脱离实际作比较就是耍流氓
    SuperMild
        23
    SuperMild  
       2019-06-21 16:33:05 +08:00
    Rust 确实很优秀,上手会有点难度(毕竟对标 C++)但习惯了也没什么。

    Rust 与 Go 的一个重大区别是 Rust 没有 GC,写程序的时候必须处理内存回收问题(虽然有一套特殊的、优秀的方案,但还是要处理),在很多不要求那么高性能的情况下,通常你不会乐意在这方向耗费精力。

    Go 可能不强大(没泛型)、不优雅( if err != nil、太少语法糖等 ),但 Go 在 “易学易用”与“高性能” 之间找到了一个绝佳的平衡点,很多情况下 Go 就是恰好够用。
    Cellei
        24
    Cellei  
       2019-06-21 17:48:41 +08:00
    有了 GC 不应该是一种进步吗?为什么还会出现 Rust 这种新语言? 是不是倒退
    有了 GC 应该继续优化 GC 就好了
    Mohanson
        25
    Mohanson  
       2019-06-21 17:49:56 +08:00 via Android   9
    rust 包管理抢注包名情况很严重,几乎所有加密算法的名字都被一个组织抢注了,但恶心的是他们许多库根本没提交代码。我去年实现一个算法库,就发现被人占了位置但 tm 没代码,最后只好加个前缀解决。等你开始成为一个贡献者而不是索取 者,就知道中心化包管理有多恶心了。
    airdrop
        26
    airdrop  
       2019-06-21 17:53:01 +08:00
    看应用场景吧,很多区块链项目就是用 Rust 写的,包括最近很火的 Facebook libra 项目
    xxiu
        27
    xxiu  
       2019-06-21 17:59:26 +08:00
    @Mohanson
    我理解的中心化的包都应该有一个拥有者前缀才行,要不然完全是乱来。
    super119
        28
    super119  
       2019-06-21 18:06:34 +08:00 via Android
    Rust 编译通过代码就能 run 的很好,这种感觉太棒了!
    zjsxwc
        29
    zjsxwc  
       2019-06-21 18:06:49 +08:00 via Android
    一句话,用 rust 之前要现有 c++经验,你才会真正会用 rust
    ech0x
        30
    ech0x  
       2019-06-21 18:09:53 +08:00
    russian
        31
    russian  
       2019-06-21 18:21:52 +08:00
    c++快上 module 了
    realkenshinji
        32
    realkenshinji  
       2019-06-21 18:33:30 +08:00 via iPhone
    @pmispig 张口就来系列...
    trait
        33
    trait  
       2019-06-21 18:35:15 +08:00 via iPhone
    @Cellei go 才叫倒退,无视这么多年的语言研究成果,残缺不全的设计还嘴硬简洁,1.2 才有所改变
    blless
        34
    blless  
       2019-06-21 19:43:19 +08:00 via Android
    @trait 能不能问问具体是啥倒退,真想知道。虽然网上喷 go 的很多,反正用起来也觉得没啥问题。
    mengzhuo
        35
    mengzhuo  
       2019-06-21 19:54:11 +08:00   1
    @blless 世上只有两种语言……一种被人喷
    Sparetire
        36
    Sparetire  
       2019-06-21 20:19:58 +08:00 via Android
    @mengzhuo
    总是有人喜欢说,世界上只有两种语言,然而他们却从不告诉你为什么只有两种,为什么不是三种四种
    简短和押韵的语句,总是容易使人放弃思考然后还觉得很有道理
    FireCat
        37
    FireCat  
       2019-06-21 20:23:01 +08:00
    不要过于纠结编程语言本身的好坏,要关注系统架构本身。
    blless
        38
    blless  
       2019-06-21 20:26:05 +08:00 via Android
    @mengzhuo 请问啥语言没被喷过,
    polebug
        39
    polebug  
       2019-06-21 20:51:12 +08:00
    真是不习惯 rust 那种风格 没事写小玩具还行 让我天天开发写这玩意 可能要命了
    minami
        40
    minami  
       2019-06-21 21:13:56 +08:00
    @liulaomo #14 If you don't need make love, choose C++ (逃~
    mengzhuo
        41
    mengzhuo  
       2019-06-21 21:25:01 +08:00 via iPhone
    @Sparetire 布尔值哪来第三种情况。
    mengzhuo
        42
    mengzhuo  
       2019-06-21 21:26:51 +08:00 via iPhone
    @blless 这里有个幸存者偏差。
    useben
        43
    useben  
       2019-06-21 21:28:06 +08:00
    @trait
    现在都要到 2.0 了,你还在说 1.2。。。。
    trait
        44
    trait  
       2019-06-21 21:58:48 +08:00 via iPhone
    @useben 语体教??
    binux
        45
    binux  
       2019-06-21 22:03:43 +08:00 via iPhone
    @blless 没人知道 /用的语言
    Sparetire
        46
    Sparetire  
       2019-06-21 22:17:18 +08:00
    @mengzhuo 如果是布尔值, 那意味着只想讨论有没有人喷咯, 而不想讨论有没有人用了, 如果觉得这样在一个维度讨论也有意义的话, 那的确可以是布尔值
    releaseme
        47
    releaseme  
       2019-06-21 22:20:45 +08:00
    @Cellei 自动 GC 只是一种取舍权衡,在性能上讲,自动 GC 的语言一般会被手动 GC 的语言吊起来打,也就是说性能来讲 go / java / swift 这些是属于一个梯队的,Rust / C++ / C 属于一个梯队,也并不是像 gopher 吹的那样 go 能媲美 c 的性能。等什么时候自动 GC 性能能超过或者跟手动 GC 性能差不多的时候,我再来入 Golang 神教。
    infra
        48
    infra  
       2019-06-21 22:41:27 +08:00
    Rust 还是蛮有生机的,比如渲染 SVG 的库 librsvg2 已用 Rust 重写,
    目前 Debian 中有超过 500 个来自 Rust 生态的软件包,约占 4 % 参考: https://www.debian.cn/archives/3149
    ericgui
        49
    ericgui  
    OP
       2019-06-21 23:21:54 +08:00
    @FireCat 这个有道理 谢谢
    noqwerty
        50
    noqwerty  
       2019-06-21 23:23:33 +08:00 via Android
    看你要做什么啊,我写点简单的 API 用 golang 感觉很舒服,go mod 比之前的包管理成熟多了
    midasplus
        51
    midasplus  
       2019-06-21 23:50:47 +08:00 via Android
    认识的几个 c++水平非常强的大佬都对 rust 非常有兴趣
    Buffer2Disk
        52
    Buffer2Disk  
       2019-06-22 00:19:50 +08:00
    从 java 开始学习 go,最近在研究,被 go 这个包管理给震惊了,茫然不知所措怎么搞版本管理的。。。
    听说新版本搞了个 mod,还没用上。。。。
    ericgui
        53
    ericgui  
    OP
       2019-06-22 00:36:44 +08:00
    @Buffer2Disk 我其实还被它那个 src bin 什么的搞晕了。为什么 go get 的包不在本项目目录,搞得晕死了。我是写 php 和 js 的,这依赖不就是在项目下面某个目录嘛,比如 vendors,比如 node_modules,搞得很晕。
    leopku
        54
    leopku  
       2019-06-22 02:02:05 +08:00 via iPhone
    @Buffer2Disk 不用 mod,用 dep 也是非常溜,何来无处下手?
    wangxiaoaer
        55
    wangxiaoaer  
       2019-06-22 06:18:35 +08:00 via Android
    @Mohanson Maven 表示你说的都是啥玩意儿?
    hoyixi
        56
    hoyixi  
       2019-06-22 08:56:45 +08:00
    程序员早晚把自己坑死完事儿~
    tt0411
        57
    tt0411  
       2019-06-22 09:11:04 +08:00
    日常引战...

    PHP 才是最好的语言
    dixeran
        58
    dixeran  
       2019-06-22 09:17:57 +08:00 via Android
    如果搞嵌入式,选 C ( rust )还是 java ( go )?如果是做后端开发呢?
    这俩语言所在的层次都不一样,咋比较。
    halk
        59
    halk  
       2019-06-22 09:28:53 +08:00   1
    先看需求吧,Rust 抢占的是 cpp 的市场,go 抢占的更多的是 Java 的市场
    生态优先
    karllynn
        60
    karllynn  
       2019-06-22 09:53:10 +08:00
    go mod 以后,包管理已经不是痛点了,剩下主要就是泛型和错误处理。不过这两个没有也不是不能用,就是嗦一点。
    lowman
        61
    lowman  
       2019-06-22 10:53:09 +08:00
    python 了解一下, 把其他所有语言都当做垃圾的语言......大家能不能使用一句话, 让 v2 噪起来, come on baby.......
    fundebug
        62
    fundebug  
       2019-06-22 10:54:10 +08:00
    我咋感觉 Java 的包管理挺头疼的,发布 Maven 包麻烦地要死。。。
    vagranth
        63
    vagranth  
       2019-06-22 16:15:17 +08:00 via Android
    现在写 rust 总算开始有点感觉了,似乎跨过了第一个坎,暂时还没看到第二个坎
    FrankHB
        64
    FrankHB  
       2019-06-22 20:40:16 +08:00
    @Cellei 钦定甩不掉的全局 GC 还能标榜通用,鼓励写蠢代码,什么时候还变成进步了?
    明明是 resources-bound 还在乎 deterministic 的代码,敢依赖 GC 还不另外给文档写清楚所有权,结果基本上就是在要求审计代码逻辑的读者跨过程人肉 GC,简直 mdzz。
    还有你都占了到处能 GC 的大便宜了,居然还不提供 proper tail recursion,这是什么精神?
    FrankHB
        65
    FrankHB  
       2019-06-22 20:55:15 +08:00
    @releaseme 不对。合理的 GC 本质上是一种以响应和 /或空间使用效率换取吞吐量的优化。高性能的 GC 可以在特定领域上吊打一般人写的显式手动管理。
    只是很遗憾,现实是:
    1.大部分用户都没搞清楚 GC 应该在什么时候用,基本是怎么烂怎么来(……然后甩锅给最终用户调优)。
    2.GC 原则上做不到接近最优化的通用高性能。依赖全局 GC 而无法分清资源边界的代码在关键部分被局部的池吊打是很容易的事情因为前者实在不适合人类来优化,而机器又基本无法理解哪里能极端地优化。
    3.现实的 GC 的实现没有一个能接近在响应、吞吐量和资源使用自适应最优的。非要说的话,只有硬件才适合做这种事情。
    4.……众所周知,Go 的 GC 的实现质量在一众默认 GC 的语言的实现中是比较次等的。
    luozic
        66
    luozic  
       2019-06-22 23:09:09 +08:00 via iPhone
    聪明人多不多,多就上 rust,不多上个啥啊…
    v2exe2v
        67
    v2exe2v  
       2019-06-23 00:41:50 +08:00
    62 是什么梗
    ericgui
        68
    ericgui  
    OP
       2019-06-23 01:03:55 +08:00
    ericgui
        69
    ericgui  
    OP
       2019-06-23 01:04:39 +08:00
    @infun

    68 楼
    afuler
        70
    afuler  
       2019-06-23 01:28:43 +08:00 via Android
    facebook 的 libra 据说是用 rust 写的。
    ericgui
        71
    ericgui  
    OP
       2019-06-23 02:09:51 +08:00 via Android
    @afuler 不是据说
    mattx
        72
    mattx  
       2019-06-23 10:08:11 +08:00
    定位不同吧, go 其实是蚕食部分 java c++份额, rust 定位应该是更底层的(系统级), 效率更高, 可以取代 c++ c 这样的.
    Cellei
        73
    Cellei  
       2019-06-23 12:16:44 +08:00
    都在说 Rust 学习曲线陡峭 入门难,到底多难,一直没时间真正去学
    不过生态系统往往比语言本身重要
    kiddult
        74
    kiddult  
       2019-06-23 13:31:56 +08:00
    @Cellei 大概是你目前接触的最烧脑的一门语言,主要是所有权那个概念太反常识了,一般语言根本没有,最后新手写代码,大部分不是调试, 是编译编译不过。。。。。
    Comdex
        75
    Comdex  
       2019-06-23 13:35:16 +08:00 via Android
    有没大佬关注过 D 语言的,感觉啥功能都有,啥都能做
    ericgui
        76
    ericgui  
    OP
       2019-06-23 13:36:01 +08:00
    @Comdex 据说上海有个葡萄科技
    Cellei
        77
    Cellei  
       2019-06-23 16:46:58 +08:00
    @kiddult #74 所有权?这个听都没听过,编译都不过,很打击信心啊
    kiddult
        78
    kiddult  
       2019-06-23 22:42:51 +08:00
    @Cellei 就是上面 dodo2012 说的,借用 borrow,所以才说曲线太陡了,不然感觉干掉 golang 没啥问题,那群人也意识到了这问题,现在貌似比开始版本简化了不少
    reus
        79
    reus  
       2019-07-19 02:13:09 +08:00
    @kiddult 放屁,所有权的概念 C/C++就有,只不过没有做进语言。
    yamasa
        80
    yamasa  
       2019-10-29 17:33:19 +08:00
    @kiddult compile 通不过就对了,rust 就是巴不得所有错编译期能给你就给你了,也算是一种挺独特的设计哲学。
    yamasa
        81
    yamasa  
       2019-10-29 17:34:11 +08:00
    @Cellei compile 期不让你过和让你过然后上 productionboom,选哪个?
    firefox12
        82
    firefox12  
       2019-11-09 18:02:45 +08:00
    golang 可以开发 快速 而且变化很快的产品,可以接受 gc 带来的痛苦。更好的 java 而已。

    rust 可以开发变化不大,但是非常严谨的底层服务。 会 c++ 的学 rust 觉得终于把 c++ 这匹野马给驯服了,可惜再也不飘逸了,没有灵魂了。 编译解决了心智困难。 值得的!
    luojia65
        83
    luojia65  
       2020-01-12 16:16:24 +08:00
    @pmispig 这是个谣言,最初是轮子哥误传造成的,rust 和 js 的作者是两批人
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2586 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 04:53 PVG 12:53 LAX 21:53 JFK 00:53
    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