Появление Fil-C всколыхнуло дискуссию о безопасности памяти. Fil-C компилирует C и C++ в код, который паникует при недопустимом доступе — выходе за границы, использовании после освобождения. Достигается это комбинацией GC и механизма InvisiCaps, отслеживающего доступную указателю память. Эндрю Келли, создатель Zig, анонсировал похожий режим для своего языка, вдохновлённый Fil-C.
Автор Fil-C и Келли называют Rust по-настоящему небезопасным — из-за unsafe, позволяющего обходить гарантии языка. Заголовок задачи в репозитории Zig даже гласит: «ввести по-настоящему безопасный (в отличие от Rust) режим компиляции». Пётр Сарнацкий считает такую риторику неискренней и похожей на фанатизм. Fil-C — не замена без trade-off: он ABI-несовместим с обычными программами, иногда медленнее в несколько раз и привносит GC. Часть софта этого не заметит, но есть проекты, где GC и ABI-разрыв неприемлемы — и именно для них часто отлично подходит Rust.
Данные Android подтверждают практическую безопасность Rust. На более чем 5 миллионов строк кода плотность реально найденных уязвимостей — 0,2 на миллион строк, против исторических ~1000 на миллион для C и C++. Снижение больше чем в тысячу раз. Выбирать между технологией, убирающей 99,9% проблем в 100% программ, и той, что убирает 100% проблем в 90% программ, не обязательно — можно сочетать.
«Абсолютисты безопасности памяти», однако, требуют от Rust абсолютной чистоты, забывая о компромиссах и почему-то применяя этот стандарт только к нему, а не к обычному C, C++ или Zig без Fil-C. При этом Fil-C превращает уязвимости в краши, которые сами могут быть вектором атаки. Если 0,2 уязвимости на миллион строк кого-то не устраивают, логично с той же строгостью критиковать тех, кто гоняет «YOLO C/C++» и не-Fil-C Zig, а не только Rust-разработчиков.