> When crashes do occur an engineer needs to spend time to diagnose how it happened and what caused it. Since Pingora's inception we’ve served a few hundred trillion requests and have yet to crash due to our service code. > In fact, Pingora crashes are so rare we usually find unrelated issues when we do encounter one. Recently we discovered a kernel bug soon after our service started crashing. We've also discovered h…
Which aspect(s) of Rust do you think are most responsible for this? (e.g. borrow checker, memory safety, culture that attracts devs who care about reliability, etc)
A type system that can express thread safety (Send/Sync traits) is incredibly valuable when building multi-threaded systems.
Universal definition of what is safe, and standard traits and borrowing rules, make APIs more predictable. Just from function's signature you know a lot about its behavior, without having to look for gotchas in the manual.
Mandatory error handling prevents cutting corners. Unit testing is built-in.
Generics, good inlining, and Cargo help split code into libraries without a performance or usability hit, which helps make focused, well-tested components.
Most of these things aren't groundbreaking, but Rust being new had a luxury of picking current best practices and sensible defaults.