用 Rust 实现了一个双向链表之后,总结了一下,发现居然学到了这么多!

2022-02-27 00:07:28 +08:00
 jasonkayzk

总结的原文大概 2w 字,在这里分享一下:

6016 次点击
所在节点    Rust
32 条回复
duke807
2022-02-27 00:56:01 +08:00
人生苦短,我還是用 C 和 Python 吧

感覺用 unsafe rust 還不如用 C

感覺 95% 以上的人是無法精通 C 的,因爲要對底層硬件很熟悉,譬如中斷上下文、cache 、dma 、虛擬內存等等

爲了防止大多數不適合編程的人搞事情,所以才引入 rust 這樣諸多限制的語言,目的是降低編程門檻
否則用 C 把內存搞出問題,一般人根本就沒有能力排查問題

所以,做爲 C 程序員,如果你也跟風追捧 rust ,其實是爲了方便小白而給自己找麻煩
secondwtq
2022-02-27 01:23:34 +08:00
只要我够聪明我就可以手写机器码
leimao
2022-02-27 01:28:29 +08:00
我精通数十种语言的 hello world
ihciah
2022-02-27 01:33:33 +08:00
@duke807 再厉害的大佬也会犯错,并且很多是不注意导致的低级错误。所以用一定的机制来收敛可能导致内存错误的代码段是有用的,无论是对小白还是老手。
c 写出问题之后查错成本高,但对于生产环境来说错误本身导致的代价更大。所以能形式化证明代码没问题很重要,这样会降低很大的潜在成本。
thedrwu
2022-02-27 02:14:15 +08:00
@duke807 #1

再大牛写 C 也有疏忽的时候,不如编译器保障一些正确性。

况且和 C 比自带内存管理、自带 string 库和 test 库、自带 lsp 和 linter ,和 C++比又没有历史包袱,真香
thedrwu
2022-02-27 02:15:53 +08:00
每个 rust 程序员都会写链表的文章,就像每个 haskell 程序员都会写一篇 monad 的文章
duke807
2022-02-27 02:19:43 +08:00
@ihciah
沒錯,所以我說的是用 *unsafe* rust 還不如用 C

正如操作系統用宏內核還是微內核之爭
微內核派說要隔離錯誤,每個模塊都要隔離起來,反而增加了開銷和複雜度
而宏內核的 linux 系統,很多內核任務也是以內核線程來執行,某個線程出錯系統不一定會死掉
我的態度是,不要追求極端,linux 內核就是比較理想的折中選擇

生產環境,對於大多數人,即便用 c 也是在用戶空間,用戶空間本來就有保護,不同進程隔離開,問題可以縮小排查
爲了降低成本,用 python 、go 這樣更高階的語言開發更快,代價更小

綜上,我覺得 rust 就是一種極端的存在,不是我的菜
duke807
2022-02-27 02:23:36 +08:00
@duke807
而且,linux 很多設備驅動可以在用戶空間運行,已經非常安全
非要用 *unsafe* rust 開發內核,我是拒絕的
大多數人學 rust 不過是跟風而已
duke807
2022-02-27 02:26:48 +08:00
@thedrwu 你說的這些是好處沒錯,但是你沒說它的壞處,最大的壞處就是用起來相當折壽
hbdh5
2022-02-27 03:56:57 +08:00
文章写的还好,只是写了太多太初级的东西。都用 unsafe 了一般都会假设读者有一定的知识背景,写太多有点水文章的嫌疑。关于 subtyping 的部分用了太多像是"收缩,扩张,至少"之类的感觉不太合适的词汇,整个概念没有说清楚。从左右值的概念入手可能会比较好一些
yzbythesea
2022-02-27 07:35:43 +08:00
虽说是奇技淫巧,但是我还挺喜欢的。博文就应该有深度,比很多直接抄下 user manual ,贴个 example 的好太多了。
yannxia
2022-02-27 08:52:44 +08:00
@duke807 很多人是 high level 的程序员···搞硬件不是他们所擅长和期望的,Rust 也很方便做系统编程(和硬件不相关的),
jasonkayzk
2022-02-27 10:03:58 +08:00
@hbdh5 #10 的确是加了很多基础性的东西,因为考虑到还是有些人对 rust 不太了解(比如我自己也是懵懵懂懂吧);更多的是对自己学过的一些基础知识的理解和回顾!谢谢大佬给的建议啊!
jasonkayzk
2022-02-27 10:05:59 +08:00
@duke807 #1 不是每一个人都是 C 语言领域的专家,对于有些编程能力不强的人来说,rust 编译器提供的能力是非常有必要的!
jasonkayzk
2022-02-27 10:06:31 +08:00
@yzbythesea #11 谢谢夸奖!
yangbin9317
2022-02-27 10:18:39 +08:00
谢谢楼主,看完之后收获很大
jasonkayzk
2022-02-27 10:21:41 +08:00
@yangbin9317 #16 多谢夸奖,这也是我自己在学习 rust 时的一些总结,希望能对大家有帮助;❤️
yangbin9317
2022-02-27 12:17:30 +08:00
@jasonkayzk 你讲 Rust 实现链表,他非要说 C 有多么自由,是真能杠啊
leavic
2022-02-27 12:40:06 +08:00
@leimao 请用汇编来一下
hbdh5
2022-02-27 14:36:29 +08:00
@duke807 但凡你深入接触过 rust 社区你就会知道用 unsafe rust 的群体大多都是 library 的开发者,水平就算不说很高,对你说的那些所谓的底层有的是人比你懂得多。unsafe rust 的目的从来不是和 c 比,甚至也不是和 c++比,而是为上层的,高阶的 rust 提供一个可靠的,安全的抽象。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/836653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX