Skip to content

We're still on the nightly toolchain and that's annoying #1927

@cbiffle

Description

@cbiffle

Hubris still requires the nightly toolchain to build, and that's annoying. It makes toolchain updates hard for several reasons:

  • We're on nightly because we use unstable features, which (as the term suggests) are unstable. These can be broken at any time. This is not a hypothetical risk, either; it happens on most updates.
  • Dependencies detect that we're on nightly and they, too, have an unstable feature free-for-all. So the set of features that can break us is larger than the set we actually use. There's no commonly supported way to stop dependencies from doing this crap.
  • If a new Rust fix or feature drops, we can't just bump to the released toolchain, we need to figure out which nightly version roughly corresponds to the version we want. Because features get backported, it's entirely possible that no nightly toolchain directly corresponds to the released version.

As of this writing, the things keeping us on nightly are:

  • feature(naked_functions): used in the kernel (though I'm attempting to fix this, see Allow kernel to be built with stable toolchain. #1926), in userlib, and in a couple lpc55-specific low level libraries. I suspect all uses of naked_functions can be replaced by global_asm!, which is good, because the way naked_functions works has changed in fundamental ways after about 1.83.
  • feature(used_with_arg): I...have no idea why we're using this. But we are. It only appears in the test suite?
  • -Z emit-stack-sizes: yes, our recent stack size monitoring requires nightly. This is annoying, but, we could make it optional.

...and as far as I can tell, that's it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    buildAffects or requires changes in the build systemdeveloper-experienceFixing this would have a positive impact on developer experiencekernelRelates to the Hubris kerneluserlibRelated to userlib, the fundamental library used by tasks

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions