Rust開発チームは、Rustの新しいバージョン1.33.0のリリースをお知らせします。 Rustは、誰もが信頼できる効率的なソフトウェアを作成できるようにするプログラミング言語です。
rustup
を使用して以前のバージョンのRustがインストールされているrustup
、Rustをバージョン1.33.0にアップグレードするには、次のrustup
を実行するだけです。
$ rustup update stable
rustup
まだインストールしていない場合は、当社のWebサイトの対応するページからインストールできます。 Rust 1.33.0の詳細なリリースノートは GitHubで入手できます。
安定バージョン1.33.0に含まれるもの
このリリースの主要な改善: const fn
機能の大幅な拡張と新しいPin APIの安定化。
const fn
拡張する
const fn
、 より多くのことができるようになりました 。
- 無条件(
const fn foo((x, y): (u8, u8)) { ... }
不能)パターンマッチング(たとえば、const fn foo((x, y): (u8, u8)) { ... }
) -
let
バインディング(例:let x = 1;
) - 可変
let
バインディング(例:let mut x = 1;
) - プロジェクションへの割り当てを含む代入式(たとえば
x = y
)および代入演算子(たとえばx += y
)(たとえば、構造体フィールドまたはインデックス演算子の結果x[3] = 42
) - 式ステートメント(例:
3;
)
これで、「const fn」から「const unsafe fn」を呼び出すことができます。次に例を示します。
const unsafe fn foo() -> i32 { 5 } const fn bar() -> i32 { unsafe { foo() } }
これらの改善により、標準ライブラリの多数の関数に定数を宣言することが可能になりました。 それらは、ライブラリセクションに以下にリストされています。
ピンAPI
このリリースでは、言語に新しいメカニズムが導入され、導入されました タイプstd ::ピン::ピンおよびマーカータイプUnpin 。 主なアイデアは、モジュールのドキュメント「std :: pin」で詳細に説明されています 。
オブジェクトの移動を禁止すると便利な場合があります。 メモリ内のアドレスの不変性を保証します。 この機能を使用する主なシナリオは、自己参照構造です。このようなオブジェクトを移動すると無効なポインターが発生し、未定義の動作(UB)が発生する可能性があるためです。
Pin<P>
は、タイプP
ポインターによって参照されるオブジェクトがメモリ内の固定位置を持つことを保証します。 彼は動かせず、彼の記憶は解放されません。 このような値は「固定」と呼ばれます。
このメカニズムは主にライブラリの作成者によって使用されることが予想されるため、ここでは詳細を詳しく説明しません(上記のリンクのドキュメントに記載されています)。 ただし、このAPIの安定化は、すべてのRustユーザーにとって重要なイベントです。なぜなら、それは非常に期待されているasync
/ await
への重要なステップだからです。 この方向の残りの作業のステータスは、 areweasyncyet.rsで監視できます。
「_」としてインポート
これで、エンティティを "_"としてインポートできます 。 これにより、現在のネームスペースに名前を入力せずに、特性実装をインポートできます。次に例を示します。
use std::io::Read as _; // : pub trait Read {}
詳細については、リリースノートを参照してください。
標準ライブラリの安定化
一定になったすべてのリストを次に示します。
- すべての数値タイプのoverflowing_ {add、sub、mul、shl、shr}メソッドは定数になりました。
- すべての数値型のメソッドrotate_left、rotate_right、およびwrapping_ {add、sub、mul、shl、shr}は定数になりました。
- すべての符号付き数値型のis_positiveおよびis_negativeメソッドは定数になりました。
- すべてのNonZeroタイプのgetメソッドは定数になりました。
- すべての数値型のメソッドcount_ones、count_zeros、leading_zeros、trailing_zeros、swap_bytes、from_be、from_le、to_be、to_leは定数になりました。
- Ipv4Addr ::新しいメソッドは現在は一定です。
さらに、次のAPIが安定化されます。
- unix :: FileExt :: read_exact_atおよびunix :: FileExt :: write_all_at
- オプション::転置および結果::転置
- 変換::アイデンティティ
- 上記のピン::ピンとマーカー:: ピンの 解除
- マーカー:: PhantomPinned
- Vec :: resize_withおよびVecDeque :: resize_with
- 期間:: as_millis 、 期間:: as_microsおよび期間:: as_nanos
詳細については、リリースノートを参照してください。
貨物の強化
最初のビルド中にファイルの1つが変更された場合、Cargoはクレートを再構築します。
詳細については、リリースノートを参照してください。
Crates.io
以前に発表したように 、このリリースからcrates.ioには、クレートを投稿するための確認メールアドレスが必要になります。 UTC 2019-03-01 00:00 UTCから、 cargo publish
の実行は、確認済みメールのないアカウントで失敗します。
これは、 DMCA要件を満たすために必要です。 貨物が最近のリリースで書いたこのことに関する警告に気づかなかった場合は、 crates.io/meにアクセスして、メールを示し確認してください。 この郵送先住所は決して公開されず、crates.ioの直接の機能にのみ使用されます。
開発者1.33.0
多くの人々が一緒になってRust 1.33を作成しました。 皆さん一人一人がいなければ、作業を完了できませんでした。 よろしくお願いします!