Hi all.
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, toolchain
, override
and 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.
Do rustup
and rustup update
do the right thing?
The simple 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
, 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”.