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

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

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

メイン イノベーション:

  • パイプライン コンパイル モード (パイプライン) が追加されました。このモードでは、依存関係メタデータが利用可能になるとすぐに、コンパイルの完了を待たずに、依存クレート パッケージのビルドが開始されます。パッケージをコンパイルする場合、依存関係を完全に組み立てる必要はなく、タイプ、依存関係、エクスポートされた要素のリストを含むメタデータを定義するだけで済みます。メタデータはコンパイル プロセスの早い段階で利用できるようになるため、リンクされたパッケージをより早い段階でコンパイルできるようになりました。単一のパッケージをビルドする場合、提案されたモードはパフォーマンスに影響しませんが、分岐した依存関係を持つパッケージをビルドでカバーする場合、全体のビルド時間を 10 ~ 20% 短縮できます。
  • 機能の不正使用を確実に検出 std::mem::初期化されていない и std::mem::zeroed。たとえば、 std::mem::uninitialized は配列をすばやく作成するのに便利ですが、初期化されているように見えても実際には値が初期化されていないため、コンパイラに誤解を与えます。 mem::uninitialized 関数はすでに非推奨としてマークされており、代わりに中間型を使用することをお勧めします。 たぶんユニット。 mem::zeroed と同様に、この関数はゼロ値を受け入れることができない型で問題を引き起こす可能性があります。

    未定義の動作を特定しやすくするために、新しいリリースでは、mem::uninitialized または mem::zeroed に関するいくつかの問題を検出する lint チェックがコンパイラに追加されています。たとえば、null 値を受け入れることができないポインタ オブジェクトを表す &T および Box«T› 型で mem::uninitialized または mem::zeroed を使用しようとすると、エラーが発生するようになりました。

  • 「#[deprecated]」属性が拡張され、クレート パッケージを廃止としてマークし、将来の削除をスケジュールできるようになりました。 Rust 1.38 では、この属性はマクロにも使用できます。
  • サブモジュールで「#[global_allocator]」属性を使用する機能が追加されました。
  • 追加機能 std::any::type_nameこれにより、型の名前を調べることができ、デバッグの目的で役立ちます。たとえば、プログラムの実行中に、関数がどの型で呼び出されたかを知ることができます。

    fn gen_value‹T: デフォルト>() -› T {
    println!("{} のインスタンスを初期化しています", std::any::type_name::‹T›());
    デフォルト::デフォルト()
    }

    fn main() {
    let _: i32 = gen_value(); # 「i32」が出力されます
    let _: 文字列 = gen_value(); # 「alloc::string::String」を出力します
    }

  • 標準ライブラリの拡張機能:
    • スライス::{concat, connect, join} は、&T; に加えて値 &[T] を取ることができるようになりました。
    • 「*const T」と「*mut T」は marker::Unpin を実装するようになりました。
    • 「Arc‹[T]›」と「Rc‹[T]›」は FromIterator‹T› を実装するようになりました。
    • iter::{StepBy, Peekable, Take} は DoubleEndedIterator を実装するようになりました。
    • ascii::EscapeDefault はクローンと表示を実装します。
  • 安定化されたメソッドを含む、API の新しい部分が安定化カテゴリに移行されました。
    • ‹*const T›::cast、 ‹*mut T›::cast、
    • 期間::as_secs_f{32|64}、
    • 期間::div_duration_f{32|64}、
    • 期間::div_f{32|64}、
    • 期間::from_secs_f{32|64}、
    • 期間::mul_f{32|64}、
    • 剰余による除算演算
      すべての整数プリミティブの div_euclid および rem_euclid。

  • カーゴパッケージマネージャーでさまざまな機能を有効にするために「--features」オプションを複数回指定するためのサポートが追加されました。
  • コンパイラは XNUMX 番目の機能を提供します。 レベル ターゲット プラットフォームのサポート aarch64-uwp-windows-msvc、i686-uwp-windows-gnu、i686-uwp-windows-msvc、x86_64-uwp-windows-gnu、x86_64-uwp-windows-msvc ターゲット、armv7-unknown-linux -gnueabi、armv7-unknown-linux-musleabi、hexagon-unknown-linux-musl、および riscv32i-unknown-none-elf。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テストや公式ビルドの公開は含まれません。

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

コメントを追加します