Rust 1.0のアルファ版がリリースされてから5週間が経過しました! Rustの次の予備バージョンが発表される前に、言語の現在の状態と、安定バージョン1.0への道のりで私たちがまだ何をしようとしているのかについてお話したいと思います。
TL; DR:Rust 1.0は2015年5月15日リリース予定
発売予定
最初のアルファの存続期間中に行った進捗に基づいて、1.0までの新しいバージョンの正確なリリーススケジュールを作成しました。
- Rust 1.0-alpha2-2月20日
- 1.0のすべてのモジュールは、ナイトリービルドで安定とマークされます-3月9日頃
- Rust 1.0-beta-3月31日
- Rust 1.0-5月15日
このスケジュールは、特定の一連の開発サイクルを修正したという点で、 前のスケジュールとは異なります。 また、新しいスケジュールでは、2番目のアルファバージョンと1つのベータバージョンのみが提供されます。
次のリリースがbeta1ではなくalpha2と呼ばれる主な理由は、新しいパスとIOモジュールを承認したばかりであり、それらを安定させる前にコミュニティのフィードバックを得たいからです。
alpha2の新機能
この開発サイクルで計画されたほぼすべての機能を承認して実装することができました。
最も重要なことは、すべてのメインサブシステムのAPIの改訂が完了していることです 。パスとIOモジュールが改革されています。 これで、1.0に含めるすべてのモジュールが最終的な形になりました(ただし、alpha2サイクル中に小さな編集が可能です)。
その他の変更と改善:
- クロージャー :Rustは完全にグリップされたクロージャーと一時的な||をサポートするようになりました
|:|
表記は非推奨と宣言されました。 - デストラクタ : デストラクタの新しい規則が承認され、
#[unsafe destructor]
構造を使用する必要がなくなりました。 - Path Reform :
path
モジュールは、多くのセマンティクスとユーザビリティの問題を排除し、動的サイズ(DST)タイプを活用するためにゼロから設計されました。 - IOの改革 :
io
サブシステムは、安定性、クロスプラットフォームの動作を改善し、システム上の誇張された高レベルの抽象化を回避するために慎重に改訂されました。 ほとんどすべてのAPIはこれらの変更の影響を受けましたが、はるかに保守的で一貫性のある設計に向けて作成されました。 - Deref強制 : 新しい暗黙のキャストは 、主にスマートポインターに影響します。 これにより、
&[T]
が必要な場所で&Vec<T>
、または&T
が必要な場所で&T
&Arc<T>
を転送できます。 これらのキャストは、明示的な逆参照と&*
ひどい「借入」を取り除くのに役立ち、一般的に&
を一般的な借入演算子と考えることができることを意味します。
- 機能の安定性のさまざまな段階 :Rustには、言語機能の操作方法に似た機能APIネーミングシステムがあります。 この新しいコンセプトは、標準ライブラリの進行を管理するのに役立ち、クレートに必要なRustの最小バージョン(クレート、Rustエコシステムのパッケージまたはライブラリのアナログ-約Per。)を決定することを明確にします。
- forループ :forループをより便利にするために、新しいIntoIterator
IntoIterator
さIntoIterator
。 これfor x in vec.iter()
代わりにfor x in &vec
書くことができます。 - 範囲 : 範囲表記法を承認しました
..
全範囲に構造が追加されてい..
これにより、将来collection.remove(..)
などのAPIを使用できるようになります。 - 特性 :一貫性の新しいルールが承認され、特性の実装の柔軟性と有効性の両方を実現できます。
- オーバーフローのセマンティクス :多くの議論の後、整数オーバーフローのセマンティクスが承認されました (alpha2で実装される)。 特に、ファジング技術と組み合わせて使用する場合、オーバーフローバグの検索を大幅に簡素化するように設計されています。
- 関連付けられた型 :コンパイラの関連付けられた型の多くのバグが修正され、どこでも使用できるようになりました。
執筆時点でのさらなる変更は承認されていませんが、alpha2に含まれる可能性があります。型の共分散と反分散 、送信特性の 変更、およびalpha1の整数型の改革後の標準ライブラリの変更 。
詳細は、来週のリリースノートで説明します。
なぜ別のアルファですか?
主な理由は、フィードバックを取得するために、数週間にわたって不安定とマークされた最近承認したAPI(IOやパスなど)を残すことです。 ベータ版では、通常、Rustの不安定な部分の使用を禁止します。
より詳細には、このリリースでは、 安定性システムに関連するアルファ版とベータ版の違いが強調されています 。 アルファリリースでは、不安定な機能の使用を有効にできますが、ベータリリース後は、ナイトリービルドを使用する場合にのみ可能になります。 ベータリリースは、コミュニティの大部分がナイトリービルドの使用から逃れることができるポイントになります。
上記のように、パスとIOを含むリリース1.0に必要なすべてのAPIを承認しました。 ただし、一部の変更はサイクルの最後でのみ受け入れられ、コミュニティは変更されたAPIを安定とマークする十分な経験がありません。 いくつかの例外を除いて、APIの変更は非常に保守的です。それらはすべて、既存の成功したライブラリの類似性で行われました。
alpha2が終了すると、安定したと宣言される前にAPIに変更を加えるための長いウィンドウが開きます。 ウィンドウは3月9日に閉じます。
ベータ版ではなくアルファ版がリリースされたためにスリップするリスクはありますか?
ほとんどない。 リリース1.0に必要な言語および標準ライブラリのすべての機能が承認されています。 つまり、 12週間ですべてを磨き、alpha2から安定版1.0にスムーズに移行することができます。
1.0のリリース前に他に何が起こりますか?
すべての機能1.0はすでに承認されています。 ラベル
#[stable]
割り当てることができるように、新しいAPIを粉砕し、パフォーマンスとドキュメントを改善し、バグを修正し、十分な信頼を得るだけです。
alpha2のリリースでは、古いパスとIOモジュールが非推奨になります(ただし、使用可能なままになります)。 新しいモジュールは3月9日までに安定するはずです。 新しいAPIを試して、潜在的な問題を特定してください。
3月9日の締め切り後、ラックのかなりの部分について、「安定したRust」のみ、つまり
#[feature]
マークされたRustパーツを1回も使用せずに作業できるようになります。 締め切り後、ベータバージョン1.0のリリース前に、私たちはcrates.ioのパッケージの作成者と直接協力して、コードを安定したRustに変換し、言語安定化のすべてのギャップを特定できるようにします。
ベータ版がリリースされる頃には、エコシステムの大部分がナイトリービルドから安定版リリースに移行することを願っています。 これを達成するには、コミュニティ全体が安定化に向かう必要があります。 このプロセスにまだ参加していない場合は、そこに行って、使用する主要な不安定なAPIをお知らせください。