В Rust reference состоянии:Почему разыменовывается неопределенный необработанный указатель 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 * hardware/OS/architecture, но значение может быть любым значением, которое не имеет смысла для разыменования этого оборудования/архитектуры OS /. – mcarton