V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qdwang
V2EX  ›  程序员

Rust 最神奇的地方

  •  
  •   qdwang · 2021-04-02 15:19:04 +08:00 · 12390 次点击
    这是一个创建于 1363 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Rust 这个语言,最神奇的地方,我觉得是全网一边倒的正面评价。

    在任何地方搜索 Rust 语言,9 成的体验都是夸赞它的。

    stackoverflow 年度最佳语言,也好几年是 Rust 。

    生活经验告诉我一边倒的评价不太可信。

    所以请问一下,Rust 有没有缺点啊。。??

    68 条回复    2024-11-14 14:30:39 +08:00
    opiviqo
        1
    opiviqo  
       2021-04-02 15:24:19 +08:00   ❤️ 12
    php 天下第一
    zpfhbyx
        2
    zpfhbyx  
       2021-04-02 15:25:34 +08:00   ❤️ 1
    #1 伤害不大,侮辱性极强。
    keepeye
        3
    keepeye  
       2021-04-02 15:25:47 +08:00
    学习门槛高算不算缺点?
    DOLLOR
        4
    DOLLOR  
       2021-04-02 15:33:40 +08:00   ❤️ 1
    有缺点呀,粗看 Rust 的代码,那些杂乱的符号可能会吓倒一些人。
    也就是说,那些潜在的给负面评价的人,还没去学,早就被吓走了吧
    12101111
        5
    12101111  
       2021-04-02 15:36:27 +08:00   ❤️ 1
    缺功能
    学不会
    编译慢
    没有库
    Jooooooooo
        6
    Jooooooooo  
       2021-04-02 15:38:53 +08:00
    用的人太少了, 小圈子自嗨

    你搞成 java 这种规模再试试

    我发现 java 基本是语言鄙视链最底端 (明明这么好用
    BeautifulSoap
        7
    BeautifulSoap  
       2021-04-02 15:41:07 +08:00 via Android   ❤️ 4
    php,go,java 之类的,即便可能你并不喜欢,你也可能会为了工作为了钱去学,爱好和吃饭工具是两回事,自然抱怨的人不少

    而 rust 不一样啊。rust 难找工作,而且本身学习曲线陡峭,这种学了没法找工作还难学的语言,能花时间精力去学的都是真爱
    h82258652
        8
    h82258652  
       2021-04-02 15:44:24 +08:00
    学习门槛高
    真的能用的,达到生产标准的 GUI 库缺少
    然而体验确实爽啊,编译成功基本就不会跑飞
    代价就是用开发效率、编译速度来换安全性和性能的
    TypeError
        9
    TypeError  
       2021-04-02 15:44:25 +08:00
    门槛高是最大缺点,
    而且你搜下英文文章,批评不少

    https://theta.eu.org/2021/03/08/async-rust-2.html
    FightPig
        10
    FightPig  
       2021-04-02 15:46:25 +08:00
    缺点就是学习线很陡,再就是刚看时,各种'a 'b 啥的一堆吓人呢,然后久了觉得还挺香。
    liuxey
        11
    liuxey  
       2021-04-02 15:48:52 +08:00
    reddit 上已经把吹 Rust 定义为 zz 正确,个人写 Rust 感觉良好,但是协作开发要崩
    xieren58
        12
    xieren58  
       2021-04-02 15:52:15 +08:00
    用在嵌入式开发, 感觉比较爽.
    zjsxwc
        13
    zjsxwc  
       2021-04-02 16:10:15 +08:00
    各种套娃、
    各种 lifetime

    直接导致打开 rust 代码密密麻麻,看着 rust 代码头疼。
    saytesnake
        14
    saytesnake  
       2021-04-02 16:12:58 +08:00
    php 是__的语言
    hei1000
        15
    hei1000  
       2021-04-02 16:17:43 +08:00
    Rust 缺点:
    1. 学习曲线陡峭
    2. 编译时间长
    3. 编译过程比较消耗资源
    4. 生态还不是很完善
    XIVN1987
        16
    XIVN1987  
       2021-04-02 16:18:51 +08:00   ❤️ 1
    缺点就是适用面比较窄吧

    Rust 和 C++一样,都是追求所谓 zero cost abstraction

    在不追求 zero cost 的地方,大把的带 GC 语言可以用,,人家完全不用关心内存分配的问题,,易用度指数提升

    在 OS 内核、驱动程序这些底层领域,一般也不太追求 abstraction,用 C 就够了

    所以 Rust 只适合 C++适合的应用领域,,需要用 C++的可以考虑下 Rust,,不需要 C++的一般也不用考虑 Rust 了
    ghost024
        17
    ghost024  
       2021-04-02 16:45:30 +08:00
    要是不写 c/c++的话,其实学 rust 也没有使用场景。
    testratter
        18
    testratter  
       2021-04-02 16:53:14 +08:00   ❤️ 17
    有个形容其实很贴切:

    用 C 是不带套做爱。
    用 C++是吃避孕药做爱。
    用 Rust 是穿着宇航服做爱。
    namelosw
        19
    namelosw  
       2021-04-02 16:54:03 +08:00   ❤️ 4
    Rust trade-off 少,简单 vs 完整的时候总选完整,争议性小,所以能骂的点不多。这个方向最终的问题最多也就是相对难学,编译慢等等。

    Go 为了简单做了很多权衡,很多人不认同一些权衡,自然就会有争议。

    当然了,还有的语言连权衡都算不上,骂的人就更多了。
    qdwang
        20
    qdwang  
    OP
       2021-04-02 16:56:36 +08:00
    @12101111 谢谢,总结的很详细
    qdwang
        21
    qdwang  
    OP
       2021-04-02 16:58:11 +08:00
    @XIVN1987 谢谢,总结的很好
    qdwang
        22
    qdwang  
    OP
       2021-04-02 16:58:40 +08:00
    @testratter 太精辟了。。。
    qdwang
        23
    qdwang  
    OP
       2021-04-02 16:59:35 +08:00
    @namelosw 原来是这样,现在我明白了
    ychost
        24
    ychost  
       2021-04-02 17:12:31 +08:00
    小众语言,圈子窄所以很少有负面评价,用过这么多语言不得不说巨硬的 C# 是我心中最好的语言,对比 Java/Python/C/C++/Go/JS/VB/Kotlin/PHP
    Jirajine
        25
    Jirajine  
       2021-04-02 17:15:39 +08:00 via Android
    @testratter 我记得是写 C++的不需要做爱。

    @ychost 我觉得 F#更香,可惜支持程度比 C#差很多。
    Cloutain
        26
    Cloutain  
       2021-04-02 17:39:57 +08:00
    用过的语言不多,ASM/C/C++/C#/易语言 /Python,个人觉得 C#最爽,简直无以伦比
    ppphp
        27
    ppphp  
       2021-04-02 17:59:05 +08:00
    主要他缺点是跟 c++比的,缺点都不叫个缺点
    stephenyin
        28
    stephenyin  
       2021-04-02 18:50:55 +08:00
    @testratter #18 我一小处男完全不知道表达的啥意思。。。
    coderfox
        29
    coderfox  
       2021-04-02 19:04:59 +08:00   ❤️ 1
    Rust is modern C++,换句话说一般不用 C++实现的也不是特别适合 Rust 。
    SingeeKing
        30
    SingeeKing  
       2021-04-02 19:11:41 +08:00
    rust 的 stable/beta/nightly 就是摆设,稍微大点的项目就必须 nightly,很多 feature 只有 nightly 才能用
    dongcidaci
        31
    dongcidaci  
       2021-04-02 19:12:03 +08:00
    极客的玩具,当然很好玩就是了
    1more
        32
    1more  
       2021-04-02 19:49:43 +08:00
    零开销,安全高,如果用来写业务肯定还是当属 java 之类的,rust 更适合开发偏底层的或者服务组件,另外 linus 也在观望 rust
    nightwitch
        33
    nightwitch  
       2021-04-02 21:29:09 +08:00   ❤️ 6
    世界上只有两种语言:被人骂的语言和没人用的语言。
    现在你发现它不被人骂,所以它是什么情况你应该清楚了吧
    crclz
        34
    crclz  
       2021-04-02 21:39:13 +08:00
    首先是 rust vs 有 GC 语言。如果一个应用场景使用带 GC 语言(例如 java C# go )是普遍的解决方案,那么在这些场景下使用 rust 就是自找苦吃(选择了麻烦的抽象层级、选择了不好招人)

    所以要清楚 rust 对标的是啥,是 C++,而不是其他的那些语言。如果你的工作中用不到 C++(比如我),那么对于这类讨论的态度就是吃瓜就好。
    bequt
        35
    bequt  
       2021-04-02 21:42:18 +08:00
    未来感觉还是看好 go
    redeemer1001
        36
    redeemer1001  
       2021-04-02 21:52:40 +08:00
    @ychost #24 附议 C#真香
    honkki
        37
    honkki  
       2021-04-02 23:53:13 +08:00
    rust 的语法 emmm
    lqf96
        38
    lqf96  
       2021-04-03 07:13:51 +08:00 via iPhone
    @nightwitch 其实最近骂的人也多了,我觉得是好事…
    cabing
        39
    cabing  
       2021-04-03 08:52:05 +08:00
    @testratter 骚气
    jinsongzhao
        40
    jinsongzhao  
       2021-04-03 09:12:51 +08:00
    java 当年也是一边倒的夸赞, 第二年就冲上榜首
    xuanbg
        41
    xuanbg  
       2021-04-03 09:25:07 +08:00
    缺点什么的根本不重要,Java 缺点多了去了,每每被人吐槽、鄙视、嘲讽……但这又怎样,还不是用的飞起。

    Rust 全面好评,但就是用的人少。
    jinsongzhao
        42
    jinsongzhao  
       2021-04-03 09:33:17 +08:00
    impl
        43
    impl  
       2021-04-03 10:49:24 +08:00 via Android
    大神用 rust,凡人用 go 。
    opentrade
        44
    opentrade  
       2021-04-03 11:37:45 +08:00   ❤️ 2
    有啊,编译慢不就是最大的嘲点吗?没有常规意义上的继承,用组合实现会产生很多冗余代码,于是为了减少冗余,就得写宏,我个人是非常讨厌用宏,这种不伦不类天马行空的玩意,而且宏里面的语句都没法 fmt,被宏套着的代码也没法 fmt 。另外 Rust 的很多第三方 Crate 质量不高且疏于维护也是很大的嘲点。顺便安利一下我的 Rust 开源项目,https://github.com/rustdesk/rustdesk
    djoiwhud
        45
    djoiwhud  
       2021-04-03 11:57:49 +08:00 via Android   ❤️ 1
    我认为业界要的语言是不依赖运行时环境的 c#,也就是 c#纯编译版本。
    liulaomo
        46
    liulaomo  
       2021-04-03 13:58:52 +08:00
    俺只知道 Rust 没有白皮书。据说是因为怕写出来被骂比 C++白皮书还长。。。
    liulaomo
        47
    liulaomo  
       2021-04-03 14:01:11 +08:00
    还有据说(确实是据说)只有搞 Rust 核心编译器开发的几个人知道 Rust 的完整特性集,Rust 创始人都不清楚了。。。
    coderfox
        48
    coderfox  
       2021-04-03 17:48:06 +08:00
    @djoiwhud #45 C#作为一门有 GC 的语言,有运行时这件事情是逃不过去的,但是 .NET 5 已经实现了和 Golang 类似的不需要在目标机器上先安装运行时,也就是用单一二进制文件进行分发。
    PTLin
        49
    PTLin  
       2021-04-03 19:13:12 +08:00
    @liulaomo 那真不至于,我个人感觉 Rust 绝对比 CPP 好学点,当然这也是我入门了 Rust 之后才这么说的
    no1xsyzy
        50
    no1xsyzy  
       2021-04-03 21:01:06 +08:00
    王垠有吐槽过,“这不就是 blah blah”,排出一列我不认识的词……

    哦,可以为空和可以出错竟然是两种不同的东西?

    @djoiwhud 你说的应该是 AOT 编译。
    fakeshadow
        51
    fakeshadow  
       2021-04-04 02:21:27 +08:00
    会的人少,关注也少。喷 Rust 吸引不到多少流量。
    everettjf
        52
    everettjf  
       2021-04-04 12:12:20 +08:00 via iPhone
    缺点是难学
    b00tyhunt3r
        53
    b00tyhunt3r  
       2021-04-04 14:50:42 +08:00 via iPad
    @stephenyin
    ‘ @testratter #18 我一小处男完全不知道表达的啥意思。。。’
    C: 裸手撸管
    C++:带一副橡胶手套撸管
    Rust:操纵挖掘机铲斗给自己撸管
    binbinyouliiii
        54
    binbinyouliiii  
       2021-04-04 15:33:02 +08:00
    因为有喷语言习惯的人都学不会 Rust,没法下手
    GTim
        55
    GTim  
       2021-04-04 17:39:06 +08:00
    缺点就是夸的人真多,但是写各种教程的人真少
    ospider
        56
    ospider  
       2021-04-04 18:38:30 +08:00
    十年前小圈子里也是这么吹 Python/Ruby 的,那时候不也是小众语言么?语言最开始肯定都是爱好者在强推,不然怎么做得起来,然后才是大规模推广开之后有些人不得不写,各种吐槽也就多了。
    FrankHB
        57
    FrankHB  
       2021-04-05 11:54:47 +08:00
    体感辣鸡的地方种类跟大体 C++ 差不多,程度上差距不大,比如“难学”、编译慢。
    然鹅 C++ 辣鸡的地方多十倍以上,要感知到抹平差距(首先是要自觉不手贱),要求可比会用高得多了……
    至于都熟练到一定程度的八成就懒得评价了,因为工程上叫搭伙的半吊子 C++ 用户闭嘴还是需要花些力气的,而 Rust 很大一部分教育的活就交给编译器了。Rust 用起来虽然恶心一点,这方面毕竟省事。(而且 C++ 不管你功力多高,整清楚个包管理确实可能是要死要活的……)
    会上 SO 之类的除了 noob 大概很多是在苦于怎么让半吊子同伙闭嘴的层次上,所以好评如流也很正常。
    至于再往上的……严肃点说 Rust 比 C++ 更垃圾的地方主要是没有 spec,不过 SO 之类的用户大概确实不太计较这个。
    FrankHB
        58
    FrankHB  
       2021-04-05 12:01:59 +08:00
    @no1xsyzy 那个外行的就别提了。
    GC 语言小白就算了,很难想象一个有接触正经优化编译器的居然不学无术到理解不了 uniqueness alias 的意义。
    亏他老师还搞出来 call/1cc 。
    (虽然 substructurual logic 确实不是什么新鲜玩意儿,Rust 用这个的动机也不是这个。)
    ipwx
        59
    ipwx  
       2021-04-05 16:34:10 +08:00
    反正我对 C++ 挺满意的,对 Rust 暂时没兴趣学,自然没啥评论。
    longkas239
        60
    longkas239  
       2021-04-05 23:30:37 +08:00
    大神用 c++,大神说了没有垃圾回收没了乐趣
    augustheart
        61
    augustheart  
       2021-04-06 08:18:20 +08:00 via Android
    rust 的问题还是在于写底层比 c/c++繁琐,写上层只比 c/c++简单
    BubbleNoodle
        62
    BubbleNoodle  
       2021-04-06 09:52:03 +08:00
    @DOLLOR 经典的伯克森悖论.漂亮
    CBReno
        63
    CBReno  
       2021-04-06 10:49:16 +08:00
    @ychost 能说具体点嘛
    youyang
        64
    youyang  
       2021-04-06 15:21:40 +08:00
    FrankHB
        65
    FrankHB  
       2021-04-06 20:51:52 +08:00
    @longkas239 反了吧,没 GC 可以自己往里面实现一个当乐趣,有 GC 还能咋地,难道管 GC 调优当乐子?
    andytao
        66
    andytao  
       2021-04-06 21:06:26 +08:00
    @b00tyhunt3r @stephenyin @testratter 照你们这么说:
    Vala 是带着冈本 0.001 的套撸管
    FrankHB
        67
    FrankHB  
       2021-04-06 21:26:54 +08:00   ❤️ 2
    @TypeError 引的文章有一些事实错误。因为误导比较严重所以单独说。
    这篇文章和引用的其它一些链接没有分析清楚问题这个的来源,所以还有些(至少本应是)显而易见的错误。
    虽然异步编程支持这方面上确实有 specific to Rust 的特别欠揍的地方,但是所谓 function 的 colour,根本上其实来自 async 。
    文章认为 async/await 是一种相对于 Scheme 式的 CPS 抽象的进步,然而这是胡扯。Scheme 提供的是 first-class continuation,就是为了允许避免显式的 CPS 而能实现类似 CPS 的效果。
    所谓 smear it out into a bunch of closures 在这样的支持 first-class continuation 的情形下就是一种实现细节。
    想要异步代码干净,各种不同语言的设计思路都是允许用户写 direct style 的代码,然后让语言的实现自动翻译成 CPS 或者其它形式的显式异步表示形式。
    这种变换,即便照顾同步 /异步的混用,逻辑上本来只要求 call site 区分所谓的 await,不需要关心是否 async 。需要区分不同的可调用实体是不是 async 的,反而把实现细节给暴露出来了。
    要求用 asnyc 标注异步代码的主要原因是不愿意让运行时承担隐藏实现细节的责任,而改为强加到代码生成的机制上的偷懒,乃至于不惜牺牲接口上的一致抽象(所以有所谓的 colour 问题)。
    这和滥用类型系统类似,经常就是一种过度优化(虽然影响的实现远比类型检查更麻烦)。Rust 本来就很有滥用类型系统的嫌疑,这里更容易打架毫不出乎意料。
    至于 future/promise,是一种限制性的备胎而非 first-class continuation 或同等抽象能力的基础设施的替代。在语言没有能力提供健全的特性时,实现可以使用非公开的机制提供有限的 API 适用受限的场合。这可能提升特定有限场景下原语的实现质量,但也限制了通用性。
    joseph1994
        68
    joseph1994  
       41 天前
    说一万遍,编程语言就有两种:一种是人人骂的主流语言,另一种是没人骂的没市场的语言
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1181 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 18:16 · PVG 02:16 · LAX 10:16 · JFK 13:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.