The stability of Julia 1.0 means we cannot introduce breaking changes, and for a good reason. Nevertheless sometimes it would be nice to be able to introduce such changes without braking code. Surprisingly, for many cases this is possible. The Rust language alleviates this problem with “Rust Editions”, the current being “Rust 2018”.
Let me just propose (by example) the following “Julia Editions” allowing some changes to the “Julia v1.0” language that otherwise would break old code:
- Julia editions would be all opt-it
- Suppose module A declares “Julia Edition 2020”
- now module A can use “rad_to_deg” instead of “rad2deg”
- module A can also call module B which declared “Julia Edition 2019”
- module B can only use “rad2deg” because “rad_to_deg” is an edition 2020 feature
- but module B has nice scoping of variables because it was fixed in edition 2019
- module A and B can call into module C, which does not declare any edition
- module C uses just “Julia v1.0”
so. The idea is that while editions contain otherwise breaking changes, Julia v1.0 still knows how to support/run/compile all the editions, and the editions are opt-in. This way the language development can advance more freely and not in huge steps v1, v2. Instead we sould have small steps: j1ed2019, j1ed2020, j12021, etc.
when Julia is changed in such an extreme way that it cannot be compatible with v1 code, then it has to be versiond as Julia V2.0, and the editions continue from there