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

感觉 rust 门槛太高了

  •  2
     
  •   yaott2020 · 2023-07-24 07:56:50 +08:00 via Android · 9530 次点击
    这是一个创建于 472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    都说 rust 难学,我自己跟着 b 站入门教程学完之后觉得 rust 比想象中的更难以上手。学完基础语法之后依旧不太会写,总是写 bug 。rust 语法略微有点怪异,并且限制太多,我如果按照以前写其他语言(例如 go )的习惯是不行的。各位 v 友们学过 rust 分享一波上手经验呗

    72 条回复    2023-09-29 06:49:23 +08:00
    eagleoflqj
        1
    eagleoflqj  
       2023-07-24 08:06:27 +08:00 via iPhone
    想学但还没时间学,对 rust 的了解仅限于它严格的所有权,盲猜 C++程序员是最容易上手的。要不要参考下隔壁贴子 https://v2ex.com/t/959034
    Jirajine
        2
    Jirajine  
       2023-07-24 08:11:01 +08:00   ❤️ 4
    rust 写起来非常爽,在你碰到 async 之前。
    yaott2020
        3
    yaott2020  
    OP
       2023-07-24 08:11:58 +08:00 via Android
    @eagleoflqj 我遇到的所有问题都是与所有权相关,copilot 我也有,还没来得及开
    snylonue
        4
    snylonue  
       2023-07-24 08:15:48 +08:00   ❤️ 1
    多看看官方教程,借助 RA ,clippy 和编译器的提示
    Alias4ck
        5
    Alias4ck  
       2023-07-24 08:20:15 +08:00
    dangyuluo
        6
    dangyuluo  
       2023-07-24 08:52:02 +08:00   ❤️ 1
    对 C++比较熟悉的话,学 rust 只是个语法问题,还有就是记住那么多标准库
    Chaidu
        7
    Chaidu  
       2023-07-24 09:04:08 +08:00
    兄弟,自信点,把“感觉”去掉
    dvorakchen1
        8
    dvorakchen1  
       2023-07-24 09:13:02 +08:00
    我要澄清一下:楼主说的没错
    zzzsy
        9
    zzzsy  
       2023-07-24 09:16:40 +08:00
    来学学 haskell 🥱
    summerLast
        10
    summerLast  
       2023-07-24 09:16:49 +08:00
    学习曲线越过 各种智能指针后 就没很陡峭了
    LeegoYih
        11
    LeegoYih  
       2023-07-24 09:17:32 +08:00   ❤️ 1
    tk103331
        12
    tk103331  
       2023-07-24 09:18:23 +08:00   ❤️ 8
    入过好几次门了
    ns09005264
        13
    ns09005264  
       2023-07-24 09:22:19 +08:00
    所有权这点还好,生命周期真的好难,感觉自己理解了,但实际还是不会用。
    虽然难,但是用 rust 写东西的话,还是比较爽的,写完后,成功运行的概率非常高。
    stanjia
        14
    stanjia  
       2023-07-24 09:23:42 +08:00
    @tk103331 路过好几次门,都没敲门进去看看
    flytsuki
        15
    flytsuki  
       2023-07-24 09:27:22 +08:00
    入过一次门,然后忘了。。。
    raycool
        16
    raycool  
       2023-07-24 09:28:41 +08:00   ❤️ 1
    从入门到再次入门。
    tedzhou1221
        17
    tedzhou1221  
       2023-07-24 09:34:56 +08:00
    一开始我看完官方教程,感觉还好。但当我看了张汉东老师在极客时间上的教学视频后,已经又不会了
    yaott2020
        18
    yaott2020  
    OP
       2023-07-24 09:51:06 +08:00 via Android   ❤️ 1
    目前用 clion ,配合 cargo check 和 copilot ,感觉好一点了
    laqow
        19
    laqow  
       2023-07-24 10:10:32 +08:00
    rust 有啥好的讲基础语法数据结构和其他语言区别的纸质书吗?书店只有一两本翻译的,排版惨不忍睹
    largezhou
        20
    largezhou  
       2023-07-24 10:17:46 +08:00
    https://course.rs/about-book.html
    这个感觉还可以,还有习题和答案
    wupeaking
        21
    wupeaking  
       2023-07-24 10:18:35 +08:00
    我大概尝试进了 3 次才入了门,(第 3 次能够在没任何指导下用另外的方法手写链表我觉得我算入门了) 。 感觉要把大部分 rust 的内容过一遍才能写出一个简单的小项目, 而且要学会适应 rust 的编译器错误。 问题是能用 rust 在工作中使用的机会蛮少的, 到现在我也就是把自己工作中已经用其他语言写的几个项目用 rust 再实现一遍。 然后过段时间不使用又忘记了。
    fioncat
        22
    fioncat  
       2023-07-24 10:18:40 +08:00
    学过 c++还是很好上手。你就把它当成编译器强制你用智能指针。
    miniliuke
        23
    miniliuke  
       2023-07-24 10:36:48 +08:00
    感觉挺好的,感觉编译器就是个代码漏洞扫描引擎......纠正了许多以前不注意的问题
    fakeshadow
        24
    fakeshadow  
       2023-07-24 10:38:20 +08:00
    建议同 c/cpp 对照学习,从 gc 语言入手 rust 很容易出现不知所以然的现象。
    Rooger
        25
    Rooger  
       2023-07-24 10:38:57 +08:00
    看过入门的书籍两遍,第一遍比较快,第二遍比较详细的看了,代码也尝试手动编译运行了。

    在 B 站看了软件工艺师的入门课程,基本上也是跟着《软件程序设计语言》走下来的。

    在极客时间上跟着陈天的《 Rust 编程第一课》仔细的学了下来。但是重点,千万千万不要买 XXX 的 Rust 实战课,请避坑。

    然而最终我放弃了在团队中去推 Rust 的想法,毕竟门槛实在太高了,为了所谓的稳定和性能,在要求效率的游戏行为,其实不是特别划算。好多项目上线没有几个月就下线了,性能、稳定以及安全根本没有体现出来。

    所以,有些行业不需要 Rust 就能做的很好了。当然,如果只是为了学习,还是比较推荐的,Rust 的许多设计还是很棒的。
    vincent7245
        26
    vincent7245  
       2023-07-24 10:42:44 +08:00
    不知道 OP 有没有 C/C++ 的基础,如果真心想在编程语言下功夫的话,先把 C++ 弄明白,再看其他编程语言就都是弟弟了
    des
        27
    des  
       2023-07-24 10:46:24 +08:00
    @Jirajine 先全用 clone 顶着,等后面上手了之后再来优化
    sojingle
        28
    sojingle  
       2023-07-24 10:51:49 +08:00
    刚上来被编译器教育是很正常的,能不能学会只在于能不能坚持下去
    roundgis
        29
    roundgis  
       2023-07-24 10:58:01 +08:00 via Android
    @Rooger XXX 是誰?
    weiwenhao
        30
    weiwenhao  
       2023-07-24 10:58:19 +08:00
    从入门到放弃,确实比较难.
    ysn2233
        31
    ysn2233  
       2023-07-24 10:59:30 +08:00
    主要是工作中没机会用,一段时间不用就又忘记了
    EchoAI
        32
    EchoAI  
       2023-07-24 11:07:53 +08:00 via iPhone   ❤️ 1
    现在主开发语言使用的就是 Rust ,已经开发了好几个项目了,稳定运行中。后期很轻松,值得多入门几次
    snowstorm666
        33
    snowstorm666  
       2023-07-24 11:17:47 +08:00
    我觉得还是需要实际中用,如果实际没有使用机会,想要上手太难了,特别容易忘记。前期对我有效的建议是:
    1. 直接 copy 代码过来改
    2. 直接问 gpt 怎么写
    sadfQED2
        34
    sadfQED2  
       2023-07-24 11:20:22 +08:00 via Android
    我曾经也学过 rust ,学完没几天,卧槽,咋写的来着,忘了。

    这玩意入门难度简直上天了,和以往所有的语言思维方式都不一样,因此极其难入门
    fcfangcc
        35
    fcfangcc  
       2023-07-24 11:31:57 +08:00
    其实正常逻辑写起来还好,加上 ide 的联想和提示写起来挺爽。直到碰到了 trait + future + pin + send + 范型,一个参数类型定义十几行直接劝退
    Yc1992
        36
    Yc1992  
       2023-07-24 11:33:01 +08:00
    用了 rust 终于不再有空指针和段错误了
    zuston
        37
    zuston  
       2023-07-24 11:35:10 +08:00
    在一个开源项目中使用了 rust 编写,整体还是很舒服的。也是第一次用 rust ,边学边写
    sampeng
        38
    sampeng  
       2023-07-24 11:40:41 +08:00
    面向编译器编程即可。。。。不用担心写 bug 。编译器会鞭笞你
    XIVN1987
        39
    XIVN1987  
       2023-07-24 11:41:26 +08:00
    rust 这种超强约束的语言适合 AI (机器人)来写,,它们木的感情
    sampeng
        40
    sampeng  
       2023-07-24 11:41:26 +08:00
    @ns09005264 90%写也业务代码不需要用生命周期。只有写非常抽象和通用代码的时候才需要
    loveDiu4ever
        41
    loveDiu4ever  
       2023-07-24 11:52:58 +08:00
    入门两次了,我都不知道学完能干啥。
    x1abin
        42
    x1abin  
       2023-07-24 11:59:54 +08:00
    配合 Copilot 辅助工具,写起来就很爽了。
    xfun
        43
    xfun  
       2023-07-24 12:00:22 +08:00
    @princesswar721 真实了,学完真的不知道干啥
    pocarisweat
        44
    pocarisweat  
       2023-07-24 12:07:19 +08:00 via iPhone
    Rust 的所有权系统其实是把 C++那套最佳实践落实到语法上,然后融合了很多函数式语言( OCaml )的元素。

    很多人不理解 C++这类语言的痛点,或者在学校学过一点 C++但印象仅停留在 new 了东西要手动 delete ,学起 Rust 就会造成不知道为什么要这么设计的感觉。

    其实这种无 GC 的原生语言确实在很多地方都不是刚需。上次还有 V 友说用 C++写项目太老土了的。
    LiuJiang
        45
    LiuJiang  
       2023-07-24 12:42:08 +08:00
    楼主说的没错,hhh ,rust 确实难学,我看了文档和语法以及相关介绍,还是没懂能干啥
    OliverDD
        46
    OliverDD  
       2023-07-24 13:05:25 +08:00
    学倒还好,难在于保持使用...之前学完就立马给个开源项目提了 PR ,但平时工作接触不到,慢慢就生了...
    unnamedhao
        47
    unnamedhao  
       2023-07-24 13:40:17 +08:00
    入门不容易,放弃容易
    Mexion
        48
    Mexion  
       2023-07-24 13:48:47 +08:00
    之前学过一点,用不到,已经忘了
    wjx0912
        49
    wjx0912  
       2023-07-24 14:25:20 +08:00   ❤️ 1
    搬砖:包工头时不时抽你一鞭子
    写 rust:编译器时不时抽你一鞭子
    aloxaf
        50
    aloxaf  
       2023-07-24 17:09:38 +08:00
    @yaott2020 #3 所有权其实不算难,它的规则是很直观的,尤其是对于 C++ 程序员来说(
    觉得难,我认为由浅入深可以分为以下几个方面:
    1. 习惯这种思考方式,至少能够搞清一个简单变量的所有权。
    2. 掌握一些常用 API ,比如怎么从复合数据结构中转移一个值的所有权或者交换两个值。
    3. 理解某些复合数据结构中为什么不能直接转移所有权,比如 Vec<String> 中为啥用 v[0] 来直接转移所有权会报错。
    4. 闭包的所有权,啥时候用 move ,在循环中怎么 move ,怎么手动创建引用来避免 move (其实这更多的是生命周期问题了

    个人认为,Rust 只有异步和生命周期混合起来的时候,才最让人头大……
    mscorlib
        51
    mscorlib  
       2023-07-24 17:37:03 +08:00
    与 Rust 斗其乐无穷
    kljsandjb
        52
    kljsandjb  
       2023-07-24 19:05:04 +08:00 via Android
    @Jirajine 同感,asynchronous rust 真的挺变态的。。
    Jirajine
        53
    Jirajine  
       2023-07-24 19:44:41 +08:00
    @des 这不是 clone 的问题,在你不使用非常高级、复杂,generic 参数特别多的类型时( async 和基于 async 的框架就是在使用,并且抽象泄漏严重,使用它们你不得不关注内部细节),rust 一点都不困难,仅用 ide 的编译器错误提示可以减少大量其他语言开发时不断编译运行的试错次数。
    至于不想处理静态的引用生命周期,替代方法是用 Rc/Arc + clone 顶着,通常你想要一个非静态生命周期的引用不代表你想用 clone 。
    Jirajine
        54
    Jirajine  
       2023-07-24 19:47:51 +08:00
    @kljsandjb aysnc rust 太着急了,还没有设计好就急不可耐的稳定化,后面的库/语言改变只能不得不继续屎上雕花,这样下去迟早 rust 会成为第二个 cpp 一样的缝合怪。
    GeruzoniAnsasu
        55
    GeruzoniAnsasu  
       2023-07-24 20:02:45 +08:00
    @aloxaf 规则是很直观,但到达目标的路径一点也不直观。

    C++程序员(我): 哦,unique_ptr 嘛我懂了,那,怎么跨线程交换写入权呢
    zhuangzhuang1988
        56
    zhuangzhuang1988  
       2023-07-24 20:31:37 +08:00
    重复入门多次
    放弃。。
    hunk
        57
    hunk  
       2023-07-24 20:34:32 +08:00
    语法读懂是有些略难,但程序跑起来,特别是跨平台编译后跑的稳稳的,感觉贼爽。不用装那么些个依赖库,一个程序搞定。似乎又回到 C 的感觉。
    lsk569937453
        58
    lsk569937453  
       2023-07-24 20:58:50 +08:00
    vscode+analyzer 开发神器
    codeium(chatgpt):如果 github 的 copilot 用不起,用这个神器即可。
    异步运行时就用 tokio 。

    生命周期就是难。先把简单的了解以后就可以搞开发了。有了 chatgpt 后,学 rust 的难度可以说是指数性下降也不为过把。
    holulu
        59
    holulu  
       2023-07-24 21:50:22 +08:00
    感觉入门难,其实是把其他语言的习惯带过来了。因为 rust 很多东西的观念跟大部分语言都不一样。如果接触过的语言比较多,估计就没那么难了。因为编程语言能解决的问题和解决方式来来去去就那么几种。
    zcg007
        60
    zcg007  
       2023-07-24 22:25:08 +08:00 via Android
    推荐一下 vlang
    nkidgm
        61
    nkidgm  
       2023-07-24 22:28:08 +08:00
    哈哈,以前 C++经常被吐槽是世界上最难的编程语言。。。

    现在 rust 摘取桂冠了,不过听说 rust 上手后,写出的程序质量还真不错,就是学习周期很长很长。
    Perolong
        62
    Perolong  
       2023-07-24 23:19:46 +08:00 via Android
    打算先 c 写明白再去学 rust
    iwdmb
        63
    iwdmb  
       2023-07-25 03:54:49 +08:00
    确实入门了好多次 Rust
    到现在还没入门
    suyulingxm
        64
    suyulingxm  
       2023-07-25 09:09:31 +08:00
    rust 就像开飞机,先要熟悉各种规则,起飞了就不用操心了
    franklu
        65
    franklu  
       2023-07-25 09:52:54 +08:00
    @Jirajine 我感觉你的意思是 async 语法没问题,有问题的是 async 的实现,底层用了太多类型系统导致没做好,使用者没法无缝使用,而且很快就会碰到问题,而一碰到问题就要去看代码代码,是吧?
    Jirajine
        66
    Jirajine  
       2023-07-25 10:15:12 +08:00
    @franklu 不是说语法没问题,而是语义,或者是整体的设计,还没有完善就急着稳定化,以至于后面发现问题又不能 breaking ,就只能屎上雕花了。
    最典型的就是 async trait ,还没设计好之前,就不该把 async 稳定化。
    maotao456
        67
    maotao456  
       2023-07-25 10:27:12 +08:00
    @Jirajine async 的问题是啥? 初学者好奇。
    lynx
        68
    lynx  
       2023-07-25 10:37:15 +08:00
    学习 rust 最好还是拿实际的项目来练手比较好,我跟周围的工友都是参与线上的 rust 项目核心流程开发之后快速提升的。社区的一些练手项目只能让你熟悉 rust 的语法和规则,实际项目中会遇到更多的问题。
    另外现在 rust 的 async 虽然已经达到日常使用的水准了,但是 async fn in trait 没有稳定之前有些东西用起来会很别扭,新手暂时将这个当作固定规则来用就好了。
    Jirajine
        69
    Jirajine  
       2023-07-25 10:43:49 +08:00
    @maotao456 当你真的去用 async tust 写实际应用/库的时候遇到困难就知道了,那不是你的问题,而是 rust 的问题。
    async wg 列出了很多需要改进的问题 https://rust-lang.github.io/wg-async/
    这个博客 https://fasterthanli.me/ 有很多篇高质量文章帮助深入理解 async ,虽然文章质量非常高,但“需要深入理解才能实际使用”本身就说明问题了。
    berry10086
        70
    berry10086  
       2023-07-25 13:13:54 +08:00
    @Rooger 同感,Rust 实践课讲的云里雾里,是大雷
    isexdpac
        71
    isexdpac  
       2023-07-25 15:27:54 +08:00
    是很难,生命周期,所有权,智能指针等等..... 后面还有更难的异步 async
    zdustrong
        72
    zdustrong  
       2023-09-29 06:49:23 +08:00 via Android
    Rust 的所有权分为三种使用方法.
    1. 移动, 将所有的权交给其他方法, 不会归还. 对于基础类型(数字, 布尔值, &str, char),它是复制.
    2. 只读借用. 一次可以借个多个方法.
    3. 可读可写借用. 一次只能借给一个方法, 使用完自动归还.
    掌握了这三种用法, 无论是普通方法, 还是 async 都很容易.
    我的项目代码( https://github.com/zdu-strong/my-rust-project).
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:36 · PVG 04:36 · LAX 12:36 · JFK 15:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.