Rust без unsafe всё-таки может словить UB 😬
В сети разошёлся пример: код компилируется на stable Rust, не содержит ни одного unsafe-блока — и при этом позволяет получить dangling reference.
Причина не в том, что borrow checker внезапно «бесполезен», а в soundness-баге компилятора, связанном с lifetime и типами функций. Проблема известна Rust-команде как high-priority unsoundness issue и воспроизводится начиная с Rust 1.66.
То есть формула «safe Rust гарантированно исключает UB» имеет важную оговорку: если сам компилятор и стандартная библиотека sound.
Rust всё ещё сильно сокращает класс memory-safety ошибок - просто даже у borrow checker бывают баги.
Post #1365
4.35K

- 🤔 22
- 🌭 4
- ❤ 3
- 🔥 3
- 👍 2
- 💯 2
- 💊 2
- 🦄 1