BT

InfoQ ホームページ ニュース Rust 1.13リリース - '?'エラー処理オペレータを追加,パフォーマンスを改善

Rust 1.13リリース - '?'エラー処理オペレータを追加,パフォーマンスを改善

ブックマーク

原文(投稿日:2016/11/14)へのリンク

バージョン 1.13の開発でRustコアチームが取り組んできたのは,‘?’をオペレータの新規導入によるエラー処理のための言語構文の改善,コンパイル時間の最適化,型レベルマクロのサポート追加だ。

Rustの新しいオペレータである‘?’は,ローカルポリシがエラーを呼び出しチェーンに伝搬する場合のエラー処理を容易にする。言い換えれば,エラーを返す関数がある場合,以下のスニペットのように呼び出すことで,エラー発生の可能性に対処することができる。

let result = foo();
let mut result = match result {
        Ok(val) => val,
        Err(e) => return Err(e),
}

// tryオペレータを使用することも可能
Alternatively, you can use the try operator
let mut result = try!(foo());

新しい‘?’オペレータは,上記のようにtry構文の省略形として,より簡潔な基準を可能にするものと解釈することもできる。

let mut result = foo()?;

新しい構文のメリットは,次のように関数呼び出しがチェーンした場合,より明白になる。

try!(try!(try!(foo()).bar()).baz())

// 次のように記述可能
foo()?.bar()?.baz()?

?’オペレータはRustマクロとして定義されている。Rustコアチームによれば,これは今後,言語の基盤となる機能に影響を与えることなく,新たな構文を導入するための方法の一例となる。

Rust 1.13ではコンパイラの新たな最適化も実施されており,いくつかのケースにおいては,コンパイル時間を50%までスピードアップすることができる。このことは,1.13の開発サイクル上でRustベンチマークのコンパイル時間の進化を示した次のグラフによく表れている。

9月1日に見られる,2つのベンチマークのコンパイル時間の急激な低下は,ひとつはこれまで要求された都度それぞれ計算されていた,関連型のキャッシュの改善によるものだ。

コンパイル時間の改善のもうひとつは,関数のインライン化に関する処理の最適化によるもので,実際にインライン関数を呼び出すクレートに対してのみ適用されるようになった。この変更のメリットを最もよく表す例は,現時点ではリリースされていないwinapi-0.3クレートだ。この場合,rustcは利用する他のクレートのマシンコードをまったく出力せず,中間的なMIR表現のみを生成する。

コンパイラの最適化に関してはこちらにも資料がある。

その他,Rust 1.13で実現された注目すべき変更点としては,

  • cargoがアップデートされ,最新のセキュリティパッチの適用されたcurlOpenSSLが含まれるようになった。

  • 次の例のように,型の位置でマクロが使用可能になった。

    
    macro_rules! Tuple { { $A:ty,$B:ty } => { ($A, $B) } }
    let x: Tuple!(i32, i32) = (1, 2);
    
    これにより,型を計算するようなTLP(型レベルプログラミング)を行なう場合に,再帰と選択を表現することが可能になる。
  • 次の例に示すように,属性をステートメントに適用することができるようになった。
    
    // Apply a lint attribute to a single statement
    #[allow(uppercase_variable)] let BAD_STYLE = List::new(); 
    
    lint属性と同様に,条件コンパイル属性や,外部ツールに対するアノテーションとして機能する独自の属性を指定することも可能だ。

ARMプラットフォームをターゲットとする開発者は,Rust 1.13には重大なコード生成のバグがあることを認識する必要がある。1.14ベータ版の使用を検討すべきだ。

150人以上のコントリビュータによって,Rust 1.13にはさらに多くの変更が含まれている。詳細はリリースノートを参照して頂きたい。

この記事を評価

関連性
スタイル

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。