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

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

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

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

主な革新:

  • main 関数から独自のリターン コードを定義することができます。元々、Rust の main 関数は型 "()" (unit) のみを返すことができ、開発者が明示的に "process::exit(code)" 関数を呼び出さない限り、常に成功終了ステータスを示していました。 Rust 1.26では、main関数で不安定なTerminationトレイトを利用することで、CプログラムのEXIT_SUCCESSやEXIT_FAILUREコードに相当する値「Ok」や「Err」を返すことが可能でした。 Rust 1.61では、Terminationトレイトが安定し、特定のリターンコードを表す別のExitCodeタイプが提案されています。これは、事前定義された定数SUCCESSとFAILUREの両方とFromメソッドを提供することでプラットフォーム固有のリターンタイプを抽象化します。任意のリターンコードを返します。 std::process::ExitCode を使用します。 fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8);終了コード::成功 }
  • 「const fn」式を使用して定義された関数の追加機能が安定しました。これは、通常の関数として呼び出すだけでなく、定数の代わりに任意のコンテキストで使用することもできます。これらの関数は実行時ではなくコンパイル時に計算されるため、定数からのみ読み取る機能など、特定の制限が適用されます。新しいバージョンでは、関数ポインターを使用した基本的な操作が const 関数内で許可されます (ポインターの作成、渡し、キャストは許可されますが、ポインターによる関数の呼び出しは許可されません)。 T: Copy などの const 関数の汎用パラメーターの特性境界。動的にディスパッチ可能な特性 (dyn 特性)。 impl 関数の引数と戻り値の特性タイプ。
  • std::io のストリーム ハンドル Stdin、Stdout、および Stderr には、ロック時に静的有効期間 (「静的」) が設定され、「let out = std::io::stdout().lock();」のような構成が可能になりました。 XNUMX つの式でハンドルを取得し、ロックを設定します。
  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • ピン::static_mut
    • ピン::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • カーソルの書き込み
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::終了
    • std::thread::JoinHandle::is_finished
  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、関数で使用されます。
    • ::offset および ::offset
    • ::wrapping_offset および ::wrapping_offset
    • ::add および ::add
    • ::sub および ::sub
    • ::wrapping_add および ::wrapping_add
    • ::wrapping_sub および ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_range
    • ::as_mut_ptr_range

さらに、ファームウェアで使用される Xous マイクロカーネル オペレーティング システムの開発中に Rust 言語に 100 万行のコードを記述した後の、Rust 言語の印象をまとめた記事「Rust: A Critical Retrospective」にも注目してください。欠点としては、構文の理解が難しいこと、言語の不完全性と継続的な開発、反復可能なビルドの欠如、Crates.io の依存関係の信頼に関する典型的な問題、安全なコードを書くために一定の規律を維持する必要性などが挙げられます。期待を超えた機能には、コードをリファクタリングしたり、ラピッド プロトタイピング中に追加された「ハック」を再加工したりするためのツールが含まれます。

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

コメントを追加します