Rustlings Rewrite
Rustlings is a program with a set of small exercises to get you used to reading and writing Rust code ๐ฆ
I have been working on version 6 of Rustlings for more than 3 months. During this time, I rewrote the whole program, extended it, improved the exercises and added idiomatic solutions. Now, I am happy to finally release it ๐
In this blog post, I will talk a about my journey of becoming a maintainer and working on the new version ๐
Keep reading if you are interested in creating your own set of Rustlings exercises! ๐คฉ
If you are only interested in the new features and changes, check out the CHANGELOG ๐
Landscape mode recommended on mobile devices
Contents
Becoming a maintainer
I used Rustlings as interactive exercises in my Rust course at my university. I created a fork and later pushed some of the improvements to upstream (the official Rustlings project). After teaching the course for the second time and understanding how students interact with Rustlings and what their struggles are, I wrote an email to the maintainer Liv (shadows-withal) asking if they need a maintainer. Liv's reply was very lovely and I am really thankful for their continuous support ๐ค
After some days, I was given permissions on Github. Becoming an open source maintainer could be that easy! Just start contributing and get some pull requests merged. Then, ask the maintainers kindly if they need a new maintainer ๐
Don't be disappointed if they don't need any new maintainers. Introducing new maintainers to a project and communicating with them is extra work that has to be justified. You can continue contributing without becoming a maintainer.
What to do as a new maintainer?
After becoming a maintainer, I started working on open issues. Many issues were either outdated or already resolved. Cleaning up an issue tracker can be really satisfying! ๐งน
To get a better understanding of the (rather small) codebase, I started reading the pieces of the source code that I didn't touch yet. As a performance addict, I found it very helpful to try to optimize the code while reading it. This gives me a much deeper understanding. It is also an opportunity to touch the code without any breaking changes.
After getting comfortable with the codebase, I started introducing my own ideas to improve the project. It is fine to have a vision as a motivated new maintainer, but make sure to communicate it with the other maintainers and get their approval before starting the work. Your ideas need to align with the vision of the project.
A new milestone
After getting the approval from Liv, I created a milestone for version 6 on Github. The milestone is useful to organize everything that has to be done before releasing a new version.
A long-term plan is important, but it doesn't have to be in the form of a milestone. A shared todo list should be enough โ
I created a new branch named v6
where all the development for the new version happened.
It is important to keep the main
branch functional, especially for people compiling from source.
This also allows you to merge pull requests like fixes to the current version.
Changes and new features
To avoid duplication, check out the CHANGELOG of version 6 to learn about what is new โจ
The highlights are:
- Easier installation with
cargo install rustlings
๐ฆ๏ธ - UI/UX improvements ๐จ
- New interactive list of all exercises ๐๏ธ
- Idiomatic solutions provided after you are done with an exercise โ
rust-analyzer
(LSP) support out of the box ๐- Clippy lints in every exercise ๐
- Support for third-party exercises ๐
Third-Party Exercises
The new support for third-party exercises is something that has to be called out. You are now able to create your own set of exercises and let the Rustlings program handle them.
For example, Thelie came up with a name idea for third-party exercises: Toughlings! ๐ช๐ผ That would be an idea for advanced exercises that users can start with after being done with the official Rustlings exercises.
Speedlings is also an idea for performance oriented exercises ๐๏ธ
What about Frenchlings? A translation of the official Rustlings exercises in French ๐ซ๐ท This is something that people asked for at least twice. Now, you can do it without us needing to maintain it.
Maybe Macrolings, Asynclings or Unsafelings? ๐ค
I am very excited about your ideas! Go ahead and create your set of exercises and we can link to your project in the README of the official Rustlings ๐
Beta testing
After implementing the main features of version 6, I published a beta version and started a public testing phase. I am very thankful to all the feedback that I got. Most importantly, I need to thank dotjpg3141 and orhun for their extensive feedback ๐ฅฐ
dotjpg3141's feedback is something that open source projects can only dream of ๐ Contributing to open source is not only about submitting code!
Try it out!
What are you waiting for? Go ahead and try out the new version ๐๐ผ You can find instructions in the README for getting started.
If you find any issues in the new version, please create an issue on Github.
I wrote all the solutions myself, but I am open to improvements ๐ค