Size: a a a

Rust — русскоговорящее сообществo

2020 October 06

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Создание указателя из числа это unspecified behaviour
specified
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Я не знаю, как определяется лайфтайм объекта при этом
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ноп. Defined, но не specified.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
6.3.2.3.5: An  integer  may  be  converted  to  any  pointer  type.   Except  as  previously  specified,  the result  is  implementation-defined,  might  not  be  correctly  aligned,  might  not  point  to  anentity of the referenced type, and might be a trap representation.
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Ноп. Defined, но не specified.
там даже описано в стандарте про поинтеры что они могут как преобразованы из чисел так и наоборот - главное чтобы остальные правила не нарушались при этом
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Тебе даже не гарантируется, что (void*)(int)p это всё тот же указатель, хотя для всех нормальных имплементаций это верно
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Тебе даже не гарантируется, что (void*)(int)p это всё тот же указатель, хотя для всех нормальных имплементаций это верно
Или хотя бы, что это корректный указатель, кстати
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Тебе даже не гарантируется, что (void*)(int)p это всё тот же указатель, хотя для всех нормальных имплементаций это верно
так вопрос не про гарантии что оно будет одним и тем же, вопрос про ограничения
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Когда ты конвертируешь число в указатель, ты получаешь некое неопределённое стандартом значение.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Соответственно, лайфтайм объектов, полученных с помощью такого каста, из стандарта узнать нельзя. Нужно читать документацию к компиляторам, наверное.
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
в с++ есть некие гарантии например на intptr_t что каст туда обратно не меняет значение указателя
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Соответственно, лайфтайм объектов, полученных с помощью такого каста, из стандарта узнать нельзя. Нужно читать документацию к компиляторам, наверное.
ну тут у тебя небольшая путанница по поводу терминов - из раста набрал
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
но с просто числом это уже УБ в с++
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Boris Vinogradov
ну тут у тебя небольшая путанница по поводу терминов - из раста набрал
Слово «лайфтайм» определено в 6.2.4.1 стандарта C11, при чём тут Rust?
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Слово «лайфтайм» определено в 6.2.4.1 стандарта C11, при чём тут Rust?
у указателя нет времени жизни в С, есть оно у типа на который он указывает
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Dollar Føølish
в с++ есть некие гарантии например на intptr_t что каст туда обратно не меняет значение указателя
C++ я обсуждать не готов. Стандарт C++ я не читал, он слишком длинный.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Boris Vinogradov
у указателя нет времени жизни в С, есть оно у типа на который он указывает
Да, я про это же.
Время жизни объектов, на которые указывает указатель, полученный с помощью каста из числа, не определено стандартом C.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Стандарт C вообще ничего не определяет для указателей, полученных из числа.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Поэтому, возвращаясь к исходному вопросу, с хардварью всё очень просто — не определено.
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
ну да уже Мануэль все правильно говорит по моему, если последнее его "не определено" читать как unspecified
источник