Rustコアチームが1.4安定版をリリースした。Cargoの大幅な改良,APIの安定化と関連する型の挙動を改良するための修正など,1,200に及ぶ変更が加えられている。
RustのパッケージマネージャのCargoは,イシュー#984の変更に基づいて,更新に関する追加情報を表示するようになった。コアチームからは,次のような表示例が提供されている。
$ cargo update
Updating registry `https://github.com/rust-lang/crates.io-index`
Updating libc v0.1.8 -> v0.1.10
Updating memchr v0.1.3 -> v0.1.5
Updating num v0.1.26 -> v0.1.27
Updating rand v0.3.9 -> v0.3.10
Updating rustc-serialize v0.3.15 -> v0.3.16
コントリビュータのGeorge Hilliard氏によると,“ひとつのパッケージに対する複数バージョンの追加や削除,同じ名称でソースの異なるパッケージなども,適切に扱えるようになった”ということだ。
RFC 1214, “プロジェクションと構文整合性のルールの明確化(と改善)”に対応した新機能が追加されている。コアチームのブログ記事には,“極めて技術的,かつTL;DR(Too Long, Don’t Read – 長過ぎて誰も読まない)なタイトルは,型システムのいくつかの面で定義上及び実装上の弱点が見つかった,という意味です。RFCではこの問題を解決しています”,と説明されている。
コントリビュータのNiko Matsakis氏が詳しく説明してくれている。
プロジェクションによるアウトリブリレーション(outlives relation)への対処と,すべての型に対する整合性保証の改善(宣言境界を尊重するという意味で)を目的として,型システムが変更されています。ただし現在の実装は,不安定(rust-lang/rust#24622)で不便(rust-lang/rust#23442),予想不能(rust-lang/rust#21748, rust-lang/rust#25692)な可能性があります。変更点は次のとおりです。
- アウトライブリレーションの構文に基づいた簡略化
- アウトライブリレーションとプロジェクションの改善ルールを具体化
- WFバウンド適用時をより明確に特定することで,これまでの実装で欠如していたケースをカバー
Rust 1.4のリリースノートには,今回のアップデートによっていくつかのシナリオが“即時に動作不能”になる,という警告が記されている。
その他の変更で重要なのは,RFC1212 “すべての‘行’を扱う関数で,\n
と\r\n
が有効な行末文字とみなされるようになった”こと,逆文字列検索の高速化などのライブラリ変更,64bit MSVC ABIとリンカ(非GNU)をターゲットとしたWindowsビルドのサポートと使用の推奨化,などである。
Rust 1.4に関する詳細はリリースノートで確認できる。