Rust 与「内存安全」无关

来源: 投稿
2024-06-03 10:22:00

虽然当下与内存安全相关的讨论围绕着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

展开阅读全文
点击引领话题📣 发布并加入讨论🔥
0 评论
1 收藏
分享
返回顶部
顶部