LINUX.ORG.RU

История изменений

Исправление 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().