Подобно C и C++, Rust основан на абстрактной машине.
Вводит в заблуждение.
На самом деле.
За редким исключением, вы никогда не будете рассуждать о реальном процессоре. Вы пишете код для абстрактного ЦП. Rust понимает, что вы хотите, и переводит это в реальный RISC-V/x86/… машинный код.
Абстрактная машина (АМ):
- не является средой выполнения и не имеет накладных расходов во время выполнения, но является абстракцией вычислительной модели.
- содержит такие понятия, как области памяти (стек,…), семантика выполнения,…
- знает и видит вещи, которые могут не волновать ваш процессор.
- де-факто является прослойкой между вами и компилятором,
- использует все вышеперечисленное для оптимизации.
Неправильные представления: Люди могут ошибочно предположить, Rust использует непосредственно центральный процессор.
Без АМ | С АМ |
---|---|
0xffff_ffff бы сделал операцию процессора. | AM может переводить битовые комбинации чтобы упаковать несвязанные данные. |
0xff и 0xff - один и тот же указатель. | Указатели AM могут иметь присоединенный домен для оптимизации. |
Любой указатель r/w на 0xff всегда в работает. | AM может выдать удобные операции, построенные на доверии «не может произойти разночтения». |
Чтение un-init просто дает случайное значение. | AM понимает, если чтение невозможно, то может удалить все связанные битовые коды. |
Гонка данных просто дает случайное значение. | AM может разделить чтение-запись. |
Нулевая ссылка 0x0 в каком-то регистре. | Знает, что ссылка 0x0 вызовет Ошибку. |
Эта таблица предназначена только для описания того, что делает AM. В отличие от C или C++, Rust никогда не позволяет вам делать неправильные вещи, если вы не заставляете его выполнять небезопасный код (unsafe).