我在某个地方读到过,在一种以指针为特征的语言中,编译器不可能在编译时出于各种原因完全决定所有指针是否正确使用和/或有效(指活动对象),因为这基本上构成了解决暂停问题.直觉上,这并不奇怪,因为在这种情况下,我们可以推断程序在编译时的运行时行为,类似于this related question中所述.
然而,据我所知,Rust语言要求指针判断完全在编译时完成(没有与指针相关的未定义行为,至少没有"安全"指针,也没有"无效指针"或"空指针"运行时异常).
假设Rust编译器不能解决暂停问题,那么谬论在哪里呢?
- 与C中的原始指针相比,pointer checking isn't done entirely at compile-time,和Rust的智能指针是否仍然会带来一些运行时开销?
- 或者,Rust编译器可能无法做出完全正确的决定,有时需要信任程序员吗™, 可能是使用了一个终生注释(
<'lifetime_ident>
语法的注释)?在这种情况下,这是否意味着指针/内存安全保证不是<'lifetime_ident>
%,仍然依赖于程序员编写正确的代码? - 另一种可能是,Road指针在某种意义上是非"通用"的,或者是受限的,这样编译器就可以在编译时完全推断它们的属性,但是它们并不像C++中的C或智能指针中的原始指针那么有用.
- Or maybe it is something completely different and I'm misinterpreting one or more of
{ "pointer", "safety", "guaranteed", "compile-time" }
.