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

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

  •  1
     
  •   jasonkayzk · 2022-02-27 00:07:28 +08:00 · 6386 次点击
    这是一个创建于 996 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    32 条回复    2022-06-13 22:51:14 +08:00
    duke807
        1
    duke807  
       2022-02-27 00:56:01 +08:00   ❤️ 5
    人生苦短,我還是用 C 和 Python 吧

    感覺用 unsafe rust 還不如用 C

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

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

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

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

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

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

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

    綜上,我覺得 rust 就是一種極端的存在,不是我的菜
    duke807
        8
    duke807  
       2022-02-27 02:23:36 +08:00
    @duke807
    而且,linux 很多設備驅動可以在用戶空間運行,已經非常安全
    非要用 *unsafe* rust 開發內核,我是拒絕的
    大多數人學 rust 不過是跟風而已
    duke807
        9
    duke807  
       2022-02-27 02:26:48 +08:00
    @thedrwu 你說的這些是好處沒錯,但是你沒說它的壞處,最大的壞處就是用起來相當折壽
    hbdh5
        10
    hbdh5  
       2022-02-27 03:56:57 +08:00   ❤️ 2
    文章写的还好,只是写了太多太初级的东西。都用 unsafe 了一般都会假设读者有一定的知识背景,写太多有点水文章的嫌疑。关于 subtyping 的部分用了太多像是"收缩,扩张,至少"之类的感觉不太合适的词汇,整个概念没有说清楚。从左右值的概念入手可能会比较好一些
    yzbythesea
        11
    yzbythesea  
       2022-02-27 07:35:43 +08:00   ❤️ 1
    虽说是奇技淫巧,但是我还挺喜欢的。博文就应该有深度,比很多直接抄下 user manual ,贴个 example 的好太多了。
    yannxia
        12
    yannxia  
       2022-02-27 08:52:44 +08:00
    @duke807 很多人是 high level 的程序员···搞硬件不是他们所擅长和期望的,Rust 也很方便做系统编程(和硬件不相关的),
    jasonkayzk
        13
    jasonkayzk  
    OP
       2022-02-27 10:03:58 +08:00
    @hbdh5 #10 的确是加了很多基础性的东西,因为考虑到还是有些人对 rust 不太了解(比如我自己也是懵懵懂懂吧);更多的是对自己学过的一些基础知识的理解和回顾!谢谢大佬给的建议啊!
    jasonkayzk
        14
    jasonkayzk  
    OP
       2022-02-27 10:05:59 +08:00
    @duke807 #1 不是每一个人都是 C 语言领域的专家,对于有些编程能力不强的人来说,rust 编译器提供的能力是非常有必要的!
    jasonkayzk
        15
    jasonkayzk  
    OP
       2022-02-27 10:06:31 +08:00
    @yzbythesea #11 谢谢夸奖!
    yangbin9317
        16
    yangbin9317  
       2022-02-27 10:18:39 +08:00 via iPhone
    谢谢楼主,看完之后收获很大
    jasonkayzk
        17
    jasonkayzk  
    OP
       2022-02-27 10:21:41 +08:00
    @yangbin9317 #16 多谢夸奖,这也是我自己在学习 rust 时的一些总结,希望能对大家有帮助;❤️
    yangbin9317
        18
    yangbin9317  
       2022-02-27 12:17:30 +08:00
    @jasonkayzk 你讲 Rust 实现链表,他非要说 C 有多么自由,是真能杠啊
    leavic
        19
    leavic  
       2022-02-27 12:40:06 +08:00
    @leimao 请用汇编来一下
    hbdh5
        20
    hbdh5  
       2022-02-27 14:36:29 +08:00
    @duke807 但凡你深入接触过 rust 社区你就会知道用 unsafe rust 的群体大多都是 library 的开发者,水平就算不说很高,对你说的那些所谓的底层有的是人比你懂得多。unsafe rust 的目的从来不是和 c 比,甚至也不是和 c++比,而是为上层的,高阶的 rust 提供一个可靠的,安全的抽象。
    duke807
        21
    duke807  
       2022-02-27 16:02:52 +08:00 via Android   ❤️ 1
    @hbdh5
    眾所週知 rust 社群主張一切都要用 rust 重寫
    rust 是偉大光明正確的,已經成為一種政治正確
    luckyrayyy
        22
    luckyrayyy  
       2022-02-27 16:13:05 +08:00   ❤️ 1
    rust 不太懂,但是楼主的博客好棒!应该还很年轻,技术就挺厉害了
    sagaxu
        23
    sagaxu  
       2022-02-27 16:17:03 +08:00 via Android
    C Is Not a Low-level Language
    Your computer is not a fast PDP-11.
    jasonkayzk
        24
    jasonkayzk  
    OP
       2022-02-27 17:47:22 +08:00
    @luckyrayyy #22 谢谢夸奖,博客都是一些学习的笔记总结而已,没什么创新…
    chuanqirenwu
        25
    chuanqirenwu  
       2022-02-27 20:04:55 +08:00
    感谢分享,等看完 the rust pl 好好研究一下这个例子。
    jasonkayzk
        26
    jasonkayzk  
    OP
       2022-02-27 23:02:42 +08:00
    @chuanqirenwu #25 hhh 、不客气
    Yain
        27
    Yain  
       2022-02-28 00:37:47 +08:00
    楼主也太强了吧,如何才做到博客更新频率那么高
    jasonkayzk
        28
    jasonkayzk  
    OP
       2022-02-28 09:12:53 +08:00
    @Yain #27 最近一个多月也就写了三篇…,这个频率不高吧;
    kxuanobj
        29
    kxuanobj  
       2022-03-03 10:31:27 +08:00
    @duke807 这个双向链表是为 safe Rust 提供一个链表实现,使 safe Rust 可以在 safe 的上下文上使用链表。
    这种情况下,显然不能用 C 实现链表,然后通过 ffi 给 safe Rust 来用。

    没有 unsafe Rust ,哪来的 safe Rust ?
    fpure
        30
    fpure  
       2022-03-07 16:42:47 +08:00
    不错,收藏起来慢慢看
    jasonkayzk
        31
    jasonkayzk  
    OP
       2022-03-07 21:50:14 +08:00
    @fpure #30 感谢支持❤️
    ecloud
        32
    ecloud  
       2022-06-13 22:51:14 +08:00
    @duke807 微内核最开始的出发点是跨硬件。那个时代可不像现在,光 RISC 就有 6-7 种,CISC 有 2 种常见的,另外还有一大堆 S/390,AS400 和 PDP 在活跃。微内核的想法就是靠一个 core 通吃,然后稍微修改一点外围就能杀全场。哪像现在就一个 X86 和 ARM 还算活跃,mips 和 ppc 基本就是半死,其余的几乎都躺尸了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3159 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 13:37 · PVG 21:37 · LAX 05:37 · JFK 08:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.