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

第三次看 Rust,感觉又快要放弃了😥

  •  
  •   kernelpig · 2022-04-15 17:30:47 +08:00 · 6903 次点击
    这是一个创建于 954 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,各位是怎么坚持的,取点经,谢

    第 1 条附言  ·  2022-04-17 12:21:34 +08:00
    多谢各位老哥,简单总结下:
    - 驱动力,一定要用起来
    - 知识屏蔽,没必要一次搞懂所有特性,学以致用,官方的文档撸个两遍,用起来,在实践中成长
    - 同时找个合适的开源项目,深入学习下
    - 多了解生态,标准库,常用开源库,先做个 API 工程师,学会爬,然后再考虑走
    - 还是不行的话,就躺着,逼不得已的时候再学再用,可能更快😥😃
    65 条回复    2022-04-19 21:02:59 +08:00
    Borch
        1
    Borch  
       2022-04-15 17:31:39 +08:00   ❤️ 2
    cpp 、haskell 熟练不,熟练了问题就不大
    agagega
        2
    agagega  
       2022-04-15 17:32:29 +08:00   ❤️ 5
    有三件事这么多年来我重新开始过很多次:健身、看足球、学 Rust ,每次比上一次懂得多一点,习惯就好了😄
    kernelpig
        3
    kernelpig  
    OP
       2022-04-15 17:33:53 +08:00
    @Borch cpp 仅仅大学学过,工作基本没用过了,😭,那我要抽空再学 cpp 么?感觉 cpp 应该会好点吧
    kernelpig
        4
    kernelpig  
    OP
       2022-04-15 17:35:03 +08:00
    @agagega 佩服老哥,这次确实比上次能多看了不少,感觉学不完啊😥
    chloerei
        5
    chloerei  
       2022-04-15 17:37:42 +08:00   ❤️ 1
    如果你没有目的性的学一门语言,例如接下来要解决的问题需要这门语言,那是比较容易放弃。
    Borch
        6
    Borch  
       2022-04-15 17:42:31 +08:00
    @kernelpig rust 画饼要解决的内存安全线程安全问题就是针对 C 的,很多语义借鉴了 Cpp ,从汇编角度理解起来会容易得多(就是熟练 cpp ),类型系统是借鉴 haskell 等等,入门曲线确实很陡峭
    twing37
        7
    twing37  
       2022-04-15 17:42:56 +08:00
    看你要干什么
    Borch
        8
    Borch  
       2022-04-15 17:44:06 +08:00   ❤️ 1
    @kernelpig 如果再学学 llvm 编译器相关的知识就更好上手了
    kernelpig
        9
    kernelpig  
    OP
       2022-04-15 17:46:50 +08:00
    @chloerei 确实是,目前的活 node,go 就足够了,以前用 c ,所以想着再看看没有 gc 的语言,应该找个之前的小项目 Rust 来一遍,是不是能更坚持😃
    kernelpig
        10
    kernelpig  
    OP
       2022-04-15 17:49:52 +08:00
    @Borch 汇编相关的知识还好,就是感觉语言的类型,各种特性语法,太多了,每次以为看个差不多了,又翻到了 Rust 的一本书,越看越 emo 了😥
    kernelpig
        11
    kernelpig  
    OP
       2022-04-15 17:51:07 +08:00
    @twing37 是想多了解点,其实目前工作里其他语言足够用了
    darkengine
        12
    darkengine  
       2022-04-15 17:51:22 +08:00
    写了个 hello world ,关掉。。。
    wjx0912
        13
    wjx0912  
       2022-04-15 17:51:42 +08:00
    张汉东有个 rust 视频课,挺不错的
    twing37
        14
    twing37  
       2022-04-15 17:53:35 +08:00
    @kernelpig 呕吼,我是因为一个 state server, go 上的 gc 抖的太厉害才用 rust 的
    是挺陡峭的,我看了下 commit, 距离第一行代码正好一个月.
    kernelpig
        15
    kernelpig  
    OP
       2022-04-15 17:55:23 +08:00
    @darkengine 这个可以,我又学会了 N 门语言😥😃
    kernelpig
        16
    kernelpig  
    OP
       2022-04-15 17:55:52 +08:00
    @wjx0912 谢谢老哥,推荐,我晚上找找看下
    kernelpig
        17
    kernelpig  
    OP
       2022-04-15 17:56:34 +08:00
    @twing37 老哥,牛,一个月,太快了,我距离上次看已经有小半年了😥
    cfeitong
        18
    cfeitong  
       2022-04-15 17:58:48 +08:00
    不会 c/cpp ,学会写 rust 也没啥意义。你只知道怎么搞过编译,无法理解 rust 为什么要做这样的设计。
    twing37
        19
    twing37  
       2022-04-15 18:02:51 +08:00
    作为菜鸡.现在能感触就是围着 borrow 转.智能指针.
    可能有些库去适应,比如错误处理的方式.
    从 str string 里到生命周期也是转的迷糊.现在编译器说啥就是傻,已躺平
    还有一个感觉就是有些 api 总是套着,看源码才知道有些被移动的,内部却又使用了借用.
    这种情况被我归结为"灵活".
    以上~
    seakingii
        20
    seakingii  
       2022-04-15 18:03:01 +08:00
    @cfeitong 不是,会汇编的也可以啊
    gengchun
        21
    gengchun  
       2022-04-15 18:07:23 +08:00
    这里有没有人用 rust 玩 stm32 之类的?照理来说这样应该能学进去一点。
    zwpaper
        22
    zwpaper  
       2022-04-15 18:10:34 +08:00
    可以试试从项目中学习

    推荐个比较容易上手的 Rust 项目,项目代码写的 Rust 风格不是特别重,
    上手起来会简单点,上手了再去学习更 Rust 的风格就是了
    https://github.com/Peltoche/lsd

    利益相关:

    我是 Collaborator ,可以找一个 `Good First Issue` 或者 `Help Wanted` 的 Issue 开始,
    不知道如何下手的话,可以在 issue 下 @ 我,id 同 v2
    kernelpig
        23
    kernelpig  
    OP
       2022-04-15 18:22:05 +08:00
    @cfeitong c 应该了解点,工作用过 2 年,所以想学学 Rust😃
    kernelpig
        24
    kernelpig  
    OP
       2022-04-15 18:23:06 +08:00
    @Borch 这个一直了解的话,是不是要提前了解下编译原理啊😥
    kernelpig
        25
    kernelpig  
    OP
       2022-04-15 18:24:38 +08:00
    @twing37 向老哥学习,我也开始写点东西,不然越看越 emo 了😃
    kernelpig
        26
    kernelpig  
    OP
       2022-04-15 18:26:00 +08:00
    @gengchun 我们这边也是做边缘网关,所以想了解下 Rust
    kernelpig
        27
    kernelpig  
    OP
       2022-04-15 18:26:50 +08:00
    @zwpaper 嗯嗯好的谢谢老哥,我了解下先
    haoliang
        28
    haoliang  
       2022-04-15 18:35:21 +08:00   ❤️ 3
    楼主之前只是一个问题,看完一楼的回答,现在有三个问题了 ...
    kernelpig
        29
    kernelpig  
    OP
       2022-04-15 18:47:29 +08:00
    @haoliang 😥哈哈
    cassyfar
        30
    cassyfar  
       2022-04-15 19:00:58 +08:00
    别在语言上为难自己,都是工具。要用的时候再学就好了。
    tramm
        31
    tramm  
       2022-04-15 21:04:19 +08:00
    时隔大半年之后, 我又拾起 Rust 开始学习了.
    如果学的可以了, 就把我们物联网终端接入层重构一下, 学不成就拉倒 :P
    DonkeyBenjamin
        32
    DonkeyBenjamin  
       2022-04-15 21:39:38 +08:00
    为啥都觉得这东西难学?跟着 Tour of Rust 和 The Rust Programming Language, 然后自己动手写一下小项目,不就水到渠成
    irytu
        33
    irytu  
       2022-04-15 21:42:32 +08:00 via iPhone
    感觉还是得用它 官网上一些例子可以试试扩展一下 或者用它来刷各种体型 实现各种数据结构
    kernelpig
        34
    kernelpig  
    OP
       2022-04-15 21:57:23 +08:00
    @cassyfar 感谢老哥宽慰😘
    kernelpig
        35
    kernelpig  
    OP
       2022-04-15 21:58:02 +08:00
    @tramm 感觉我们俩好像啊,我也是物联网😃
    kernelpig
        36
    kernelpig  
    OP
       2022-04-15 22:00:13 +08:00
    @DonkeyBenjamin 可能还是我接触的少或者懒吧😥,只看书动手少,纸上得来终觉浅,绝知此事要躬行🦀🦀
    kernelpig
        37
    kernelpig  
    OP
       2022-04-15 22:01:29 +08:00
    @irytu 多谢老哥的建议🐯🐯💪💪
    memorycancel
        38
    memorycancel  
       2022-04-15 22:08:11 +08:00
    https://github.com/StudyRust

    Rust 学习互助会

    共享 Rust 学习资料

    每天用 Rust 刷一道 Leetcode
    mascteen
        39
    mascteen  
       2022-04-15 22:08:14 +08:00 via Android
    语言跟下棋一样,规则很简单,但是成为大师很难,任何语言无非三个方面:数据类型,组合方式,抽象化,后面就是不断练习
    whx
        40
    whx  
       2022-04-15 22:41:51 +08:00 via iPhone
    Rust 权威指南
    推荐楼主看下这本书,简明易懂。
    rust 有个学习曲线,光入门难度就比一般的语言高很多。
    如果真心想学,坚持下去,跨过那个曲线就好了。
    kernelpig
        41
    kernelpig  
    OP
       2022-04-16 01:34:56 +08:00
    @memorycancel 老哥🐂,已坚持这么长时间了,已⭐️
    kernelpig
        42
    kernelpig  
    OP
       2022-04-16 01:36:15 +08:00
    @mascteen 嗯嗯,谢老哥提点,还是让自己多动动手,加深理解
    kernelpig
        43
    kernelpig  
    OP
       2022-04-16 01:37:09 +08:00
    @whx 谢老哥推荐,这个也是第 3 遍看了,之前没坚持看完,希望这次能坚持看完吧😺
    xuanbg
        44
    xuanbg  
       2022-04-16 05:37:20 +08:00
    不用不学
    cdxjcl123
        45
    cdxjcl123  
       2022-04-16 10:34:39 +08:00 via Android   ❤️ 1
    https://course.rs
    可以看看这本 Rust 圣经,蛮不错的
    chuanqirenwu
        46
    chuanqirenwu  
       2022-04-16 10:46:25 +08:00
    我是和 C++ 一起学,这样很多概念更容易理解。
    northernlights0
        47
    northernlights0  
       2022-04-16 12:01:28 +08:00   ❤️ 1
    推荐一个斯坦福的公开课 CS110L : https://reberhardt.com/cs110l/spring-2021/

    附带循序渐进的练手作业,我正在看,感觉还不错
    sheep3
        48
    sheep3  
       2022-04-16 13:05:21 +08:00
    真的那么难学吗?
    不用的话还是别学了。
    我转 Rust 感觉一个月就全搞定了,线上的项目都重构完了,后来招人转 Rust ,基本都是很快就上手了。
    我感觉你的主要问题是没有目的,学了 Rust 干啥。
    kernelpig
        49
    kernelpig  
    OP
       2022-04-16 13:23:44 +08:00
    @xuanbg 👍🏻
    kernelpig
        50
    kernelpig  
    OP
       2022-04-16 13:25:53 +08:00
    @cdxjcl123 看到这本书高级部分很多地方看的有点迷惑😥
    kernelpig
        51
    kernelpig  
    OP
       2022-04-16 13:26:47 +08:00
    @chuanqirenwu 老哥稳啊,还一块学着 cpp
    kernelpig
        52
    kernelpig  
    OP
       2022-04-16 13:27:55 +08:00
    @northernlights0 谢老哥推荐,我看下🦀🦀
    kernelpig
        53
    kernelpig  
    OP
       2022-04-16 13:30:27 +08:00
    @sheep3 一下就点透了,没有目的的学可能就是为了缓解自身的焦虑感吧
    kios
        54
    kios  
       2022-04-16 14:35:06 +08:00
    我觉得还是需要有应用场景支撑才有持续学下去的动力。
    wobuhuicode
        55
    wobuhuicode  
       2022-04-16 15:44:02 +08:00 via iPhone
    把之前做过的项目用 rust 写一遍就好了
    TK4E
        56
    TK4E  
       2022-04-17 09:51:00 +08:00 via Android
    我一个只会写 c 的结构体的人都学会了
    rust 真的不是特别难

    实践后觉得 rust 里最多的麻烦就是

    1. 类型不匹配
    2. 生命过短
    3. 临时变量

    解决方法

    1. 如果编译器说 &str 和 String 不匹配
    那么想办法把 &str 变成 String 就好了
    2. 比如
    这段会报错
    ```rust
    let a = {
    let b = 5; // 这里
    }

    println!("{}",b);
    ```

    写成这样就可以了
    ```rust
    let b;
    let a = {
    b = 5; // 这里
    }

    println!("{}",b);
    ```
    3. 大概是这样 具体例子想不起来了
    ```rust
    v.xxx().yyy(); // 有时会出错

    let a = v.xxx();
    a.yyy(); // 需要这样
    ```

    其他的 trait/macro/泛型 不太常用 除非你是在写依赖库

    实践的例子
    https://github.com/TK4E/Learn/tree/main/Rust/Project
    abutter
        57
    abutter  
       2022-04-17 10:41:32 +08:00
    我也是在找 C 的 replacement ,现在基本是 go ,看过 rust ,在看 zig 。
    kernelpig
        58
    kernelpig  
    OP
       2022-04-17 12:08:47 +08:00 via Android
    @kios 是的,只看不动手还是掌握不了
    kernelpig
        59
    kernelpig  
    OP
       2022-04-17 12:10:02 +08:00 via Android
    @wobuhuicode 已开启,想明白了,没必要开始掌握所有特性,学 50%就可以动手了,在实践中逐步提高吧
    kernelpig
        60
    kernelpig  
    OP
       2022-04-17 12:11:37 +08:00 via Android
    @TK4E 嗯嗯是的,不考虑高级特性的话,还是容易接受的,主要是看高级特性看迷惑了,先动手实践吧,在实践中成长
    kernelpig
        61
    kernelpig  
    OP
       2022-04-17 12:12:23 +08:00 via Android
    @abutter 用 c 的转 go 确实快,很舒服😘
    timothyye
        62
    timothyye  
       2022-04-17 15:44:11 +08:00
    @northernlights0
    @cdxjcl123

    推荐的这两个资源都不错,感谢
    zglzy
        63
    zglzy  
       2022-04-17 16:54:38 +08:00 via Android
    也推荐一本教科书 :Rust in Action 然后就是动手做项目在实践中和 borrow checker 做斗争吧
    kernelpig
        64
    kernelpig  
    OP
       2022-04-19 21:02:24 +08:00 via Android
    @timothyye 👍🏻👍🏻👍🏻
    kernelpig
        65
    kernelpig  
    OP
       2022-04-19 21:02:59 +08:00 via Android
    @zglzy 感谢推荐!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5420 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:49 · PVG 13:49 · LAX 21:49 · JFK 00:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.