I’d like to introduce rustup, the fabulous new way to install and manage Rust toolchains. This is the successor to multirust, and began as multirust-rs by @Diggsey. Although there’s a lot of work yet to do on it, it is feature complete and I’d like to get some feedback. To try it just go to http://www.rustup.rs and follow the instructions - everything you need to know should be reachable from there. I strongly recommend uninstalling any existing version of Rust before doing so.
After you’re done come back here and consider the questions below and leave your feedback. This is an early beta, and there’s still a lot of churn to come over the next month, so I caution against recommending it for wider use yet.
Thanks to @Diggsey for creating multirust-rs, to @chriskrycho for reviewing the rustup CLI, @alexcrichton for setting up the build infrastructure, and to all the multirust and multirust-rs users and contributors.
Does grouping commands into subcommands help?
In order to make the CLI interface more approachable and leave more room for expansion I’ve grouped commands together logically, so commands that just manage toolchains are under
rustup toolchain [subcommand], those that deal with overrides
rustup override [subcommand]. While this makes the CLI in some ways feel more consistent it also makes some common commands more verbose: for example adding a target is now
rustup target add instead of
rustup add-target. To then combat this verbosity there are some top-level commands that can be thought of as shortcuts, most notably the
rustup update command, which could also be thought of as
rustup toolchain update (which isn’t implemented to to avoid duplication).
The three ‘sub-command’ commands,
self also notably don’t do anything intersting when not provided a subcommand. In other words, whereas
rustup toolchain list is a real command,
rustup toolchain, the shorter command, doesn’t do anything. I could imagine
rustup toolchain for example displaying the current toolchain like
rbenv version (but I have other reservations about using
rustup toolchain for this).
I still feel mostly good about this direction, but not sure if the ergonomics are in order yet.
rustup update do the right thing?
rustup command is the ‘update all the things’ command. It updates all toolchains and self-updates, without confirmation. Originally I wanted this to be the only update command, but pretty quickly found myself just wanting to update nightly, so added
rustup update. Now there are three ways to update toolchains:
rustup update nightly, which does what you expect, and
rustup update which updates the active toolchain.
I’ve already found myself typing
rustup update and mistakenly wondering why it wasn’t ‘updating all the things’, which makes me think there are too many ways to update.
Are the verbs right?
A lot of the rustup commands are transactional: add or remove some piece of the system. For example
rustup update <toolchain>/
rustup toolchain remove <toolchain>
rustup target add <target>/
rustup target remove <target>
rustup override add <toolchain>/
rustup override remove
So the ‘add’ / ‘remove’ verbs are consistent except for with toolchains, which use ‘update’, not ‘add’. And again,
update being its own command for convenience makes the lack of a
rustup toolchain add command inconsistent.
I happen to prefer three different verbs for adding here - ‘update’ for adding (or updating) toolchains, ‘add’ for adding targets to an existing toolchain, and ‘set’ for setting the override. If we were to follow that though then it would provide no intuition at all for adding different types of things.
What information is missing from the website?
The website is supposed to be very slim, just enough to convince you to run the installer and get you on your way. Is there any other information that you were expecting to be given during install?
If anybody wants to try their hand at the website style too, I’m not wedded to this. I generally am going for something simple, strong, and authoritative. People who encounter it should think, “yeah, this website knows what’s up; I’m going to do what it says”.