This repository was archived by the owner on Jan 24, 2022. It is now read-only.
[RFC] enforce main: fn() -> !
#50
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Now that the
Terminationtrait has been implemented (cf. rust-lang/rust#46479) we can narrow downthe return type of
mainto be one of the types that implements theTerminationtrait.This RFC proposes only implementing
Terminationfor the never type (!) -- currentlyTerminationis only implemented for the unit type (()). With this change all programs that linkto
cortex-m-rtare forced to set the signature ofmainto befn() -> !. The rationale here isthat a divergent (never ending) function better matches the logic of microcontroller programs.
When the change is implemented the user will be forced to make
maininto a divergent function.This won't work:
Whereas this would works:
Drawbacks
Diagnostics for the
Terminationfeature are rather bad at the moment. If this change isimplemented and you write a program where
main: fn()but forget to add the#![feature(termination_trait)]feature gate you get an unhelpful linker error:cc @pftbest