LINUX.ORG.RU

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

Исправление red75prim, (текущая версия) :

Я уже 4 года пишу на Расте. И сегодня вот написал код, который выглядит нормально, но на него ругается MIRI: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=366116fc046c3e031268ddc40579dcd0 . Смотреть: tools -> miri.

Больше там приходиться учитывать: всё что в С + zero-sized types, stacked borrows, доступ к памяти за пределами того на что указывала ссылка из которой получен указатель - UB. То есть let a = vec![1,2]; let ptr = &a[0]; ptr.offset(1).read() - UB. let ptr = a.as_ptr(); ptr.offset(1).read() - OK. Конвертация из ссылки в &mut, если ещё один такой &mut есть - UB. Возможно что-то ещё.

Но, да - то, что unsafe код можно изолировать - перевешивает.

Исходная версия red75prim, :

Я уже 4 года пишу на Расте. И сегодня вот написал код, который выглядит нормально, но на него ругается MIRI: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=366116fc046c3e031268ddc40579dcd0 . Смотреть: tools -> miri.

Больше там приходиться учитывать: всё что в С + zero-sized types, stacked borrows, доступ к памяти за пределами того на что указывала ссылка из которой получен указатель - UB. То есть let a = vec![1,2]; let ptr = &a[0]; ptr.offset(1).read() - UB. let ptr = a.as_ptr(); ptr.offset(1).read() - OK.

Но, да - то, что unsafe код можно изолировать - перевешивает.