今年は2024年。そう、3年に一度のRustのeditionが新しく設定される年である。
このeditionとは何かについて解説する。
edtionとは?
Rustには、ほかの言語と同じようにバージョンがある。
一般的にバージョンは、コンパイラだったり、標準ライブラリだったり、パッケージマネージャが発展するにつれて上がっていくものである。
だが、ほかの言語でこんな覚えはないだろうか?
言語のバージョンが上がった時に後方互換性が切れて移行作業が大変だったりとか。
一部のライブラリは新しいバージョンでコンパイルできるが、一部はできなかったりとか。
この機能は欲しいが、この互換性がきれるとこまるとか。
Rustは、少なくとも公式のツールにおいては、後方互換性を非常に大事にしている。
だがしかし、言語とライブラリの発展のなかで後方互換性のせいで、発展が止まってしまうことがある。
これを解消するために、editionというものが導入されている。
Rustのバージョンは、6週間に一回、マイナーバージョンが上がっていくようになっている。
このバージョンでは破壊的変更を(ほとんど)含まない変更で、コンパイラとライブラリに新しい機能が追加されていく。
では破壊的変更いれたいときにどうするかというとeditonを分けるのである。
コンパイラの挙動や、標準ライブラリなどの変更を新しいedition側だけにいれ、古いeditionで動くコードはそのままの状態になる。これによって破壊的変更を防いでいる。
edition側に破壊的変更がふくまれているので、バージョンを上げてもコンパイルエラーになにくい。
また、crateごとにeditionが指定されているので、依存先のcrateが新しいeditionに対応しないからといって、
自分のeditionがあげられないということは起きない。
またeditionの移行時にはツールが提供される。cargo fix
を用いることで機械的に移行対応の修正をすることができるようになっている。
どう設定するか
Cargo.tomlにあるeditionの値が反映される
[package]
name = "sample-crate"
version = "0.1.0"
edition = "2021" # ここがeditionの値