I’d be concerned that this may be confused with versions. Using arbitrary identifiers: Someone may try to unlock “2018.3”, then wonder why it hasn’t worked, only to find they need both that and the Rust 1.23 compiler.
It might also be confusing if the minor edition gates keywords but not other syntax changes (e.g. elisions).
There was a post on one of the RFCs (I do not remember which) from one of the serde(?) maintainers about syntax and backwards compatibility. They said, in effect, that they’re careful to upgrade to new compilers only when they can improve their API, specifically to avoid accidentally relying on ergonomic features. Minor editions may meet their needs better, since they’d be able to get the bugfixes and performance improvements of a new compiler without worrying about accidentally relying on those features.
On the other hand, I’d expect that to spike front-end complexity, as the minor editions could never be eliminated, and it butchers the epoch RFC’s guidance:
When opting in to a new epoch, existing deprecations may turn into hard errors, and the compiler may take advantage of that fact to repurpose existing usage, e.g. by introducing a new keyword. This is the only kind of breaking change a epoch opt-in can make.
If keyword gates are used, there should also be a “warn” level lint released ahead of the next edition to prepare for eliminating the keyword gate. This, then, implies that any keywords added after the “lint window” must be gated–they shouldn’t be included in the edition, because, otherwise, there wouldn’t be enough downstream notice.
Is there a variant of this that leverages a new rustup channel? I’m imagining something after “stable”, with the only difference being keyword reservation. When a word loses a meaning In linguistics, it’s called “archaic”. It has a negative connotation when applied to computer programs, but it’s as good a word as any to explain the channel’s motive.