BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rust 1.31がリリース - Rust 2018の機能を初めて実装し、非レキシカルライフタイム、モジュールの改良を提供

Rust 1.31がリリース - Rust 2018の機能を初めて実装し、非レキシカルライフタイム、モジュールの改良を提供

原文(投稿日:2018/12/07)へのリンク

Rust 1.31は、Rust 2018限定の新機能を実装した最初の言語リリースであり、既存のコードベースとのソース互換性は保証されていない。Rust 2018は現在開発中で、Rust 1.31は、この言語を大きく拡張する3年間の開発サイクルにおける、単なる出発点という位置付けである。

InfoQが以前に報じたように、Rust 2018は、最後のメジャーバージョンであるRust 2015以降に現れたすべての変更を、分かりやすいブランド変更の下で整理することを目的にする。さらにRust 2018には、既存のソースコードとの互換性を失う可能性のある変更がいくつか含まれている。例えば、新しいキーワードであるtryasyncawaitなどが導入されることで、変数名や関数名と干渉する可能性がある。従って、今後どちらの言語バージョンを使用するかを選択できることは、既存コードベースのコンパイルを継続的に保証する上では非常に有用だ。このアプローチをシームレスに実行するため、Rustチームは、完全に実装されていないものも含めて、互換性のないすべての変更をまとめてRust 1.31に含めることにした。例えば、新しいキーワードは単なる予約語であってまだ機能しないが、変数や関数の名前として使用すればエラーになる。Rust 2015と2018のパッケージが同じプログラム内に共存可能である点も知っておくべきだ。すわなち、Rust 2018プログラムでRust 2015パッケージを使用することや、その逆も可能である。

Rust 1.31では次のような、大きな言語仕様の変更がいくつも導入されている。

  • 非レキシカル(non-lexical)ライフタイム – 変数のライフタイムを必ずしもレキシカルスコープに束縛せず、実際に有効な期間を考慮する。

      fn main() {
        
        let mut x = 5;
        
        let y = &x;       // In Rust 2018, y lifetime ends here,
        let z = &mut x;   // so this is ok.
      }
    
  • モジュールパスの明確化 – Rustモジュールシステムの使用方法を簡潔にするためのもので、exten crateの用法変更、モジュールパスの合理化などが含まれる。

  • const fn – 任意の定数コンテキストで使用可能で、コンパイル時に評価される。定数関数(constant function)では算術ないしブール演算や、他の定数関数の呼び出しが可能だが、本質的に通常の関数よりも制限が多い。定数関数はRust 2015でも使用可能だ。

      const fn foo(x: i32) -> i32 {
        x + 1
      }
      const SIX: i32 = foo(5);
    

しかしながら、Rust 2018が導入されるということは、Rust 2015の寿命が尽きたという意味ではない。実際にRustチームは、ソース互換性を損なうリスクのない変更について、実現は後日と予定されているものの、そのすべてをRust 2015にもバックポートする計画である。

Rust 1.31は、rustup update stableを実行してインストールすることができる。Rust 2018の機能を試すには、{package}にあるCargo.tomlファイルでedition = "2018"を指定する必要がある。エディションが指定されていない場合、Rustコンパイラは、ソースコード互換性を最大化するためにデフォルトとしてRust 2015を使用する。

関係資料としてRust 2018 Surveyの結果もリリースされた。これはRustに対するユーザの関与と満足度を測ると同時に、言語やツールの共通的な不足点を明確にするためのものだ。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT