【发布时间】:2015-04-14 13:28:45
【问题描述】:
我在某处读到,在具有指针功能的语言中,由于各种原因,编译器不可能在编译时完全确定所有指针是否正确使用和/或是否有效(引用活动对象),因为这基本上构成了解决停机问题。这并不奇怪,直观地说,因为在这种情况下,我们将能够在编译时推断程序的运行时行为,类似于 this related question 中所述。
但是,据我所知,Rust 语言要求指针检查完全在编译时完成(没有与指针相关的未定义行为,至少是“安全”指针,并且没有“无效指针”或“null指针”运行时异常)。
假设 Rust 编译器没有解决停机问题,那么谬误在哪里?
- 是否指针检查并未完全在编译时完成, 与 C 中的原始指针相比,Rust 的智能指针仍会引入一些运行时开销?
- 或者,Rust 编译器是否有可能无法做出完全正确的决定,它有时需要 Just Trust The Programmer™,可能使用生命周期注释之一(具有
<'lifetime_ident>语法的注释)?在这种情况下,这是否意味着指针/内存的安全保证不是 100%,仍然依赖于程序员编写正确的代码? - 另一种可能性是,Rust 指针是非“通用的”或在某种意义上受到限制,因此编译器可以在编译时完全推断它们的属性,但它们不如 e 有用。 G。 C 中的原始指针或 C++ 中的智能指针。
- 或者可能是完全不同的东西,我误解了
{ "pointer", "safety", "guaranteed", "compile-time" }中的一个或多个。
【问题讨论】:
-
“在具有指针功能的语言中,编译器不可能在编译时完全决定所有指针是否正确使用和/或对于各种指针是否有效(参考活动对象)原因,因为这基本上将构成解决停机问题。”我对这种说法的真实性提出质疑。 C 风格的指针,也许是因为它们缺乏各种好东西,也有各种不好的东西,比如指针算法,但是对于人们真正需要从指针中得到的东西,Rust 及其引用是一个完美的例子。声明。
-
@ChrisMorgan 我明白了,谢谢。
标签: pointers rust memory-safety