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

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

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

主な革新:

  • Cargo パッケージ マネージャーには、crates.io パブリック レジストリと共存できる代替パッケージ レジストリを操作するためのツールが追加されました。 たとえば、プロプライエタリなアプリケーションの開発者は、Cargo.toml で依存関係をリストするときに使用できる独自のプライベート レジストリを使用できるようになり、製品に crates.io と同様のバージョン管理モデルを適用したり、依存関係を両方のクレートに参照したりできるようになります。 io と独自のレジストリにコピーします。

    外部レジストリを ~/.cargo/config に追加するには
    新しいオプション「my-registry」が「[registries]」セクションに提供され、「other-crate」オプションが追加されて、Cargo.toml の依存関係内の外部レジストリを「[dependency]」セクションに記述します。 追加のレジストリに接続するには、認証トークンを ~/.cargo/credentials ファイルに配置してコマンドを実行するだけです。
    「cargo login --registry=my-registry」とパッケージを公開するには -
    "cargo public -registry=my-registry";

  • 「?」演算子の使用に対する完全なサポートが追加されました。 doctests では、ドキュメントのサンプルコードをテストとして使用できます。 以前のオペレーター
    「?」 「fn main()」関数または「#[test]」関数が存在する場合にのみ、テスト実行中のエラーを処理するために使用できます。

  • プロシージャルマクロを使用して定義されたカスタム属性では、任意のトークンのセット (“#[attr($tokens)]”、“#[attr[$tokens]]、および #[attr{$tokens}]”) を使用できます。 以前は、要素は文字列リテラル (例: “#[foo(bar, baz(quux, foo = “bar”))] を使用してツリー/再帰形式でのみ指定できましたが、現在は列挙型 (' #[range(0. .10)]') および「#[bound(T: MyTrait)]」のような構造。
  • TryFrom および TryInto トレイトが安定し、エラー処理を伴う型変換が可能になりました。 たとえば、整数型の from_be_bytes などのメソッドは入力として配列を使用しますが、データは多くの場合スライス型であり、配列とスライス間の変換を手動で行うには問題があります。 新しいトレイトの助けを借りて、指定された操作は .try_into() の呼び出しを通じてオンザフライで実行できます (たとえば、「let num = u32::from_be_bytes(slice.try_into()?)」)。 常に成功する変換 (たとえば、タイプ u8 から u32 へ) の場合、Infallible エラー タイプが追加され、透過的に使用できるようになりました。
    "From" の既存のすべての実装の TryFrom。

  • CommandExt::before_exec 関数を非推奨にしました。これにより、fork() 呼び出し後にフォークされた子プロセスのコンテキストで実行される exec の前にハンドラーを実行できるようになりました。 このような状況では、ファイル記述子やマップされたメモリ領域などの親プロセスの一部のリソースが重複する可能性があり、これによりライブラリの未定義の動作や誤った動作が発生する可能性があります。
    before_exec の代わりに、安全でない関数 CommandExt::pre_exec を使用することをお勧めします。

  • 8 ~ 64 ビットのサイズ範囲の安定化された符号付きおよび符号なしアトミック整数型 (AtomicU8 など)、および符号付き型 NonZeroI[8|16|32|54|128]。
  • Any::type_id、Error::type_id、slice::sort_by_cached_key、str::escape_*、str::split_ascii_whitespace、Instant::checked_[add|sub などの API の新しい部分が安定したカテゴリに移動されました。 ] および SystemTime メソッド::checked_[add|sub] が安定しました。 iter::from_fn 関数と iter::successors 関数が安定しました。
  • すべての整数型に対して、checked_pow、saturating_pow、wraping_pow、およびoverflowing_powメソッドが実装されています。
  • 「-C linker-plugin-lto」ビルドオプションを指定することで、リンク段階での最適化を有効にする機能が追加されました(rustcはRustコードをLLVMビットコードにコンパイルし、LTO最適化を適用できるようにします)。

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

コメントを追加します