👣 Хороший тест на понимание unsafe Rust
Вопрос простой: если запустить пример в Miri со Stacked Borrows, будет ли там UB?
Но важна не только галочка «да» или «нет».
Если UB есть, нужно объяснить:
- какая именно операция ломает правила;
- почему этот указатель больше нельзя использовать;
- где была нарушена модель заимствований;
- какой доступ инвалидировал предыдущий alias;
- почему компилятор может считать такой код невозможным.
Вот в этом и суть unsafe Rust.
`unsafe` не значит «делай что хочешь». Это значит: компилятор больше не проверяет часть правил за тебя, но правила всё ещё существуют.
Miri полезен именно потому, что заставляет смотреть не на ощущение «ну вроде работает», а на формальную модель памяти.
Код может стабильно проходить локально, не падать в тестах и всё равно быть UB.
А потом оптимизатор сделает вид, что такого состояния программы вообще не могло существовать.
Post #1271
4.07K

- 👍 10
- 🥰 3
- ❤ 2
- 🔥 2
- 🖕 1
- 🤗 1