Организация 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), нарушение на правилата за владение на обекти, възникване на условия на състезание и течове на памет.
Източник: opennet.ru
