Rust 的安全神话?为何在关键系统如数据库、大模型代码中仍选 C++ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mightybruce
V2EX    Rust

Rust 的安全神话?为何在关键系统如数据库、大模型代码中仍选 C++

  •  1
     
  •   mightybrce 80 天前 3568 次点击
    这是一个创建于 80 天前的主题,其中的信息可能已经有所发展或是发生改变。
    “Rust 是一门很棒的语言,我真的很喜欢用它。然而,当涉及到数据库系统时,我仍然会选择 C++ 而不是 Rust 。”

    Moritz 首先承认了 Rust 的优点:理论上,Rust 通过其所有权系统和借用检查器,提供了远超 C++ 的默认安全性。这正是大家喜爱 Rust 的原因。

    但问题在于,像 CedarDB 这样的高性能数据库,其开发工作远不止是处理业务逻辑。它需要深入到硬件的毛细血管中,榨干每一滴性能。这意味着:

    使用大量底层的 CPU 特性。
    实现复杂的侵入式数据结构。
    进行带有验证的、乐观且激进的内存访问。
    在这些场景下,Rust 的安全检查反而成了“束缚”。为了完成任务,你必须使用 Rust 提供的“逃生舱口”unsafe 关键字。

    而 Moritz 抛出的重磅炸弹正在于此:

    “一旦你在 Rust 中写下 unsafe 代码,所有的赌注都将失效。在 unsafe 代码中,你遇到未定义行为( UB, Undefined Bahavior )的风险,甚至比在 C++ 中还要高。”
    https://x.com/iavins/status/1946598328533430702
    第 1 条附言    80 天前
    Moritz Sichert 是 CedarDB 的 CoFounder 和 CEO.
    26 条回复    2025-08-01 13:29:26 +08:00
    cosette
        1
    cosette  
       80 天前   2
    其实就是两件事情:1. rust 的所有权系统能否实现高效的代码; 2. rust 的所有权系统能否实现高效地开发,前者决定了 rust 的上限,后者则是当前的实践问题。

    unsafe 可以说是目前设计下的一种折中,在遇到比较复杂的情况和 rust 借用检查系统搏斗到神智不清时,不如借用其他语言已有的开发范式,由开发者自己的经验保证代码的安全性,unsafe 并非不安全,只是 rust 不给这些代码提供安全保证。

    至于 rust 的 UB 是否比 cpp 更多,没有看到实际的证据,说到底,如果开发者对 cpp 非常熟练,积累了大量的开发经验,对代码安全性非常有信心,那为什么要选择一个不那么熟悉,使用起来束手束脚的语言开发,找不到理由。

    ~~我选择使用中文回帖,我得说英语很棒,使用范围更广,可以和更多人无障碍交流,但我想更流畅、更准确的表达我的意思,我对中文非常熟悉,相比之下,使用英文更可能遇到词不达意,语法错误的情况~~
    Devifish
        2
    Devifish  
       80 天前 via iPhone
    数据库属于以年为单位积累的项目, 你现在看到的都是 10 年以上的项目。 rust 写的数据库项目性能超越旧 c++的也有 比如 tidb 的 tikv 、openobserver 、pgsql 的向量拓展 VectorChord 等等
    cybort
        3
    cybort  
       80 天前 via Android   1
    99%的问题都是招不到合适的人。
    allplay
        4
    allplay  
       80 天前 via Android
    自己人员能力不行,反而攻击语言不行。
    再告诉一个坏消息,操作系统内核也在锈化
    allplay
        5
    allplay  
       80 天前 via Android
    再翻译一下他的意思:我就要玩危险游戏,但 rust 不让我玩,我偏要玩,我说不要你 rust 管,最后玩脱了,嘿 rust 你还真不管,rust 你太垃圾了。
    allplay
        6
    allplay  
       80 天前 via Android
    类似的还有某些 Windows 玩家:Windows 的 defender 太垃圾了,每次运行程序都要杀毒,搞得系统很慢,网上找攻略魔改把它永久禁了!过了几天中毒了,哎 Windows 就是垃圾,太不安全了!
    mightybruce
        7
    mightybruce  
    OP
       80 天前   1
    @allplay 解释一下 rust 开发 Hector Martin 辞去 Linux 内核工作,rust 粉丝都这模样, 哈哈, 不用语言就攻击人员素质。
    jjx
        8
    jjx  
       80 天前
    rust 真邪门
    bigtan
        9
    bigtan  
       80 天前
    我觉得挺好用的,最近写一些小工具,只要没有历史包袱,都一律用 rust 。刚开始是觉得语法优点别扭,不过慢慢就好了。我把我之前写的一个带机器学习识别验证码的保证金监控中心的爬虫从 Python 移植到 rust ,非常好用。
    MIUIOS
        10
    MIUIOS  
       80 天前
    @allplay 当你下了一个自己需要的软件或者工具并且明确它已经不是病毒只是会被误报为病毒的情况下,defender 无声无息的把你文件删了,这个时候你会选择怎么做?
    Folder
        11
    Folder  
       80 天前
    说个可能有点跑题的. 最近在学 rust, 看 GitHub 上的 repo 和 rust 圣经.

    一个感受就是不少 ruster 抱着其他语言不安全或低性能 (总之就是有问题) 的前提, 给人一种优于其他语言一等的感觉, 或者说拥护 rust 的感觉, 这一点是我在其他语言上没有感受到过的.
    kapaseker
        12
    kapaseker  
       80 天前
    @Avafly Rust 的社区并不友好。但是 Rust 这门语言我个人觉得还是挺棒的。

    "抱着其他语言不安全或低性能",这个就看个人理解了,也和人员素质有关。
    如果大家都是入门的前提下:Rust 确实兼顾了性能和安全。就我知道的 Java 和 C++举例来看的话。
    Java 很容易写出内存泄露以及低效率的代码,尤其是 Java 的新特性 lambda 表达式,就是写起来快,但是用起来,一点都不快,还费内存。
    至于 C++,这东西真的只有高手才能玩的转。就那个指针很容易用着用着出问题。

    当然,文中提到的 unsafe rust 确实和 C++类似了,自己要顾及很多地方。
    PTLin
        13
    PTLin  
       80 天前   10
    周一喷 rust 傻逼,邪教社区,语法复杂,lifetime 傻逼,unsafe 治标不治本。
    周二喷 go 错误处理傻逼,泛型傻逼,Google 傻逼。
    周三喷 cpp 傻逼语法复杂东西多,cmake 傻逼,标准演进慢,委员会不行。
    周四喷 web 技术 js 傻逼,ts 更傻逼,html 和 css 就更不用说了,写代码像是糊屎。
    周五喷 flutter dart 傻逼,性能不行,issues 一堆不解决,快被 Google 放弃了。
    周六喷 c 傻逼,表达能力低,ub 多,bug 满天飞。
    周日吹 ai ,可以解决上面全部的问题。
    allplay
        14
    allplay  
       80 天前 via Android
    @totoro52
    并且明确它已经不是病毒
    你怎么明确的?自己脑子里面明确的?
    allplay
        15
    allplay  
       80 天前 via Android
    @totoro52 defender 删你东西显然不会无声无息,至少会弹出通知栏,并且发出声音,你管这叫无声无息,你是瞎还是聋
    MIUIOS
        16
    MIUIOS  
       80 天前
    @allplay 你从来没遇到过软件误报是吧? defender 连 go 写一个简单的通讯编译完他都给你当病毒秒杀了,这种情况你怎么破我就问你,不正面回答问题还开始人身攻击,还不如别回复我
    allplay
        17
    allplay  
       80 天前 via Android
    然后 defender 也没有真正删你东西,它给你 quarantine ,你可把它设为信任。
    MIUIOS
        18
    MIUIOS  
       80 天前
    @allplay 扯东扯西的,懒得鸟你, 正面问题都不回答,上来先打一套人身攻击组合拳,block 了 88
    allplay
        19
    allplay  
       80 天前 via Android
    @totoro52 只能说明你写的“简单”代码,在杀软看来,特征就像病毒
    minami
        20
    minami  
       80 天前
    @totoro52 #16 查了下确实有这个问题,https://github.com/microsoft/go/issues/1255 ,rust 粉丝的刻板印象又加深了
    minami
        21
    minami  
       80 天前
    在 servo 完工之前我是不会信粉丝的任何吹嘘的
    clemente
        22
    clemente  
       80 天前
    @allplay 目前还没有能完全驾驭这门语言的大型团队 包括世界 top10 以内 的外企
    进去看代码库都是一坨屎
    snylonue
        23
    snylonue  
       79 天前
    把 unsafe 当作赌注那我很怀疑他写的 cpp 代码的正确性

    UB 多有可能吧,写出 UB 的概率就未必了
    gigishy
        24
    gigishy  
       79 天前 via iPhone
    我觉得 rust 未来不一定有多大前途,未来要达到 rust 认为安全的大量规模数量的项目,大概率靠另一种/类编程语言来实现面向 ai (机器)使用而不是程序员(人)使用的。
    归根结底是安全与开发效率以及应用规模的“全都要”的问题。
    nebkad
        25
    nebkad  
       79 天前
    让一个 CEO 来讲 Rust unsafe 有多 unsafe, 而且还会有自称是程序员的人会 buy 这些说法.
    瞧瞧这个世界有多梦幻, 怪不得程序员总是被炒, 活该
    harmless
        26
    harmless  
       71 天前 via iPhone
    @allplay defender 误报就是很高,没什么可洗的,自己用 rust 写的 ups 掉电自动关机程序也被报毒
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2740 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 11:36 PVG 19:36 LAX 04:36 JFK 07:36
    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