Rust 1.19には数々の言語上の改善が導入されており、 これにはタグ無しのunionと新しい標準ライブラリ機能が含まれる。

Rustにおけるunionは enum と同様のものであるが、タグ付けはされない。これは Rustにおける union の使用が本来的には安全でないことを示しており、unionの中のどのバリアントが実際に使用されているかを知る情報がないことに起因している。以下はRustのunionの定義方法及び使用方法である。

union MyUnion { f1: u32, f2: f32, } let u = MyUnion { f1: 1 }; unsafe { u.f1 = 5 }; let value = unsafe { u.f1 }; fn f(u: MyUnion) { unsafe { match u { MyUnion { f1: 10 } => { println!("ten"); } MyUnion { f2 } => { println!("{}", f2); } } } }

unionを使用しているCのAPIとの接続を容易にするのに加え、Rustにおけるunionの導入は空間的に効率の良い構造の実装を単純化することを目的としている。

Rust 1.19では、文の内部から値を返却するための break と共に用いた場合に、 loop 文が式として振る舞うことができるようになった。例えば以下のように使用する。

let x = loop { break 7; };

ライブラリの界面でも、先に述べたようにRust 1.19では数々の新機能が導入されている。第1に、2つの新しいマクロである eprint! と eprintln! があり、これにより標準出力の代わりに標準エラー出力に対して簡単に出力できるようになった。

他の新しいライブラリ機能は以下である。

RustのパッケージマネージャーであるCargoも少数ではあるが新機能を含んでいる。特に、crates.ioのインデックスをもうローカルのワーキングディレクトリにチェックアウトしなくなり、性能の改善とレジストリサイズの削減に寄与する。加えて、ビルドスクリプトはクレートをビルドするために使用する環境を修正できるようになった。 --all を使用する際に、新しい --exclude オプションを用いて特定のパッケージを除外することができる。

すでにRustがインストールされているのであれば、以下を実行することで更新することができる。

rustup update stable

そうでなければ、最初に環境を構築するためにrustupを使用することができる。

より詳細な情報はリリースノートを参照のこと。