Rust 1.12.1の新しいバージョンをご紹介します。 Rustは、メモリ、速度、およびコードの並列実行による安全な作業を目的としたシステムプログラミング言語です。
通常どおり、公式Webサイトの対応するページからRust 1.12.1をインストールするか、 rustupを使用してrustup update stable
コマンドを実行できます。
安定バージョン1.12.1に含まれるもの
ちょっと待って...ワンポイントツーポイント...ワン?
数週間前、 バージョン1.12の発表で 、次のように述べました。
リリース1.12は、おそらくリリース1.0以降で最も重要です。
そして、それは本当です。 重要な変更の1つは、コンパイラの大規模なリファクタリングでした。 新しいMIRバックエンドでは、アーキテクチャと実装の詳細が変更されています。 一般に、近代化プロセスは次のようになりました。
- MIRの初期サポートは、Rust 1.6のナイトリービルドで登場しました。
- 作業が完了すると、コンパイルフラグ
--enable-orbit
が追加され、
コンパイラ開発者が新しいバックエンドを体験できるようにします。 - 10月以降、私たちは常にMIRアセンブリを実行しています。
使用されませんでした。 - コマンドドレイン
-Z orbit
追加され、夜間ユーザー
アセンブリは、「トランス」コンパイル段階の代わりにMIRをテストして使用できます。 - 数ヶ月にわたる広範なテストの後、バージョンについて
Rust 1.12、 MIRをデフォルトのバックエンドにしました 。 - Rust 1.13では、 MIRのみが利用可能になります 。
このようなグローバルな変更は簡単ではなく、非常に重要です。 したがって、すべてを正しく慎重に行うことが重要です。 そのため、このプロセスには非常に時間がかかっています。 crates.ioの各パッケージで定期的にコンパイラをテストし、ソースで-Z orbit
を確認するようユーザーに依頼します。6週間のベータテストの後、重大な問題はありませんでした。 したがって、バージョン1.12ではデフォルトのMIRを使用することにしました。
しかし、大幅な変更は、最小化しようとしても常にリスクです。 したがって、1.12のリリース後、テスト中に検出できない回帰が見つかりました。 それらのすべてがMIRに関連付けられているわけではありません。単純に、このような大規模な変更により、他の場所でエラーが簡単に発生します。
暫定リリースを作成する理由
6週間のリリースサイクルがあり、Rust 1.13の中間であるため、ユーザーに次のリリースを待つように求めるのではなく、バージョン1.12のパッチをリリースすることにしたのはなぜですか? 先ほど、似たようなことを言いました:「中間リリースは、標準ライブラリの脆弱性などの極端な場合にのみ発生します。」
安定性だけでなく、この言語を使用することの利便性にも注意を払っています。 みなさんに待つように言うことはできますが、私たちがどれほど深刻かを知ってほしいのです。 この状況での暫定リリースのリリースは、できるだけ早くエラーを修正したいという願望を示す方法でもあります。
さらに、セキュリティの問題について話しているわけではないので、これは暫定リリースの発行を実践する良い理由です。 新しいバージョンをリリースするプロセスは部分的に自動化されていますが、完全にではありませんが、これまでにこれを行ったことはありません。 暫定リリースが存在すると、他のツールのエラー 、たとえばrustupが検出されます。 また、必要に応じて、セキュリティの問題またはその他の理由で緊急リリースを計画どおりにリリースするようにしてください。
これは、2012年のRust 0.3.1のリリース後の最初のRustの暫定リリースであり、安定性を厳密に保証して6週間のリリースサイクルを採用したRust 1.0のリリースから72週間後です。 また、1.12でリグレッションが発生したことは非常に残念ですが、Rustの安定性を誇りに思っており、Rustを信頼できるプラットフォームにするために最善を尽くします。
Rustを世界で最も信頼できるソフトウェア開発プラットフォームにしたいのです。
ベータテストノート
Rustユーザーとして、できるだけ早くバグを修正するためにできることがあります。ベータ版を使用してコードをチェックしてください! 各ベータリリースは次の安定リリースのリリース候補であるため、継続的インテグレーションツールを使用しましょう。 そのため、問題が安定したリリースになる前であっても、問題について説明できます。 これはまったく難しいことではありません。 たとえば、 Travisを使用する場合、これを.travis.yml
追加します。
language: rust rust: - stable - beta
そして、テストはコンパイラの2つのバージョンで実行されます。 さらに、ベータ版のバグでビルドエラー全体が発生しないようにするには、次のコードを追加します。
matrix: allow_failures: - rust: beta
ベータビルドは赤くなりますが、安定したビルドは緑のままです。
AppVeyorなどの他のほとんどの継続的統合システムには、 この機能が必要です。 使用しているシステムのドキュメントを参照してください。
詳細
バージョン1.12.1では、9つのエラーが修正されました。当然、これらの修正はすべてベータバージョン1.13に転送されました。
- ICE:「rustc」は「アサーションに失敗しました:concrete_substs.is_normalized_for_trans()」というメッセージでパニックになりました#36381
- 二重否定と論理変数との混乱
- syn 0.8.0パッケージのリリースをビルドすると、rustc 1.12.0がSIGSEGVで終了しました
- Rustc 1.12.0 LLVMエラーで中断されたethcoreパッケージのWindowsアセンブリ
- 1.12.0:リリースバージョンをデバッグ情報とリンクするときに大量のメモリを使用した
- 1.12への移行後のメモリ破損
- 「NullaryConstructor =何か;」 内部コンパイラエラー:「インターンされたAdtDefを上書きしようとしました」
- ICEの修正:呼び出し/呼び出し/ストアのタイプが一致しない場合にビットキャストを挿入します
- debuginfo:MIR-transでのspread_argのより適切な処理。
さらに、さらに4つの回帰があります。 さまざまな理由により、1.12.1にそれらを含めないことにしましたが、できるだけ早くそれらを排除しようとします。
- ICEは関連するタイプのタイプに関連付けられている可能性がありますか?
- i686-pc-windows-gnu Betaで大きな静的phf :: Mapを使用してパッケージをコンパイルする際のエラー
- 退行:HRTB implでメソッドを2回呼び出すと「メソッドが見つかりません」エラー
- ICE:ダミータイプsizing_type_of
バージョン1.12.0と1.12.1間の変更点の完全なリストはこちらです。