的Rust reference狀態:爲什麼解引用null原始指針未定義的行爲?
- 以下是其在所有鏽病代碼禁止,包括不安全塊和不安全的函數內行爲的列表:
- 取消對NULL /懸空原始指針
這個問題僅關於零部件。沒有固有的理由要求在地址空間中確定但未知的地址無法訪問。這就是我的論點(這是空指針的大部分實現),那麼爲什麼Rust自從it seems merely ancient C cruft以後就在這些腳步之後?
我聽說過一些故事(example,another,another)在我的職業生涯,那裏有一個需要訪問這些指針,那麼爲什麼允許規範(因此,實現),以再次礙事?
有彙編輸出和很多上下文in the C++ Reddit thread這個問題來源。它也在這個Rust Reddit thread提出。
儘管上面提到了許多「戰爭故事」,但真正讓我不快的東西不在這個領域,而更多的是抽象的東西:讓語言的地址空間訪問(由硬件提供)不統一規範,它可以用於所有硬件/操作系統/體系結構。
請注意,即使在C中,空指針也不是必需的,其值爲0的指針。如果地址0是某個平臺上的指針的有效值,則它可以使用任何其他佔位符來指定其空指針。 – mcarton
@mcarton當提出問題時,我儘量避免這種誤解,並且失敗,因爲每次有人來指出它。而無休止的討論開始於空指針不是0值。對不起,但問題不在於它,它試圖避免這種解釋。 –
你已經編輯了你的問題來添加「它可能曾經用過的所有硬件/操作系統/體系結構的優先事項」,但這是空指針的一個重點:它不是爲所有硬件/操作系統/體系結構事先設置的。它被設置爲* a *硬件/操作系統/體系結構的先驗值,但是該值可以是任何對在該硬件/操作系統/體系結構上解除引用無意義的值。 – mcarton