The state of Rust trying to catch up with Ada [video]
Why Ada Didn’t “Win” Broad Adoption
- Historical timing: universities were teaching Fortran, Simula, Pascal, etc. long before Ada; if Ada was your “first language” that likely means a late-starting CS program.
- Unix shipped with C and its own source; C was easy to bootstrap and port, Ada compilers were heavy, slow, and often expensive extras on Unix.
- Commercial compilers: high prices, opaque licensing, and hardware demands limited hobbyist and startup use.
- Ecosystem bias: Ada positioned as “mission critical / aerospace / defense,” not for web, games, or general apps, so it never built broad mindshare.
- Chicken‑and‑egg: mainly “specialists” use it, so tooling and UX for newcomers lagged, which in turn discouraged wider adoption.
- ACATS public conformance suite is both a strength and barrier: a new compiler starts with thousands of failing tests and no customers until it passes.
Safety Features, Subtypes, and Pattern/Liquid Types
- Ada has long had range types and subtypes (and later dynamic predicates), allowing types like “angles 0..360” or “UUID_String” with embedded format checks.
- These constraints can be enforced at runtime and, with SPARK/verification tools, often proven at compile time.
- Rust’s “pattern types” / liquid types proposal aims for similar refinement-style types, expressed as patterns over existing types.
- Current Rust niches (e.g., NonZeroI8, Option<&T> occupying same size as T) rely on compiler magic; pattern types would let users define such optimized, constrained types themselves (e.g., “BalancedI8” excluding INT_MIN).
- Debate over utility: some see runtime-checked subranges as crucial for invariants; others find them historically underused or awkward without good verification tooling.
Rust vs Ada: Domains, Tooling, and Safety-Critical Use
- Many see Rust and Ada as overlapping in “C/C++ replacement” and safety‑critical domains; Ada additionally has deep roots in hard real‑time control loops where post‑init allocation is forbidden.
- Others argue Ada’s memory management model makes “browser‑like” workloads awkward, while Rust is built for heavy dynamic allocation with graceful failure.
- Safety‑critical industries require certified/qualified toolchains; Ada vendors already offer such compilers and proof tools, largely proprietary.
- Rust is building similar infrastructure (Ferrocene, safety‑critical consortium, MISRA‑aligned guidelines, model checkers like Loom).
- Integer overflow semantics are contrasted: Ada treats overflow as a constraint violation; Rust uses debug‑panic vs release‑wrap plus explicit checked/saturating APIs, which some consider too opt‑in.
Syntax, Ergonomics, Adoption, and Community
- Strong disagreement over readability: some find Pascal/Ada “BEGIN/END” clearer than C braces; others say that syntax “hurts their eyes” and prefer C‑style.
- Rust deliberately adopted C‑like surface syntax as “weirdness budget” management to ease onboarding; internally it borrows heavily from ML/FP ideas.
- Several commenters argue Rust’s success owes more to marketing, large‑company backing, platform roles (like Swift/Kotlin), and ecosystem investment than to purely technical merit.
- Rising interest in Rust and “memory‑safe C replacements” has renewed attention to Ada as prior art; some are annoyed by Rust evangelism that appears to rediscover decades‑old ideas without credit.
- Rust’s learning curve is widely acknowledged as steep; advice includes treating it initially like a mostly immutable, value‑passing language and adding advanced features later.