I think it's important to consider the implications if Rust <i>doesn't</i> become a mainstream programming language.<p>I'm not shy about my dislike of Rust. I like C, I don't think avoiding buffer overflows and memory errors is that hard, and I chafe at the idea of a language I dislike aesthetically taking over systems programming.<p>But even I have to admit the arguments for using C instead of Rust are niche. Sure there's probably always going to be some instance where C makes sense technically, but if we could wave a wand and convert the world's C/C++ code to Rust, we'd immediately fix millions of memory errors and data races. It's impossible to overstate that benefit.<p>Think of the things the Rust team has to deal with:<p>"Is Rust a good web language?"<p>Is C or C++? Is Ocaml?<p>"Is Rust a good language for an OS?"<p>Is Python? Is JavaScript?<p>"Is Rust too big?"<p>Is C# or Java? Rust is a pretty small language, both in terms of features and implementation size.<p>"Is Rust powerful enough?"<p>Is Go? Go deals with this all the time ("Go ignores decades of PL research"). Rust's feature set is pretty good, but more importantly it's well thought out.<p>"Is Rust fast enough?"<p>Is Java? Is C#? Is Go?<p>"Does Rust compile fast enough?"<p>Does C++? Does Clojure?<p>"Will your Rust program be memory safe and free of data races?"<p>It sure will be. This is a monumental achievement. Your options for a memory-safe language without GC are... Rust and Ada?<p>"Does Rust have a good concurrency/parallelism story?"<p>Rust has one of the best, actually. It doesn't use segmented stacks so it doesn't achieve the M:N performance of Go, but it has memory and data race safety, OS threads, and futures, so no problem.<p>"Is Rust too hard?"<p>Honestly, programming is hard, other languages just let you ignore it. There's an example about manipulating a string as a global array in this thread somewhere, which is not really something you should do, and the argument was "this was wildly difficult". It is, yeah, because safely managing concurrent access to a global, bounded section of memory is wildly difficult.<p>Again, I'm not a Rust fan and I sort of can't believe I'm writing this. But look at what Rust has:<p>- memory and data race safety<p>- scripting language ergonomics (after you internalize the borrow checker)<p>- the speed and memory usage of C<p>- a low surface area<p>- advanced features<p>- great community outreach and documentation<p>- familiar structure (as opposed to something like Erlang or Haskell)<p>If a language like that doesn't succeed, you have to start wondering what will.<p>My personal belief is that it is succeeding, but I think success looks a lot different than most expect: new projects that need a systems language are far more likely to be written in Rust than in C/C++.