BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rust 1.19におけるタグ無しのunionなどの追加

Rust 1.19におけるタグ無しのunionなどの追加

原文(投稿日:2017/07/24)へのリンク

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

Rustにおけるunionenumと同様のものであるが、タグ付けはされない。これは 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を使用することができる。

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

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT