Rust 1.31に相当するRust 2018の最初のリリースが2018年12月6日に提供予定であると、Rust Core Teamが書いている。Rust 2015が最初に公開されて以降、言語を充実させてきた豊富な機能が、新たなラベルの下で統合される。

InfoQで既報のとおりRust 2018では、コンパイラのパフォーマンスや言語機能のブラッシュアップ、ツーリングやライブラリやドキュメントの改善など、言語の生産性向上に重点が置かれている。Rust 2018の新たな言語機能には、 impl Trait やmacros 2.0、SIMDのサポート、ジェネレータ、非語彙(non-lexical)ライフタイム、async/awaitのサポート、モジュールの改造など、最近のRustリリースで浮上したものや、あるいはRust 1.31に続く次期リリースに向けたものが含まれている。

最も注目すべきなのは、Rust 2018では、既存のRust 2015コードとの互換性を損なう言語変更を優先するため、安定性に関する保証を緩和する予定であることだ。例えば、Rust 2018では try キーワードが導入される予定だが、一部のコードでは関数名や変数名と競合する可能性がある。

この種の可能性に対処して、Rust 2015からRust 2018への移行を支援する方法は、C++やJavaの手順に倣う予定である。具体的には次のようなことだ。

Rust 2018はオプトインになる予定である。既存のプロジェクトでRust 2018を使用する場合は、プロジェクトの cargo.toml の edition = ‘2018’ を加えればよい。 edition キーが使用されていなければ、Rustコンパイラは既定値としてRust 2015を使用する。 cargo new で新たに生成されるすべてのプロジェクトには、デフォルトで editon = ‘2018’ が設定される。

RustコンパイラがRust 2015とRust 2018の両方をサポート可能であるため、問題なく両エディションを同一プロジェクトの依存関係に混在させることができる。Rust 2018プログラムでRust 2015の依存関係を使用することや、Rust 2015プロジェクトでRust 2018の依存関係を使用することが可能だ。

言語のコアは変更されいない。Rust 2018には前述の try キーワードや、いくつかの警告がエラーに変更されたというような、表面レベルの変更のみが含まれている。

Rust 2018にはさらに、既存のコードベースを変換して、Rust 2018の新たな機能やイディオムの段階的な導入を可能にするための新ツールである cargo fix が含まれている。

関連する記事として、Rust Core Teamは先日、グローバルアロケータを導入したRust 1.28をリリースしている。開発者がシステムのアロケータに代わる独自のメモリアロケータを提供することが可能である他、メモリの最適化を可能にする NonZero数値型が追加され、エラーメッセージと書式設定が改善されている。