Why Safety Profiles Failed
Safe C++ vs Safety Profiles
- Many commenters agree the article shows why “safety profiles” (restrictive subsets with static checks) can’t deliver robust memory safety on existing C++ semantics.
- Core criticism: you can’t infer enough about aliasing and lifetimes from function declarations alone, and profiles avoid adding the new assumptions/annotations needed.
- Safe C++ (as implemented in the Circle compiler) is seen as a more coherent approach: extend the language with explicit ownership/lifetime semantics and then define a checked safe subset.
Rust vs “Safer C++” Strategies
- Some argue that Rust already solves the problem with lower overhead: a clean, memory-safe low-level language that continues to improve.
- Pushback: rewriting large C++ codebases in Rust is often economically infeasible; many systems (browsers, game engines, compilers, VMs) will stay C++ for decades.
- A recurring theme: it’s pragmatic to make new C++ code safer (via Safe C++ or similar) while gradually reducing vulnerabilities in old code, rather than betting everything on full Rust rewrites.
Annotations, Lifetimes, and Aliasing
- Debate over lifetime annotations: some find them conceptually heavy and fear unreadable signatures; others say the complexity exists anyway and annotations expose it usefully.
- Rust is cited as proof that function-local analysis plus explicit lifetimes can scale without whole-program reasoning.
- Profiles’ reliance on local-only analysis is criticized as inherently limited for aliasing, dangling pointers, and cross-TU behavior.
Static Analysis and Runtime Schemes
- Some suggest whole-program or heavier static analysis (Frama-C, etc.), but others note undecidability and scalability limits.
- Proposals to enforce safety via fat pointers, reference counting, or guard pages are discussed; commenters highlight overhead, multithreading complexity, and incomplete coverage.
C++ Culture, Performance, and Committees
- Strong sentiment that C++ culture historically prioritizes performance and backward compatibility over safety, which shapes committee outcomes.
- Skepticism that the standards process can successfully standardize a truly safe subset; past failures (concepts, contracts,
restrict, GC, modules friction) are cited.
Library and Iterator Design
- Several lament that C++ iterators and algorithms have unsafe aliasing preconditions; contrast is drawn with ranges-as-arrays designs (e.g., length-based) and safer iterators in other libraries or languages.