[[!tag learning-rust]]

I want to learn the Rust programming language. I have several reasons, but the primary ones are: it's been years since I learnt a new language and it'd be good for me to learn one; and I'm tired of Python and its limitations. I'd like a language that supports building large programs, which means it should have a strong type system, a good module system, and an healthy eco system. Rust has those, it seems. It also has good performance, and support for safer multitasking. It's also a systems language, which is what I usually like to do.

I've read a little about Rust already:

I've also written a few learning toys in Rust: hello, echo, cat, wc, wordfreq. Nothing challenging yet.

Here is an initial plan for learning Rust:

  • Make a schedule for reading the "Gentle introduction" book. Start a public, but non-syndicated section in my blog for it. For each chapter, write a summary of the salient points: what new stuff it introduces, and any insights I have from learning the chapter. Plus put any code I write based on reading the chapter on my git server.

    Don't overload myself: one chapter a day is enough. This is not a crash course.

  • Once I'm done with that, pick interesting parts of the RPL book, and do the same thing with those.

  • Start connecting with the Rust community: join IRC channesl, mailing lists, follow blogs, etc.

  • Explore standard Rust library docs to find interesting stuff, and just to learn what's there, and to become familiar with the way Rust reference docs are structured.

  • Explore crates.io to find interesting libraries.

  • Start writing real programs: programs that do something useful that I actually use. Ideas for these:

    • Rewrite summain, using as much concurrency as allowed by the hardware. The Rust version should be faster than the Python version, especially when doing checksums.

    • Write a web API that converts hex numbers into words using the PGP word list. This involves porting my Python library to Rust, plus learning how to write Rust HTTP APIs.

    • Rewrite distix in Rust. Possibly re-design it at the same time.

  • Find out how to package Rust applications and libs well for Debian. Integrate Rust into my personal development flow, with CI building Debian packages of my own stuff, and installing it using those packages.