第三次看 Rust,感觉又快要放弃了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
kernelpig
V2EX    程序员

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

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

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

    第 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 等等,入门曲线确实很陡峭
    /td>
    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 之类的?照理来说这样应该能学进去一点。
    ikw
        22
    ikw  
       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
    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 一下就点透了,没有目的的学可能就是为了缓解自身的焦虑感吧
    devtk
        54
    devtk  
       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
    kernelpig
        65
    kernelpig  
    OP
       2022-04-19 21:02:59 +08:00 via Android
    @zglzy 感谢推荐!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1578 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 16:28 PVG 00:28 LAX 09:28 JFK 12:28
    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