Using nightly as the compiler is much easier in Rust than, for example, using Python 3 early on was, because unlike, say, Python 3, nightly is fully backwards-compatible to earlier stable releases. (While not being backwards-compatible to previous nightlies.)
This means it's easy to limit yourself to the features used in stable + one major change you want, and if there is no change to that major feature, you won't even notice all the instability of the compiler.
There has been some hope of people moving to stable versions as NLL hits them, I think most people will always want the next big feature (personally waiting for const generics) on nightly, at least until the language is a lot more complete.
9 more days!
Or used in larger projects. Or used in environments where (a) dev's prefs cannot be nightly.
We know of several codebases that are over a million lines. To some people, that's big, and to many, it's not.
(Note also that this data shows a majority of people do use stable.)
This boggles my mind, so I have to ask, who considers a million lines of code in a code base not a large project? I mean, sure there are plenty of projects larger than that, but when considering whether a project is large or not, I think I would consider a million lines of code well into the "large" category.
Add in a general sense of bragging rights, and well, I've heard people say "call me when you have a real project" about more absurd (to me) things than just this in the past...
> (Note also that this data shows a majority of people do use stable.)
Well, that kinda proves my point then, right?
> What's a "large project" to you, incidentally?
It's more that the larger the project (either in code or number of devs working on it), the more tool-stability becomes a requirement. Just my experience, and it is quite understandable.
https://github.com/rust-lang/rust/issues/43234
Took me a bit of websearching to figure out what people were excited about.
Additionally, even that is kind of jargon. The simplest answer is “the borrow checker will allow some kinds of code that is sound, but the previous borrow checker could not understand that it was sound.”
Meanwhile you get access to more and better tools, which has no impact on the stability of your code base but a positive impact on productivity. It enables you to decide to bite the bullet and give up on language stability for new useful features if you want to (which I often do, for nll).
So, what I do is develop on nightly, and make things I want other people to use work on stable.
What do you do with the stuff you make on nightly? Use it only for yourself?
Edit: oh, I think I see: you don't use any new features when you develop on nightly.
(This may not be what your parent is talking about, but it is a use-case I've seen before.)
as for how `rustup install nightly`
I've currently switched to nightly to use the 2018 edition changes already, which will soon be unnecessary.
Almost all libraries work fine on stable now. (the new async/wait support is an exception, but it's still very experimental right now and not used by many)
Important note: You can always develop on nightly and get potential speedups etc, but not use any features and then deploy only with stable.
The Rust team has also done an unprecedented job of balancing stability and improvement.
> When asked why they used nightly, people responded with a broad range of reasons including: access to 2018 edition, asm, async/await, clippy, embedded development, rocket, NLL, proc macros, and wasm.
wasm, clippy, embedded, and proc macros aren't nightly any more. NLL, 2018 edition are coming soon. (December 6)
Incidentally, what do you use the syscall crate for? I'm very curious!
(I was looking into it because I was trying to do system calls without having a stack page mapped as part of an assembly sandbox).
They may also be willing to hand it over to you, I don’t know.
You say that, but we've already come out the other end of the period where linux was still on the upward swing of popularity and if a development toolchain wasn't as easily available a lot of software may never have taken off as quick.
The ability to easily install a development toolset to compile (even if safely hidden behind a script to download and compile something like Ruby, Python, Perl, or a module for one of them) is a major boon, even if just used to create packages for the distribution's package system for local distribution (e.g. creating an RPM from spec).
Given the choice between an easily installable default that might get old or no first party option provided, having a default available is vastly better. Blame companies for poor options they choose, not the people and organizations that do their best to provide even a single option.
The RedHat devtoolset was a nice solution to this (use a newer gcc version, but link to the system libraries), but if that isn't available, then building with the system compilers helps in this area.
Rust doesn't have this problem when rust programs are statically linked, but if distros start shipping rust shared libraries which other programs start depending on, and/or some of the rust standard lib ends up in a system shared library, some of the same issues may arise (or maybe not, rust may have solved them in a clever way).
They do need to recompile the world when they update the compiler, but it's a single recompile each time.
I don't know much about modern Windows (SxS, etc) so things may have improved there, but last I looked (a while back admittedly) DLL hell and shared object issues were in different leagues.
>so I don't need to distribute libstdc++ and libgcc_s with my program
Could you explain why you want to avoid that?
Using unstable anything on production software is not professional, on mission critical software it is reckless incompetence.
In particular, using nightly allows you to opt-in to a number of experimental language features in exchange for maintenance burden. It's not a choice I make, although it's fun to do every now and then just to get a feel for what's available in the nightly builds.
For example, I use actix, which works really well. It's not as ergonomic as Rocket, but it's way faster and quite useable. The same is true for pretty much everything I need, so I only use nightly when I'm dinking around with something that doesn't need to go to production anytime soon.
My (possibly mistaken) understanding is that my coworkers who do more web servery stuff than me prefer actix to rocket for other reasons too, and wouldn't use rocket even if it worked on stable.
I don't really know the arguments around them, TBH.