100 days with Rust: a series of brick walls
Author here. I want to apologize a bit for the tone of this article — it was written from a place of frustration, and this part of the site is very much akin to a development journal — these are short articles without a lot of concrete facts that are not really intended for broad or comprehensive consumption. In no way is this meant to be an anywhere-near comprehensive critique on Rust.<p>I&#x27;ll quickly point out that Rust is my favorite programming language, even if reading this piece in isolation would give you the opposite impression. There are about a million things to like about it: The syntax, type safety, sober choices around language design, built-in documentation facilities, conventions, `rustfmt`, linting with `clippy`, toolchain management with `rustup`, community (in the sense of project management and organization), development momentum, ecosystem, and a whole host of other things are all downright <i>incredible</i>. Some of the people working around the core are undoubtedly some of the smartest throughout the entirety of professional software.<p>That said, I wouldn&#x27;t take back anything I wrote here because even when I read it back today with a much more optimistic place (I bypassed many &quot;brick walls&quot; that I alluded to since I wrote it), I still think it&#x27;s true. Months later, even after writing a lot of Rust, I often still don&#x27;t feel productive.<p>No language is perfect, and it&#x27;s probably healthy to have the occasional counterpoint to its fairly consistent positive press. I&#x27;ve spoken to people who don&#x27;t know much about the language and refer despairingly to the &quot;Rust Evangelism Strikeforce&quot;, which I think is largely internalized rationalization that what they&#x27;ve read is too good to be true, so there must some nefarious element at work. Rust really <i>does</i> deserve its good press, and hopefully the occasional dissenting opinion and subsequent discussion will help convince them of such.<p>IMO, Rust has a few existential threats — the one that I think most about is that despite being well passed 1.0 at this point, there&#x27;s a distinct lack of pragmatism around getting core features like concurrency nailed down and shipped. Futures and Tokio are widespread at this point, but the APIs are still changing, and the error messages that they produce are still quite awful. Even once they&#x27;re fully feature-complete and stable, they&#x27;re still not going to be very pleasant to use — you have to think really hard about how you&#x27;re doing future composition. Contrast this to a concurrency system like Go&#x27;s, where you can more or less pretend that you&#x27;re writing synchronous code, and let the runtime take care of the heavy lifting. I love how much careful thought and consideration is being put into the development of a cohesive concurrency model, but unless it can get to the point where it&#x27;s stable and far more user-friendly, people (like me) who are trying to use the language to build things are going to continue having a hard time.<p>In summary, Rust is awesome, the core team is awesome, and the development community is awesome. I&#x27;m confident that the usability problems it has today will be worked out.