感觉 rust 门槛太高了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yaott2020
V2EX    程序员

感觉 rust 门槛太高了

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

都说 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   1
https://course.rs/about-book.html
这个感觉还可以,还有习题和答案
wupeaking
    span class="no">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
入门不容易,放弃容易
Wanex
    48
Wanex  
   2023-07-24 13:48:47 +08:00
之前学过一点,用不到,已经忘了
datadump
    49
datadump  
   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     Solana     2693 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 27ms UTC 14:13 PVG 22:13 LAX 06:13 JFK 09:13
Do have faith in what you're doing.
ubao msn 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