用 Rust 实现了一个双向链表之后,总结了一下,发现居然学到了这么多! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jasonkayzk
V2EX    Rust

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

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

    总结的原文大概 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 的好太多了。
    Yanickkk
        12
    Yanickkk  
       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     Solana     956 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 19:08 PVG 03:08 LAX 11:08 JFK 14:08
    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