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!
があり、これにより標準出力の代わりに標準エラー出力に対して簡単に出力できるようになった。
他の新しいライブラリ機能は以下である。
String
がFromIterator<Cow<'a, str>>
とExtend<Cow<'a, str>>
を実装する。Vec
がFrom<&mut [T]>
を実装する。Box<[u8]>
がFrom<Box<str>>
を実装する。SplitWhitespace
がClone
を実装する。
RustのパッケージマネージャーであるCargoも少数ではあるが新機能を含んでいる。特に、crates.ioのインデックスをもうローカルのワーキングディレクトリにチェックアウトしなくなり、性能の改善とレジストリサイズの削減に寄与する。加えて、ビルドスクリプトはクレートをビルドするために使用する環境を修正できるようになった。--all
を使用する際に、新しい--exclude
オプションを用いて特定のパッケージを除外することができる。
すでにRustがインストールされているのであれば、以下を実行することで更新することができる。
rustup update stable
そうでなければ、最初に環境を構築するためにrustupを使用することができる。
より詳細な情報はリリースノートを参照のこと。
Rate this Article
- Editor Review
- Chief Editor Action