Size: a a a

2021 May 01

r

red75prime in rust_offtopic
Ни в чьей. Компилятор просто генерирует mov eax, [ebx].
источник

EG

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

EG

Emmanuel Goldstein in rust_offtopic
Тогда нужно где-то задокументировать инвариант «*ptr это чтение из памяти машины по адресу ptr», потому что стандарту C на это пофиг.
источник

EG

Emmanuel Goldstein in rust_offtopic
Причём это тоже будет неправдой, потому что современные компиляторы ещё как умеют убирать лишние дерефы, если сочтут их лишними.
источник

r

red75prime in rust_offtopic
Угу, поэтому есть volatile
источник

EG

Emmanuel Goldstein in rust_offtopic
volatile гарантирует не то, что ты думаешь
источник

EG

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

EG

Emmanuel Goldstein in rust_offtopic
И нужен ещё инвариант «любое чтение по указателю в абстрактной машине соответствует чтению  из памяти по этому адресу в машине реальной»
источник

r

red75prime in rust_offtopic
Это всё есть в головах писателей компиляторов. Неплохо, конечно, кодифицировать, но и так... Компилятораписателя сделавшего всё строго по стандарту без учёта использования просто пошлют подальше.
источник

B

Börgar in rust_offtopic
так некоторые компиляторы могут кста
источник

EG

Emmanuel Goldstein in rust_offtopic
? Покажи
источник

B

Börgar in rust_offtopic
это не стандарт, но есть в некоторых компиляторах
debice_t a _at(0x1337);
источник

B

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

r

red75prime in rust_offtopic
Или в линкере указать адрес секции и что там лежит переменная и extern struct uart_regs uart1; в коде
источник

ID

Iv@n Dereviankin in rust_offtopic
Класно, крейнлифт по ощущениям х3 ускорение компиляции дал
источник

ID

Iv@n Dereviankin in rust_offtopic
А вот у меня вопрос, почему ллвм умеет в хвостовую рекурсию, а раст не могет?
источник

TK

Traveller Kolsky in rust_offtopic
Ллвм умеет в хвостовую рекурсию when he feels like it. То есть она не гарантируется компилятором конкретного языка. Тейлколлы часто замедляют исполнение, так как требуют строгого порядка аргументов на стеке, а у раста нет стабильного ABI.
источник

s

suhr in rust_offtopic
LLVM недавно таки научился гарантировать оптимизацию рекурсии.
источник

EG

Emmanuel Goldstein in rust_offtopic
Потому что дропы.
источник

EG

Emmanuel Goldstein in rust_offtopic
У тебя дропы очень часто делают рекурсию на самом деле не хвостовой.
источник