Rust 1.8では、2つの新しい言語機能と多数の標準ライブラリの改善が追加された。加えて、rustc
のためのCargoベースの新しいビルドシステムが導入された。これはRustのブートストラッピングに向けた最初のステップのように見える。
1つ目の新機能は、+=
や -=
などの等号オペレーターファミリーに関係するもので、トレイトを使ったオーバーロードが可能になる。次のようなコードを書くことで、Count
のための+=
を定義できる。
use std::ops::AddAssign;
#[derive(Debug)]
struct Count {
value: i32,
}
impl AddAssign for Count {
fn add_assign(&mut self, other: Count) {
self.value += other.value;
}
}
2つ目はマイナーな構文変更で、フィールドのないstruct
を定義する際、中括弧を付けてもエラーにならなくなる。(訳注:原文に誤り、訂正済み)例:
struct Foo {}; // 正しい。以前は {} を省略する必要があった。
この変更によりマクロが少し書きやすくなるだろう。structが空か空でないかで切り替える必要がなくなる。
大きなものは、Rust 1.8がCargoをベースとする新しいビルドシステムを導入したことだ。最終的にMakeを置き換えることになる。Rustの開発者でこの変更を実装するプルリクエストを出したAlex Crichton氏によると、新しいビルドシステムの導入にはいくつかの理由があるという。
- Makefileは不可解なことが多い。したがって、必要に応じて変更を加えるのがとても大変だ。
make
はかなりポータブルだが、「非常に」ポータブルというわけではない。注目すべきは、Windowsシステムにデフォルトのmake
がないことだ。- Rustコンパイラと標準ライブラリがCargoに移行することは、Rustプログラマーの開発プロセスに一貫性をもたらす。また、
crates.io
パッケージマネージャーのようなツールも共通で使えるようになる。
だが、こうしたメリットを得るには、非常にコストがかかる。Rustのmake
ベースのビルドシステムは、何年もかけて注意深く丹念に作られてきたものだ。make
の置き換えは「長い道のり」になるだろう。Crichton氏は語る。
100%-Rustのビルドシステムが利用可能になることは、完全なRustのブートストラッピングに向けた第一歩のように見える。これはRust 1.10で実現される予定だ。
最後に、標準ライブラリはさらに安定になっている。特に、UTF–16関連メソッド、各種time関連API、先に述べたオペレーターのオーバーロードに必要なトレイトなど。
なお、まだベータ品質だと見なされて、明記されていない新機能にrustupがある。これを使うことで、開発者は異なるプラットフォームのための追加のstdlib
バージョンをインストールできるようになる。例えば、依存関係のあるものを自動的に処理することで、クロスコンパイルの扱いが簡単になるだろう。
$ rustup target add x86_64-unknown-linux-musl
info: downloading component 'rust-std' for 'x86_64-unknown-linux-musl'
13.77 MiB / 13.77 MiB (100.00%) 1.47 MiB/s ETA: 0s
info: installing component 'rust-std' for
'x86_64-unknown-linux-musl'
Rust 1.8はインストールページからダウンロードできる。GitHubに詳細なリリースノートがある。