为什么解除引用null原始指针未定义的行为?

时间:2017-01-13 20:58:49

标签: null rust undefined-behavior

Rust reference州:

  
      
  • 以下是所有Rust代码中禁止的行为列表,包括不安全的块和不安全的函数:      
        
    • 取消引用null /悬空原始指针
    •   
  •   

这个问题完全是关于零部分。没有固有的理由要求地址空间中的明确但未知的地址不可访问。那是我的论文(这是空指针的大多数实现都是这样做的),那么为什么Rust跟随it seems merely ancient C cruft之后的这些脚步呢?

我在职业生涯中听过几个故事(exampleanotheranother),需要访问这样的指针,为什么要允许规范(以及,实施)再次阻碍?

这个问题源自汇编输出和大量上下文in the C++ Reddit thread。它也出现在Rust Reddit thread中。

尽管上面提到了许多“战争故事”,但对我来说真正令人不安的不是那个领域,而是更多关于抽象的:通过语言的规范使地址空间访问(由硬件提供)非均匀,它可能用于所有硬件/操作系统/体系结构的先验。

1 个答案:

答案 0 :(得分:3)

空指针在语言的其他位置是特殊的。例如,Option<Box<T>>(其中T: Sized)将只使用一个单词,而不是两个单词,因为空指针用于表示None。禁止遵循空指针的代码与此想法一致。

从更广泛的意义上讲,Rust并未像C一样关注支持奇异的架构。这并非出于恶意,而仅仅是设计过程中的优先事项。毕竟,该语言是为modern web browser构建的 - 一个在x86或ARM上以用户模式运行的应用程序。这不是那种会出现这些问题的用例。也许如果有人在1.0之前提出它可能会有所不同。