Safe C++ proposal is not being continued
Safe C++ больше не развивается.
Год назад появился черновик, обещавший «ржавую» безопасность без ломки старого кода: память, типы, потоки — всё через явный safe-контекст. Комитету идея не зашла: модель Rust назвали чуждой, голоса отдали Profiles — набору ограничений на уже существующий C++, которые на этапе компиляции блокируют UAF, data-race, deadlock, утечки.
Profiles не добавляют синтаксиса, только запрещают опасные паттерны; включаются опцией, обратно совместимы. Safe C++ требовал новых квалификаторов и заимствовал проверки времени жизни — слишком радикально.
Автор Safe C++, Шон Бакстер, признал:
Дальнейшая работа бесполезна; все силы — в Profiles.
Вывод: Profiles слабее, но реалистичнее; ждём их в C++26.
Комментарии (140)
- Комитет C++ фактически отверг Safe C++ и ограничился «Profiles» — набором флагов, запрещающих часть небезопасных конструкций.
- Участники сходятся: главная проблема не техническая, а культурная — сообщество не хочет ограничений, считая «если код работает — значит, он безопасен».
- Profiles критикуют за примитивность: они не решают temporal safety, не выражают лифтаймы и не требуют изменения синтаксиса, поэтому дают лишь иллюзию защиты.
- Большинство считает, что без полного отказа от C-подобного подмножества и без внедрения lifetimes C++ никогда не станет «безопасным»; проще перейти на Rust.
- Практический вывод: крупные проекты продолжат игнорировать Profiles, а новые кодовые базы будут выбирать Rust либо двухъязычный подход «C++26 + внешние анализаторы».
A clickable visual guide to the Rust type system
Скалярные типы
u8…u128,i8…i128— целые фикс. размераusize/isize— целые под указательf32/f64— вещественныеbool,char— логика и UTF-4
Составные
(T, U)— кортежstruct— имен. поляenum— вариантыunion— перекрытие[T; N]— массив фикс. длины()— юнит
Безразмерные
[T],str,dyn Trait— сами не компилятся, живут за ссылкой&[T],&mut [T],&str,&mut str,&dyn Trait,&mut dyn Trait— срезы и трейт-объекты
Ссылки
&T,&mut T— заимствование
Диапазоны
a..b,..b,a..,a..=b,..=b,..— полу- и замкнутые
Утилиты
Option<T>,Result<T, E>,Ordering,Arguments— стандартные обёртки
Асинхронность
Poll<T>,Context,Pin<P>— фундамент async
Анонимки
fn(),|x|,async fn,async ||,impl Trait— функции, замыкания, existential
unsafe
UnsafeCell<T>,ManuallyDrop<T>,PhantomData<T>— сырые/мета-инструменты
Указатели
*const T,*mut T,fn(T)->U— сырые и функц. указатели
Прочее
PanicInfo,Location,!— паника и «никогда»
Комментарии (36)
- Пользователи хвалят cheats.rs за визуальные схемы lifetimes и memory-layout, удобную мобильную прокрутку и напоминание диапазонов целых.
- Отмечают, что таблица «как таблица Менделеева» — компактна и полезна.
- Вопрос: почему PhantomData в группе unsafe — ответ: она нужна dropck для указателей-владельцев.
- Побочное обсуждение: «а не сделать ли signed-целые симметричными с NaN» — быстро отвергли как лишённое смысла.