Several core problems with Rust
Meta: Hype, Hate, and Rust Culture
- Several comments frame this as another swing in the tech hype/hate cycle (Rust → now Zig, etc.).
- Some say “Rust haters” have become more annoying than early evangelists; others insist evangelism is still overbearing and anti-Rust posts are a backlash.
- A few argue the post is more “ragebait” than analysis, similar to generic language-war content.
Compilation Speed
- Many acknowledge Rust’s compile times as a real pain point, especially on large projects or modest hardware; some report needing >32 GB RAM or new machines.
- Others counter that Rust has improved, can be faster than C++ in practice, and that careful crate factoring, incremental builds, and build refactoring can yield large speedups.
- There’s debate over what is “inherent” (monomorphization, LLVM backend) vs fixable (compilation model, tooling, parallelism).
Complexity, Ergonomics, and “Rusty” Design
- Some agree Rust is complex, especially around ownership, borrowing, lifetimes, and async; early experience is described as “incredibly painful”.
- Others argue the complexity mostly forces you to understand data and concurrency upfront, catching bugs earlier; pain shifts from runtime to compile time.
- Constructs like
Arc<Mutex<...>>are cited as ugly and verbose; defenders say they make problematic patterns explicit and often push you toward better designs (channels, actors, persistent data structures).
Unsafe Code and Data Structures
- One detailed account describes implementing a B-tree with unsafe pointers, then rewriting it using
Vecindices: code became simpler, safe, and ~10% faster. - Several say unsafe Rust is harder to get right than C due to strict aliasing and pointer syntax; Miri catches subtle UB that would silently slip through in C/C++.
- There’s a long subthread clarifying that
unsafedoes not magically “contain” bugs to a block; invariants must be enforced at module boundaries, and unsafe APIs must be carefully designed.
Memory Safety vs Reliability (the Cloudflare unwrap)
- The article’s claim that Rust “crashes all the time” and trades reliability for memory safety is heavily criticized.
- Many argue
unwrap()is equivalent to an assert orsys.exit: a deliberate choice to treat a condition as unrecoverable; the Cloudflare outage is framed as a design/operational issue, not a language flaw. - Several stress that a clean panic + restart is often preferable to silent corruption or OOM; Rust makes such failures deterministic and searchable.
- Some acknowledge that Rust (and examples) make
unwrap()too easy and suggest cultural or tooling norms (linting against it, preferring?and proper error handling).
Shared Mutable State and Concurrency
- The post’s claim that Rust becomes “meaningless” for heavy mutable shared state (GUIs, DBs, services) draws pushback.
- Critics note that any correct handling of shared mutable state is hard and often slower, regardless of language; Rust just forces explicit synchronization.
- Others agree that idiomatic Rust discourages shared mutability and can make certain patterns (cyclic graphs, heavily stateful APIs) awkward, pushing toward message passing or higher-level abstractions.
Language Choice and Alternatives
- Multiple commenters emphasize Rust is excellent for some domains (systems, infra, security-critical services) but not a universal best choice.
- Alternatives mentioned for different tradeoffs: Go, C#, Swift, Python, Zig, Odin, Ada, D, OCaml, BEAM languages, and GC’d environments for richer shared-state or rapid GUI work.
- Several conclude that the article over-generalizes from one developer’s frustrations; Rust has real downsides, but also large, demonstrated benefits in practice.