Size: a a a

2021 April 17

D

Dima in rust_offtopic
ага
источник

D

Dima in rust_offtopic
ну вот опять же, нам надо, язык не дает права, че делать?)
источник

EG

Emmanuel Goldstein in rust_offtopic
Rule of a thumb тут «никогда не кастуй число в поинтер, поинтеры — не числа»
источник

D

Dima in rust_offtopic
спасибо не знал))
источник

EG

Emmanuel Goldstein in rust_offtopic
В C++ есть магическая функция, которая проставляет поинтеру provenance, кажется
источник

EG

Emmanuel Goldstein in rust_offtopic
Можешь попробовать через cxx его туда-сюда прогнать :)
источник

D

Dima in rust_offtopic
да, ты говоришь о правильных вещах: "provenance"
источник

EG

Emmanuel Goldstein in rust_offtopic
Но вообще — а зачем «надо»? У тебя есть .offset(), чем тебе его не хватает? Что вообще должно значить получение поинтера из числа?
источник

EG

Emmanuel Goldstein in rust_offtopic
Я полагаю, ты можешь написать функцию fn pointerize<T>(arg: usize) -> *const T, которая внутри содержит более или менее пустой ассемблерный блок
источник

EG

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

EG

Emmanuel Goldstein in rust_offtopic
Хотя я представления не имею зачем
источник

D

Dima in rust_offtopic
не мне конкретно надо
источник

D

Dima in rust_offtopic
это я просто говорю в контексте того что все стандарты немного не отражают текущее положение дел, и хз как с этим жить
источник

EG

Emmanuel Goldstein in rust_offtopic
Стандарт тебе запрещает «получать поинтер из числа, которое не получено из поинтера»
Я говорю о том, что эта операция и так не имеет смысла
источник

EG

Emmanuel Goldstein in rust_offtopic
«Стандарт запрещает операции, которые не имеют смысла» это не проблема
источник

D

Dima in rust_offtopic
если б все было так просто
источник

D

Dima in rust_offtopic
источник

D

Dima in rust_offtopic
ща попытаюсь найти топовый пример с кастами
источник

D

Dima in rust_offtopic
а ну да, опять же ральф https://www.ralfj.de/blog/2020/12/14/provenance.html
источник

D

Dima in rust_offtopic
char p[1], q[1] = {0};
uintptr_t ip = (uintptr_t)(p+1);
uintptr_t iq = (uintptr_t)q;
if (iq == ip) {
 *(char*)iq = 10;
 print(q[0]);
}
источник