В каждом пятом пакете на языке Rust используется режим unsafe

Организация Rust Foundation опубликовала статистику, в соответствии с которой из 127 тысяч значительных пакетов, представленных в каталоге crates.io, более 24 тысяч (19.11%) используют ключевое слово “unsafe” для отключения проверок безопасной работы с памятью. 34.35% пакетов совершают прямые вызовы функций из других crate-пакетов, в которых используется режим “unsafe”.

Отмечается, что в большинстве случаев использование режима “unsafe” обусловлено вызовом кода, написанного на других языках или обращения к библиотекам на С/C++. Пакетом с наибольшим числом вызовов в режиме “unsafe” признан развиваемый компанией Microsoft crate-пакет windows, являющийся обвязкой над API платформы Windows. Данный пакет насчитывает 36 млн. загрузок. Unsafe также используется в самых популярных пакетах syn (470 млн загрузок), proc-macro2 (354 млн загрузок) и libc (345 млн загрузок).

Для выявления проблем в коде, выполняемом в режиме “unsafe”, проектом развивается интерпретатор Miri, позволяющий определять обращения вне границ буферов, использование памяти после её освобождения, некорректное использование неинициализированных данных, нарушение инвариантность базовых типов (например, несоответствие bool значениям 0 или 1), нарушение правил владения объектами, возникновение состояний гонки и утечки памяти.

Release. Ссылка here.