Subject: Re: [bug#34820] [PATCH] gnu: rust: Update to 1.32.0

From: Danny Milosavljevic <[email-masked]>
Date: Wed, 27 Mar 2019 12:02:34 +0100

Hi,

On Tue, 26 Mar 2019 21:58:07 -0500
Brett Gilio <[email-masked]> wrote:

> > Not sure what challenges there may be with the rustup approach though

Without using the Guix package manager?  That depends on whether they can
install into $HOME.  If so, it's not difficult.

> > (will the prebuild binaries work well with guix?).

We had prebuilt Rust binaries before, but we had to patch them slightly
using patchelf.

From a strategic standpoint we'd like to reduce the number of bootstrap
seeds required for Guix packages, not increase them.  But I guess as
long as they are optional (not dependencies of anything else), that's
the user's choice.

> You are probably right, there are definitely going to be some liability
> issues about working with the nightly branch. But it was something I was
> interested in investigating. The more we deal with rust on Guix, the
> more I think that rustup is going to have to become a necessity if we
> want to attract more Rust developers to using Guix. Nightly is almost a
> requirement for a good few.

I think Rust is one of the few languages getting it right in this regard:
There is a "stable" setting where you can only access APIs in the runtime
and/or language that won't change.  If there are unfinished experimental
APIs they can expose them (to programs not written to require the "stable"
setting) and later on change them and tell everyone "I told you so".

As a distribution, we usually package stable versions of software, so it
does make sense that if the feature is unstable (subject to change in
incompatible ways in less than, say, 1 month) then it's not available.

Long story short, I don't use Rust for production projects because some
important things are not deemed stable yet--and I had to do too much
pointless rewriting in my life just because some other API changed.

But there should be nothing stopping a user from testing Rust some other
way (install into $HOME etc).

In order to test Rust nightly I use a Docker container and this script:

dannym@dayas ~/.local/bin$ cat in-rust-nightly 
#!/bin/sh

p="`realpath \".\"`"
# example: cargo build --release
if [ "$1" = "" ]
then
        set -- sh
fi

exec docker run --rm -e USER="${USER}" --user "$(id -u)":"$(id -g)" -v "$PWD":"${p}" -w "${p}" rustlang/rust:nightly "$@"