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

11 天前
 mightybruce
“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
2361 次点击
所在节点    Rust
26 条回复
cosette
11 天前
其实就是两件事情:1. rust 的所有权系统能否实现高效的代码; 2. rust 的所有权系统能否实现高效地开发,前者决定了 rust 的上限,后者则是当前的实践问题。

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

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

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

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

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

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

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

https://ex.noerr.eu.org/t/1146992

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

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

© 2021 V2EX