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

Mozilla プロジェクトによって設立され、現在は独立した非営利団体 Rust Foundation の後援の下で開発されている汎用プログラミング言語 Rust 1.65 のリリースが公開されました。 この言語はメモリの安全性に焦点を当てており、ガベージ コレクターとランタイムの使用を回避しながら、高いジョブ並列処理を実現する手段を提供します (ランタイムは、標準ライブラリの基本的な初期化とメンテナンスに短縮されます)。

Rust のメモリ処理メソッドは、開発者をポインタ操作時のエラーから守り、解放後のメモリ領域へのアクセス、null ポインタの逆参照、バッファ オーバーランなど、低レベルのメモリ処理によって発生する問題から保護します。 ライブラリを配布し、ビルドを提供し、依存関係を管理するために、プロジェクトは Cargo パッケージ マネージャーを開発します。 crates.io リポジトリは、ライブラリのホストとしてサポートされています。

Rustでは、参照チェック、オブジェクトの所有権の追跡、オブジェクトの有効期間(スコープ)の追跡、コード実行中のメモリアクセスの正確性の評価を通じて、コンパイル時にメモリの安全性が提供されます。 Rust は整数オーバーフローに対する保護も提供し、使用前に変数値の初期化を必須にし、標準ライブラリでエラーをより適切に処理し、デフォルトで不変参照と変数の概念を適用し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。

主な革新:

  • ジェネリック関連型 (GAT、ジェネリック関連型) のサポートが追加されました。これにより、別の型に関連付けられた型エイリアスを作成したり、型コンストラクターを特性に関連付けたりできるようになります。 trait Foo { type Bar<'x>; }
  • 「let ... else」式が実装され、「let」式内で直接パターン一致条件をチェックし、パターンが一致しない場合に任意のコードを実行できるようになりました。 let Ok(count) = u64::from_str(count_str) else {パニック!("整数を解析できません: '{count_str}'"); };
  • 終了するブロックを識別するブロック名 (ラベル) を使用して、break ステートメントを使用して名前付きブロックを途中で終了できるようにします。 let result = 'block: { do_thing(); ifcondition_not_met() { ブレーク 'ブロック 1; do_next_thing(); ifcondition_not_met() { ブレーク 'ブロック 2; do_last_thing(); 3 };
  • Linux の場合、以前は macOS プラットフォームでのみ利用可能であったデバッグ情報を個別に保存する機能 (split-debuginfo) が追加されました。 「-Csplit-debuginfo=unpacked」オプションを指定すると、DWARF 形式の debuginfo データが「.dwo」拡張子の付いた複数の個別のオブジェクト ファイルに保存されます。 「-Csplit-debuginfo=packed」を指定すると、プロジェクトのすべての debuginfo データを含む単一のパッケージが「.dwp」形式で作成されます。 debuginfo を ELF オブジェクトの .debug_* セクションに直接統合するには、「-Csplit-debuginfo=off」オプションを使用できます。
  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • std::backtrace::バックトレース
    • Bound::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、関数 <*const T&>::offset_from および <*mut T>::offset_from で使用されます。
  • LSP (Language Server Protocol) プロトコルの実装を Rust-analyzer に移行する最終段階の一環として、Rust Language Server (RLS) の古い実装は、次への切り替えを提案する警告を発行するスタブ サーバーに置き換えられました。錆分析装置を使用して。
  • コンパイル中に、MIR 中間コードのインライン展開のサポートが有効になり、一般的なクレート パッケージのコンパイルが 3 ~ 10% 高速化されます。
  • スケジュールされたビルドを高速化するために、Cargo パッケージ マネージャーはキュー内で実行を待機しているジョブを並べ替えます。

さらに、ボルボにおける自動車情報システムのコンポーネント開発における Rust 言語の使用に関するインタビューにも注目してください。 既存のテスト済みのコードを Rust で書き直す予定はありませんが、新しいコードの場合、Rust は低コストで品質を向上させるための好ましいオプションの XNUMX つです。 Rust 言語の使用に関連するワーキング グループは、自動車関連団体の AUTOSAR (AUTomotive Open System ARchitecture) および SAE (Society of Automotive Engineers) にも設立されています。

さらに、Googleのエンジニアリング担当副社長であるDavid Kleidermacher氏は、暗号化キーを管理するためにAndroidプラットフォームで使用されるコードのRustへの変換と、スタック内のDNS over HTTPSプロトコルの実装におけるRustの使用について語った。 UWB チップ (超広帯域) および Tensor G2 チップに関連付けられた仮想化フレームワーク (Android 仮想化フレームワーク) 用。 Rust で書き直された Bluetooth と Wi-Fi 用の新しいスタックも Android 用に開発されています。 一般的な戦略は、最初に最も脆弱で重要なソフトウェア コンポーネントを Rust に変換し、次に他の関連サブシステムに拡張することで、セキュリティを徐々に強化することです。 昨年、Rust 言語が Android プラットフォームの開発に許可されている言語のリストに追加されました。

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

コメントを追加します