那些能坚持写 rust 的都是大神吧,能指教一下怎么坚持下来的吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lsk569937453
V2EX    Rust

那些能坚持写 rust 的都是大神吧,能指教一下怎么坚持下来的吗?

  •  
  •   lsk569937453 2022-04-16 22:26:38 +08:00 6668 次点击
    这是一个创建于 1276 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写其他的语言都挺有成就感的(java/golang/typescript),写完一个方法编译跑一下,基本没啥错误。就写 rust 真的难受,被编译器教做人,写一个方法磕磕绊绊,绝大多数时候就不能完整写完一个方法没错误的。 1.生命周期不说了,反正基本不可能流畅的写完,编译的时候编译器告诉你这里不对,你得用&/mut/& mut. 2.上面的是方法中的提示。数据结构就更操蛋了,泛型+static+生命周期+引用。导致我自己写出来的代码我都不理解什么意思。。。。 3.这已经是我第四次学 rust 了,从来没有感觉一种语言有这么难。。。真的是满满的挫败感。

    有没有主力开发语言是 rust 的老哥,讲讲学 rust 的经验。

    26 条回复    2022-06-15 01:43:11 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       2022-04-16 22:33:05 +08:00   3
    你没有用 C++的刚需,就没有用 Rust 的刚需。而如果需要用 C++压榨机器性能,那么用 Rust 通常只会更简单(至少不会更难)。
    westoy
        2
    westoy  
       2022-04-16 22:37:32 +08:00   2
    还是心态问题吧

    学其他几门觉得快+有成就感本质上还是基于第一门同类语言上踩了无数的坑啊, 但是可能你已经忘了

    你现在学 rust 的预期是勇猛激进的第 N 门语言, 但是这种要换脑子学的东西之前养成的惯性思维还有可能成为拖累, 这时候预期和实际悖离, 就会感觉非常累, 然后你又没有需求驱动
    subpo
        3
    subpo  
    PRO
       2022-04-16 22:57:12 +08:00
    哈哈哈,虽然也就看了一点点 RUST 写了一点 demo ,但是你痛苦的地方是我开心的地方诶
    aloxaf
        4
    aloxaf  
       2022-04-16 23:01:39 +08:00   1
    问一下,rust 该不会是楼主学的第一门手动管理内存的语言吧?
    IsmeOvo
        5
    IsmeOvo  
       2022-04-16 23:05:52 +08:00   3
    放宽心

    Compiler errors can be frustrating, but really they only mean your program isn’t safely doing what you want it to do yet; they do not mean that you’re not a good programmer! Experienced Rustaceans still get compiler errors.

    Source: https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html?highlight=rustaceans#variables-and-mutability
    mxT52CRuqR6o5
        6
    mxT52CRuqR6o5  
       2022-04-16 23:13:42 +08:00 via Android
    @aloxaf 看样子很可能是的,java/go/js 都是自带 gc 和 runtime 的,rust 相比思路就差很多
    greygoo
        7
    greygoo  
       2022-04-16 23:31:27 +08:00   1
    Rust 是需要你对电脑底层知识有了解,如果你不去思考一些底层的问题比如一个操作实际上对电脑内存做了什么,你是永远不会明白为什么需要生命周期,或是区分共享或可变引用。你缺少一些了解,自然会觉得难。这些东西通常在其他更高级的语言是被抽象化的,但抽象化意味着就有空间优化,你要去想想自己的应用是否需要这个交换。
    seakingii
        8
    seakingii  
       2022-04-16 23:33:47 +08:00
    把楼主关起来,电脑里只有 RUST 环境,和一本 RUST 书.什么网络啥的都没有,楼主就能学进去了...
    Borch
        9
    Borch  
       2022-04-16 23:35:17 +08:00
    @aloxaf 确实需要这么问下
    lengyuqu
        10
    lengyuqu  
       2022-04-16 23:44:29 +08:00
    你都写 java go ts 了,肯定不属于 rust 的目标用户,rust 目标用户是 c ,c++这类
    pengtdyd
        11
    pengtdyd  
       2022-04-16 23:56:19 +08:00
    rust 不是你想学就能学的,先学 C 吧
    t2jk4000
        12
    t2jk4000  
       2022-04-17 02:51:16 +08:00
    楼主得先会点 c ,学很多语言都绕不过去的

    至于编译错误么,编译器做的检查越多,运行的时候出问题的概率应该会更小,这是好事啊
    LeeReamond
        13
    LeeReamond  
       2022-04-17 03:16:52 +08:00
    个人体验上,你使用不良的设计,或者追求极限要求(比如就是不适用 string ,就要通篇&str ),那在 rust 里就容易吃瘪。反之则可以体会到 rust 相对于 c++的快感。往往越到底层奇技淫巧越少,实现也就是按部就班的实现。
    documentzhangx66
        14
    documentzhangx66  
       2022-04-17 03:53:44 +08:00
    拿食物举个例子:

    java/golang/typescript 这一堆,好比是你到处探店,对不同店的菜进行品尝,进行打分。这件事的门槛很低。

    但 C 语言、CPP 、Rust 甚至汇编,好比是你自己当厨子,从选食材、选厨具、选调料,然后一步一步进行料理,最后变成美食。

    虽然目的都是美食,但过程与思路完全不一样。

    楼主只是没当过厨子。你拿探店的思维,来自己做菜,当然不习惯。
    y1y1
        15
    y1y1  
       2022-04-17 14:36:20 +08:00
    先学 c/c++
    但你平时不写 c++,肯定没学 rust 的必要啊。。
    PTLin
        16
    PTLin  
       2022-04-17 14:50:49 +08:00
    给你推荐一本书,Programming Rust 现在出到了第二版,不过第二版只有英文,第一版有翻译叫 rust 程序设计。
    billzhuang
        17
    billzhuang  
       2022-04-17 23:47:57 +08:00
    @seakingii hhhh
    araaaa
        18
    araaaa  
       2022-04-18 09:19:46 +08:00 via iPhone
    所以我写起来全用 unsafe
    hatsuyuki
        19
    hatsuyuki  
       2022-04-18 10:02:19 +08:00
    @araaaa 在没必要的地方写 unsafe 岂不是浪费了编译器功能
    araaaa
        20
    araaaa  
       2022-04-18 10:16:28 +08:00
    @hatsuyuki #19 当然是有必要的地方,比如需要同时持有多个可变引用
    libook
        21
    libook  
       2022-04-18 14:01:15 +08:00
    心态要变一下,编译器不让你通过是在帮你避免一些风险,总比运行的时候出了问题再做一脸懵逼的 Debug 要好;而且 Rust 编译器的报错信息已经写得非常贴心了,只要静下心来认真看,大多问题都比较容易解决的。

    除此之外也要养成良好的代码习惯,Rust 非常灵活,所以对开发者要求很高,因为需要开发者在众多实现方式中选择最适合当前情况的方式,选错了往往就变成了技术债务。要是不想有这方面的负担可以用 Go 。

    用其他语言未必也有成就感,随便写写就能跑,除非你的成就感止步于可以运行,如果经过千辛万苦的修改最终让 Rust 写的程序可以编译通过,那岂不是更有成就感的一件事(自我 PUA )。

    实际上很多时候觉得用一个语言比较痛苦是因为自己对这个语言掌握不够娴熟。比如 Javascript 的弱类型被很多人诟病,甚至一些人宣布以后完全用 TS 来替代 JS ;但对于真正熟练掌握 JS 类型系统的人来说,脑子里完全可以精准预测代码执行后的结果,并且有多种手段可以避免出现问题。

    Rust 再怎么抽象,毕竟还是跟 C/C++一个层级的语言,需要对内存的工作原理以及 Rust 对内存的处理机制十分了解才可以明确知道如何运用各项语法特性。其实跟 C/C++比起来可能还降低了处理内存问题的负担,毕竟大多问题编译器就可以帮你检查出来。

    我自己也是学了三四遍,主要原因是平时用得少,容易忘。
    学的时候可以考虑做些笔记,形成一个自己的速查手册,特别是自己需要花一些功夫理解的概念,以及跟自己学过的其他语言的类似功能的对比和辨析,等用到需要复习的时候能帮你快速想起来就可以,就没必要再去一个字不差地看官方教程。
    drackzy
        22
    drackzy  
       2022-04-20 06:18:34 +08:00
    看 youtube 上 RustConf 视频,和推荐 JonGjengset 、Tom McGurl 的频道。
    一样之前做心智负担简单的语言,这次也准备试试 Rust 。
    kxuanobj
        23
    kxuanobj  
       2022-04-22 16:48:01 +08:00
    > ”导致我自己写出来的代码我都不理解什么意思“

    大概是这样吧:

    编译器报错变量不能 Send -> impl Send for XX{} -> 编译器报错 Send 是 unsafe -> unsafe imple Send for XX{} -> 编译通过-> 运行 -> 崩溃 -> Fk Rust!
    SaltyKitkat
        24
    SaltyKitkat  
       2022-04-24 00:16:50 +08:00
    @araaaa 嗅到了 ub 的味道(x

    这种需求一般 safe 就 RefCell ,unsafe 就用裸指针?
    araaaa
        25
    araaaa  
       2022-04-24 09:37:20 +08:00
    @SaltyKitkat #24 还有一个 UnsafeCell 这个也比较常用
    v23x
        26
    v23x  
       2022-06-15 01:43:11 +08:00
    rust 比起 c++ 感觉要简单一点啊...

    虽然 rust 的学习曲线也非常不友好就是了

    rust 的整体设计 说实话 感觉离优雅还好远....

    但是现在系统级的编程语言 也没有得选...

    起码 rust 和 c++比 闭起眼睛 各方面来说 都是肯定选 rust

    吊打 c++ 毫无问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     922 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 20:51 PVG 04:51 LAX 13:51 JFK 16:51
    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