[Oxidation Plan] Choosing a target Rust version and edition
raphael.gomes at octobus.net
Mon Jul 1 04:32:34 EDT 2019
As more and more Rust makes its way into the Mercurial code base, the
question of picking a minimum required version of Rust becomes more and
more urgent. On the one hand, staying too up to date means breaking the
install for some of our users, and staying too far behind means creating
a technical debt that only gets worse over time.
Many interesting changes have happened in Rust since the Oxidation Plan
was introduced, like the 2018 edition and procedural macros:
- Opting in to the 2018 edition would be a clear benefit in terms
of future proofing, new (nice to have) syntactical sugar
notwithstanding. It also has a new non-lexical, non-AST based borrow
checker that has fewer bugs(!) and allows us to write correct code that
in some cases would have been rejected by the old one.
- Procedural macros would allow us to use the PyO3 crate which
maintainers have expressed the clear goal of compiling on stable, which
would help in code maintainability compared to rust-cpython.
These are the two major features I can think of that would be clearly
beneficial and that I think should matter in determining the target Rust
version. This means that the absolute oldest rustc version should be
1.31.1, however picking the more recent 1.34.2 would be preferable as it
is of course newer, but still packaged in Debian.
I can volunteer to write the patch that will port the current 2015
edition code to 2018 and pin down the Rust version. I've talked to
gracinet, who is currently the only other contributor writing major Rust
patches, and he would be fine (could I say thrilled?) with adapting his
newer code to the 2018 edition after said patch lands.
More information about the Mercurial-devel