Я тут упражнялся с Zig и Rust-ом и нашел ключик -march=native, который, как я понял, компилирует код специально под текущий процессор. Ключик этот поднял перформанс Раст версии раза в два, что нехило, да? (В Zig он включен по умолчанию).
Я так понимаю, это связано с тем, что компилятор смог заюзать продвинутые инструкции конкретно моего процессора, а без него компилял только в самый общий сабсет x86_64.
В связи с чем вопрос: а как это работает в жизни-то? Вот я скачиваю бинарник программы, написанной на каком-нибудь C/C++/Rust/Go/Haskell, нажимаю на .exe, и что, она работает в два раза хуже, чем могла бы на моем конкретно процессоре?
Если нет, то как тогда это работает? А если да, то какой вообще план? Нахера процессоры вообще развивать тогда?
И правильно ли я понимаю, что JIT-ы потенциально могут эту проблему обойти, потому что генерят машинный код в момент запуска? Обходят ли? Ну там JVM/.NET/V8?