Size: a a a

2021 May 01

EG

Emmanuel Goldstein in rust_offtopic
Ну, скажем так
источник

EG

Emmanuel Goldstein in rust_offtopic
Пара компилятор + платформа, и гарантировать должен компилятор
источник

EG

Emmanuel Goldstein in rust_offtopic
volatile не обязывает компилятор действительно порождать доступы к памяти, оно обязывает «выполнять по правилам абстрактной машины, а не жульничать»
источник

EG

Emmanuel Goldstein in rust_offtopic
Иначе у тебя интерпретатор C был бы невозможен
источник

B

Börgar in rust_offtopic
я могу понять почему компилятор (он не поймет мануал по-английски), но это не UB тк платформа
источник

B

Börgar in rust_offtopic
а если объект в памяти, то что нам говорит сделать абстрактная машина?
источник

EG

Emmanuel Goldstein in rust_offtopic
Это может не дойти до платформы, если компилятор откажется порождать memory access. И он не обязан порождать memory access, он вообще не обязан пользоваться той же памятью, что и платформа.
источник

EG

Emmanuel Goldstein in rust_offtopic
Это не объект.
источник

EG

Emmanuel Goldstein in rust_offtopic
Это ты число кастанул к поинтеру и получил хз что.
источник

EG

Emmanuel Goldstein in rust_offtopic
Сам по себе результат такой операции implementation-defined, где implementation это однозначно компилятор.
источник

EG

Emmanuel Goldstein in rust_offtopic
Если тебе компилятор отдельно не гарантирует, что ты так получишь pointer to an object, если платформа это разрешает, то это не прокатит
источник

B

Börgar in rust_offtopic
если это не объект то UB Q.E.D. , но платформа нам там определяет обїект
источник

EG

Emmanuel Goldstein in rust_offtopic
Conforming компилятор может на каждом доступе к памяти добавлять 1000 к указателям и это прокатит.
источник

AN

Alex Noname in rust_offtopic
просто это кароче какое то буквоедство. в стандарте имелось ввиду лишь то что среди значений переменной для поинтера должно быть специальное значение для NULL. И все эти абстрактные формулировки лишь для того чтобы сказать какое это значение - детали реализации. - получайте его через (void*)0. То что там в ядре что-то есть для старых конпиляторов костыли, то это просто костыли.
источник

EG

Emmanuel Goldstein in rust_offtopic
И с volatile прокатит, правила абстрактной машины это не меняет.
источник

B

Börgar in rust_offtopic
так стоп
источник

EG

Emmanuel Goldstein in rust_offtopic
Conforming компилятор может хранить все объекты на куче, ссылки на них — в массиве, а имплементации отдавать индексы массива как указатели
источник

EG

Emmanuel Goldstein in rust_offtopic
И если он предоставляет рантайм, который производит обратное преобразование, то это тоже сработает
источник

AN

Alex Noname in rust_offtopic
иначе это просто немысленно что ты можешь не добавив в рантайм дополнительного значение протрекать все NULL в компайл тайм.
источник

EG

Emmanuel Goldstein in rust_offtopic
Он может генерировать матерные слова и использовать их в качестве указателей, а объекты хранить в хешмапе
источник