ufm: (Default)
[personal profile] ufm
Я понимаю, что для некоторых людей это нифига не новость, но я человек измученный нарзаном и уже лет 20, наверное, не смотрел, что-ж там компилятор такого нагенерил на выходе.Берём такой код (это rust, если что):
fn main() {
    let mut src = 1u128;
    let a = src.to_ne_bytes();
    src += 1;
    let b = src.to_le_bytes();
    src += 1;
    let c = src.to_be_bytes();
    println!("{:#?} {:#?} {:#?}", a, b, c);
}

И компилятор на голубом глазу выдаёт:
       sub     rsp, 152
       mov     qword ptr [rsp + 16], 0
       mov     qword ptr [rsp + 8], 1
       mov     qword ptr [rsp + 32], 0
       mov     qword ptr [rsp + 24], 2
       movabs  rax, 216172782113783808
       mov     qword ptr [rsp + 48], rax
       mov     qword ptr [rsp + 40], 0


Т.е. эта зараза тупо повыкидывала все эти пляски с +1 к переменной, и тупо нафигачила констант...

Я, конечно,неоднократно читал, что бодаться с нынешними компиляторами в плане кода - такое себе занятие, но что прям настолько всё сурово - как-то не ожидал.

(no subject)

Date: 2021-03-13 12:50 (UTC)
From: [personal profile] chabapok
Да. Самый крутой компилятор - жавовский. Над ним сотни человек трудились, в том числе, целые отделы работали по оптимизации того, как оно раскладывается в кэше и всякий очередях валидации. Плюс, там оптимизиации, которые можно сделать только в процессе выполнения.

Если вам хочется +1 делать, то надо, чтоб src извне приходило. Тогда компилятор не будет знать, к чему 1 можно прибавить на этапе компиляции.

(no subject)

Date: 2021-03-14 02:30 (UTC)
tobotras: (Default)
From: [personal profile] tobotras
Тут у тебя компилятор по-прежнему знает, к чему прибавить. Ты отдельным модулем fn() скомпилируй, если в этом вашем rust так бывает.

(no subject)

Date: 2021-03-14 09:32 (UTC)
From: [personal profile] chabapok
Это не извне. Есть же инлайнинг и все такое.

Извне - это когда вообще извне.

(no subject)

Date: 2021-03-14 06:35 (UTC)
vak: (Default)
From: [personal profile] vak
Ну а чо компилятор, не тупой ведь. :)