История изменений
Исправление monk, (текущая версия) :
Порча памяти и use after free аффектят всю программу вне зависимости от оптимизаций.
Да. Но Rust можно заставить вести себя как Си.
if cond()
{
do1();
} else {
do2();
let x = &mut 42;
let xptr = x as *mut i32;
let x1 = unsafe { &mut *xptr };
let x2 = unsafe { &mut *xptr };
*x1 = 0;
}
При оптимизации может скомпилироваться в безусловный вызов do1()
.
А в Java аналогичный код в любом случае может испортить память только после вызова do2().
Исходная версия monk, :
Порча памяти и use after free аффектят всю программу вне зависимости от оптимизаций.
Да. Но Rust можно заставить вести себя как Си.
if cond()
{
do1();
} else {
do2();
let x = &mut 42;
let xptr = x as *mut i32;
let x1 = unsafe { &mut *xptr };
let x2 = unsafe { &mut *xptr };
*x1 = 0;
}
При оптимизации может скомпилироваться в безусловный вызов do1()
.
А в Java аналогичный код в любом случае может испортить память после вызова do2().