[Oxidation Plan] Choosing a target Rust version and edition

Raphaël Gomès 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 mailing list