Rust 与「内存安全」无关


虽然当下与内存安全相关的讨论围绕着Rust相对于C/C++/Zig/Go等语言的安全性展开,但Rust的主要目标是确保程序的正确性。

Rust并不仅仅是关于内存安全的。尽管人们普遍认为Rust是一种内存安全的语言,但实际上,Rust更注重的是语言的正确性,而不仅仅是内存安全。

在批评其他语言时,人们常常会以"你的程序出错了,那是你技术不行"作为回应,但实际上这与技术水平无关。

在形式语言理论 (formal language theory) 中,描述语法的规则必须与您想要包含在语言中的规则完全匹配。这意味着语法必须排除任何没有定义语义的单词,同时语言也不应该为任何无法由语法规则解析的程序指定语义。这种双向关系确保了语法与语言之间的一致性,使得对语法和语言之间的关系进行研究更加准确和可靠。

形式语言理论还提供了关于任何程序执行可以被抽象机器的一组语法规则表示的知识。就像您可以定义一组语法规则来解析带括号的算术表达式一样,您也可以定义一组语法规则来模拟C程序的执行。这种抽象机器的模型是C的基础,用于形式化规范语言中的行为。

C语言的一个弱点在于其存在未定义行为。当您对空指针进行解引用时,结果是未定义行为,这意味着程序的整个结果是不确定的,可能会导致各种不同的结果,包括崩溃、输出垃圾数据等。

这种未定义行为的存在是因为编译器必须假设代码中的某些部分是不可能发生的,以便正确编译。C编译器无法知道指针是否为NULL,是否指向有效内存,或者内存是否已初始化,因此它会假设指针是有效的、已初始化的非空指针。这种假设在大多数情况下是正确的,但写入无效内存可能会产生各种效果,而编译器并不关心这些效果。

总而言之,Rust强调的是正确性和语言的严谨性,而不仅仅是内存安全。通过形式语言理论的概念,可以更好地理解语言的语法和语义之间的关系,以及在编程语言设计中如何考虑程序的正确性和可靠性。

原文:https://o-santi.github.io/blog/rust-is-not-about-memory-safety/
相关讨论:https://news.ycombinator.com/item?id=40557277


相關推薦

2023-08-31

Prossimo 项目——用 Rust 重写 sudo 和 su,目标是提升它们在内存方面的安全性,确保它们不再遭受内存安全漏洞的困扰,并进一步增强 Linux 和开源生态系统的安全性。 sudo(substitute user [或 superuser] do),是一种计算机程序,

2023-05-05

Prossimo 项目正在用 Rust 重写 sudo 和 su,目标是提升它们在内存方面的安全性,确保它们不再遭受内存安全漏洞的困扰,并进一步增强 Linux 和开源生态系统的安全性。 据介绍,Prossimo 选择的软件会重点关注以下方面: 使用非

2023-03-12

上尝试了多种方法去优化这些项目的编译速度,但是社区内存在的方案都或多或少存在一些问题,在对这些问题总结后,他们理解到工程师对构建工具的诉求是: 良好的 Dev 启动性能 良好的 Build 性能 足够灵活的配置 生

2022-12-06

gle 在公告中表示,"在过去几年/几个 Android 系统版本中,内存安全漏洞的数量大幅下降"。 具体而言,2019 年至 2022 年期间,每年的内存安全漏洞数量从最初的 223 个下降到如今的 85 个。内存安全漏洞现在在 Android 系统总漏洞

2024-08-06

为了加快向内存安全编程语言的过渡,美国国防部高级研究计划局(DARPA)正在推动程序代码转换工具 TRACTOR 的开发。TRACTOR 是 TRanslating All C TO Rust 的缩写,该项目旨在开发机器学习工具,自动将旧 C 代码转换为 Rust 代码。 DARPA

2022-09-30

驱动程序。 谷歌使用 Rust 开发 Android 主要是为了解决内存安全问题,其工程师认为 Rust 可以利用编译时检查(确保对象的生命周期和所有权)和运行时检查(确保内存访问有效)来保证内存安全,并且 Rust 在实现这种安全性

2024-09-26

2022年,开发者们就这门语言进行了争论,一些人将Rust的内存安全特性称为对多年来内核工作的“侮辱”。9月初,Rust for Linux项目的一位维护者辞职,称对“非技术性的胡说八道”感到沮丧。这在技术圈引起了讨论。 Linus表示,

2023-01-12

员能够构建安全、可靠和高效的汽车软件。 作为一种内存安全语言,Rust 为软件的构建提供了一个安全的基础,再加上如今的汽车智能化程度也越来越高,内存安全漏洞的多少对汽车来说也至关重要。研究表明,内存安全漏洞

2023-02-03

在美国国家安全局 (NSA) 建议组织从 C/C++ 切换到内存安全语言 (如 C#、Rust、Go、Java、Ruby 或 Swift) 之后。C++ 之父 Bjarne Stroustrup 回应称,在他看来,NSA 报告中提到的“安全”编程语言在重要应用程序中实际上并不优于 C++。

2022-09-30

sson 认为,Rust 的主要优势包括:不必考虑 race conditions 和内存损坏,以及一般的内存安全。“你知道,从一开始就可以编写正确且健壮的代码。所以这基本上是我的第一印象,但现在我也开始意识到还有很多其他方面的优点”。

2022-10-18

,一个用 Rust 编写的备用 rootserver(用于动态系统范围的内存管理),以及对 seL4 的内核修改,可以回收 rootserver 使用的内存。 谷歌方面透露,在内部,KataOS 还能够动态加载和运行在 CAmkES 框架之外构建的第三方应用程序。但

2023-07-18

拥有丰富的类型系统和所有权模型,可通过在编译时检查内存访问和并发问题,保证内存安全和线程安全。Rust在构建并行和分布式应用程序时具有优良的并发性能,其高性能特性使Rust适用于编写高效的系统软件,如操作系统内

2022-09-15

执行董事 Bec Rumbul 称,经常有一种误解,即因为 Rust 确保内存安全,所以大家就误认为它就是 100% 安全的。但 Rust 和其他语言一样,也有可能受到攻击,因此需要采取积极的措施来保护和维持它和社区。“随着 Rust 基金会安全团

2022-09-17

过一万亿个请求,并可在只使用原本约三分之一的 CPU 和内存资源的情况下提供更好的性能。 随着 Cloudflare 规模的扩大,我们已经超越了 NGINX。多年来它一直很棒,但随着时间的推移,它在我们规模上的局限性意味着构建新