Rust 1.36 プログラミング言語のリリース

公開済み システムプログラミング言語のリリース 錆1.36, Mozilla プロジェクトによって設立されました。 この言語はメモリの安全性に重点を置き、自動メモリ管理を提供し、ガベージ コレクターやランタイムを使用せずに高いタスクの並列処理を実現する手段を提供します。

Rust の自動メモリ管理により、開発者はポインタ操作から解放され、解放後のメモリ アクセス、null ポインタの逆参照、バッファ オーバーランなどの低レベルのメモリ操作から生じる問題から保護されます。 プロジェクトごとにライブラリを配布し、確実にアセンブリし、依存関係を管理するためのパッケージ マネージャーが開発されています。 貨物を使用すると、プログラムに必要なライブラリをワンクリックで取得できます。 リポジトリはライブラリをホストするためにサポートされています crates.io.

メイン イノベーション:

  • 特性が安定しました 未来これは、async / .await ブロックの使用中に評価がまだ完了していない可能性がある値を表します。 Future を使用して定義された非同期値により、特定の値の計算の完了を待ちながら、スレッド内で有用な作業の実行を継続することができます。
  • ライブラリが安定しました 割り当てる、メモリ割り当て値を管理するためのスマート ポインターとコレクションを提供します。 std でのメモリ割り当てでは、タイプが使用されるようになりました。 ベク、alloc から再エクスポートされます。 alloc を個別に使用することは、std に関連付けられていないアプリケーション (「#![no_std]」) だけでなく、std を使用しない同様のプログラムで使用するように設計されたライブラリでも意味があります。
  • 値が正しく初期化されているかどうかのチェックをバイパスするには 提案された 中間型 たぶんユニットこれは、より安全な代替手段として mem::uninitialized 関数の代わりに使用できます。 mem::uninitialized 関数は配列をすばやく作成するのに便利ですが、初期化されているように見えても実際には値が初期化されていないため、コンパイラに誤解を与えます。 MaybeUninit を使用すると、値が初期化されていないことをコンパイラに明示的に示し、これに関連する可能性のある未定義の動作を考慮に入れることができます。また、「maybe_t:」と段階的な初期化を通じてプログラム内のチェックを整理し、その完了をマークすることもできます。 「.assume_init()」呼び出しを使用します。 MaybeUninit の出現により、mem::uninitialized 関数は非推奨となり、使用は推奨されません。
  • 借用した変数の有効期間を記録するシステムを拡張した NLL (Non-Lexical Lifetimes) 手法が、Rust 2015 言語用に安定しました (当初、NLL は Rust 2018 でのみサポートされていました)。 NLL は、字句レベルでライフタイムをコミットするのではなく、実行フロー グラフ内のポインターのセットのレベルでコミットします。このアプローチにより、変数の借用のチェック (借用チェッカー) の品質が向上し、以前はエラーが発生していた一部の種類の正しいコードの実行が可能になります。新しい動作により、デバッグもはるかに簡単になります。
  • 連想配列の新しい実装が含まれています ハッシュマップ、構造の応用に基づいて スイステーブル (自動的にロードされる ハッシュブラウン::ハッシュマップただし、特に明示的に指定されていない限り、たとえば std::HashMap は SipHash 1 ~ 3 に基づいています)。ソフトウェア インターフェイスは同じままですが、開発者にとって顕著な違いは、要約すると、パフォーマンスの向上とメモリ消費量の削減です。
  • パッケージマネージャーのカーゴ内 追加した 「--offline」オプションは、ネットワークにアクセスせずに操作を有効にし、依存関係をインストールするときにローカル システムにキャッシュされたパッケージのみが使用されます。依存関係がローカル キャッシュにない場合は、エラーがスローされます。オフラインになる前に依存関係をローカル キャッシュにプリロードするには、「cargo fetch」コマンドを使用します。
  • マクロ「dbg!」を呼び出す機能を実装しました。いくつかの引数を示します。
  • メソッドには、定数の代わりにあらゆるコンテキストでの使用の可能性を決定する「const」属性が使用されます。
    レイアウト::from_size_align_unchecked、
    mem::needs_drop、
    NonNull::dangling および
    NonNull::cast;

  • 安定化されたメソッドを含む、API の新しい部分が安定化カテゴリに移行されました。
    タスク::ウェイカー、タスク::投票、
    VecDeque::rotate_left、VecDeque::rotate_right、
    読み取り::read_vectored、書き込み::write_vectored、
    イテレータ::コピーされました、
    BorrowMut (文字列用) と str::as_mut_ptr。

出所: オープンネット.ru

コメントを追加します