Rust 1.9のお知らせ

Rust 1.9の新しいバージョンをご紹介します。 Rustは、メモリ、速度、およびコードの並列実行による安全な作業を目的としたシステムプログラミング言語です。







いつものように、公式Webサイトの対応するページからRust 1.9インストールできます。また、GitHubでこのバージョンの変更点の詳細なリストを確認できます。 このリリースには、約1,400のパッチが含まれています。







安定版1.9に含まれるもの



ガイド付きスタックの巻き戻し



Rust 1.9の最大の変更点は、 std::panic



モジュールの安定化です。このモジュールは、パニックによってトリガーされたスタックの巻き戻しプロセスを停止するメソッドを提供します。







 use std::panic; let result = panic::catch_unwind(|| { println!("!"); }); assert!(result.is_ok()); let result = panic::catch_unwind(|| { panic!(" !"); }); assert!(result.is_err());
      
      





このインターフェイスはRFC 1236で定義されました







一般に、Rustは2種類のエラー状況を区別します。









予想される問題は通常、プログラムが制御できない状況が原因で発生します。 信頼できるコードは、その環境で発生するトラブルに備えて準備する必要があります。 Rustでは、期待される問題はResult



を使用して処理されます。これにより、関数は問題に関する情報を呼び出し元に返すことができ、呼び出し元は既にエラーを処理できます。 これは、エラーを処理する非常に正確な方法です。







予期しない問題はバグです。それらは契約違反またはアサーションが原因で発生します。 それらの発生は予想外であるため、このようなエラーを正確に処理する意味はほとんどありません。 代わりに、Rustは「フェイルファースト」アプローチを使用します。このようなエラーは、デフォルトで、エラーが発生したスレッドスタックの巻き戻しを開始するパニックを引き起こします。 この場合、デストラクタのみが実行され、他のコードは実行されません。 他のスレッドは引き続き実行されますが、パニックストリームとデータを交換しようとするとパニックになります(チャネルまたは共有メモリを介して)。 したがって、パニックはある種の「分離境界」まで実行を中断します。 境界線の反対側のコードは引き続き動作し、パニックからプログラムを復元する場合は、「失礼」な方法で実行できます。 たとえば、サーバーは、スレッドの1つでアサートが失敗したために必ずしもクラッシュするわけではありません。







新しいcatch_unwind



インターフェイスは、ストリーム内に追加の分離境界を導入する方法を提供します 。 これが役立つ場合の例がいくつかあります。









最初のケースは、潜在的にあいまいな動作でした。 実際には、別の言語に巻き戻すと、しばしばセグメンテーション違反が発生します。 パニックをキャッチできるように、C APIとしてのRustコードのエクスポートを簡素化します。Cへの移行の境界でパニックをキャッチし、リターンコードに変換できるようになりました。







2番目のケースは、スレッドプールライブラリによるものです。 プール内のスレッドがパニックになった場合、通常、スレッド自体を強制終了する必要はありません。 代わりに、パニックをキャッチして、プールのクライアントに報告する必要があります。 catch_unwind



インターフェースにはresume_unwind



関数resume_unwind



、これを使用して、所属するプールのクライアント側でパニックプロセスを再起動できます。







どちらの場合も、フロー内に追加の分離境界を導入し、パニックを別のタイプのエラーに変換します。







最後の注意点: catch_unwind



なくcatch_panic



理由 別のパニック戦略を追加する作業が進行中です :プロセス全体を中止(中止)します。 この場合、共通のフックが実行されます。 一部のアプリケーションでは、これがプログラミングエラーを処理する最も賢明な方法であり、スタックの巻き戻しを防止することでパフォーマンスが向上し、コードサイズが小さくなります。







非推奨の警告



ライブラリ作成者は、新しい属性#[deprecated]



使用できます。 この属性を使用すると、古いインターフェイスをマークでき、ライブラリユーザーはそれを使用するときに警告を受け取ります。 この場合、新しい推奨交換インターフェースを指定できます。 廃止されたインターフェースに関する警告は、標準ライブラリで長い間使用されてきましたが、 RFC 1270のおかげで、Rustエコシステム全体で使用できるようになりました。







新しいコンパイルプラットフォーム



現在、いくつかの新しいプラットフォーム用にコンパイルされた標準ライブラリが公開されています。









最初の2つのプラットフォームは、クロスコンパイルに関して特に興味深いものです。 最近のrustup



詳細を
参照してください







コンパイルの高速化



型の統一中に変数の等価性をチェックする時間的な複雑さは 、O(n!)からO(n)に削減されました。 この結果、一部のコードサンプルははるかに高速にコンパイルされます。







専門化の使用を展開する



このリリースで 、標準ライブラリで最初に特殊化が使用されます。 現在、スペシャライゼーションは夜間にのみ利用できます。 これにより、より具体的なタイプの汎用コードを特化することができます。







標準ライブラリでこれが発生する1つの例は、文字列のスライス( &str



)から独自の文字列( String



)への変換です。 to_string



メソッドは、特殊なto_owned



メソッドよりも低速であった汎用インターフェイスから取得されます。 現在、これらの関数は同等です。







この単純なケースを実装したら、専門化によって生産性を向上できる他の場所に進みます。







ライブラリの安定化



1.9では、約80個のライブラリ関数が安定化されています。 最も顕著な変更は、前述のstd::panic



モジュールです。 彼以外にもいくつかのことがあります。







ネットワーキング









コレクション









エンコーディング









ポインタ









最後に、 libcore



多くのタイプには、 Debug



libcore



実装がありませんでした。 これはリリース1.9で修正されました。







詳細はこちらをご覧ください







貨物の特徴



貨物には2つの大きな変更があります。







まず、複数の貨物プロセスが同時に機能するようになりました







次に、新しいフラグRUSTFLAGS



追加れました。 このフラグを使用すると、 rustc



が環境を通過する任意のフラグを指定できます。 これは、たとえばパッケージパッカーに便利です。







詳細はこちらをご覧ください







開発者バージョン1.9



バージョン1.9のリリースには127人が参加しました。 どうもありがとう!







開発者リスト
  • アーロン・ツロン
  • アビシェーク・チャンダ
  • アドルフォ・オカガビア
  • エイダン・ホブソン・セイヤーズ
  • アラン・サマーズ
  • アレハンドロ・ワインジンガー
  • アレクセイ・クラドフ
  • アレックスブルカ
  • アレックス・クリトン
  • アマニユー・ダントラス
  • アンドレア・カンチャーニ
  • アンドレアス・リンツ
  • アンドリュー・カンティーノ
  • アンドリュー・ホートン
  • アンドリュー・パセルティナー
  • アンドレイ・チェルカシン
  • アンガス・リーズ
  • アリエル・ベン・イェフダ
  • ベンジャミン・ハー
  • ビョルン・シュタインブリンク
  • ブライアン・アンダーソン
  • ブライアン・ボウマン
  • クリスチャン・ウェッセルホイフト
  • クリストファー・セア
  • コリー・ファーウェル
  • クレイグ・M・ブランデンブルク
  • シリル・プルトニツキ・チュディック
  • ダニエル・J・ロリンズ
  • デイブ・ハズビー
  • デビッドAOロザノ
  • デビッド・ヘニングソン
  • デボン・ホロウード
  • ダーク・ガズデン
  • ダグ・ゴールドスタイン
  • エデュアルド・ブルテスク
  • エドゥアルド・ミハイ・ブルテスク
  • エリ・フリードマン
  • エマニュエル・チライ
  • エリック・トリゼル
  • エヴァン
  • フェリックス・S・クロックII
  • フロリアン・バーガー
  • ジェフ・カトリン
  • ギョーム・ゴメス
  • ゴーカン・カラブルト
  • JPシュガーブロード
  • ジェームズ・ミラー
  • ジェフリー・セイフリード
  • ジョン・タリング
  • ジョナス・シエヴィンク
  • ジョナサン
  • ホルヘ・アパリシオ
  • ジョシュア・ホルマー
  • 野田改
  • カマル・マルヒビ
  • カッツェ
  • ケビン・ブラザラー
  • ケビン・バトラー
  • マニッシュゴレガオカル
  • マルクス・ウェスターリンド
  • マーヴィン・レーベル
  • マスード・マレカッセミ
  • マット・ブルーベック
  • マイケル・フイン
  • マイケル・ノイマン
  • マイケル・ウーリスター
  • Ms2ger
  • 野田カイ
  • ネイサン・クライン
  • ニック・キャメロン
  • ニコ・マタキス
  • ノア
  • ノヴォトニク、ペトル
  • オリバー・ミドルトン
  • オリバー・シュナイダー
  • フィリップ・オッパーマン
  • Piotr czarnecki
  • ピフィシュ
  • リコ・ヒーリー
  • ルード・ファン・アッセルドンク
  • スコット・オルソン
  • ショーン・マクター
  • セバスチャン・ウィッキ
  • ソ・サンヒョン
  • サイモン・サパン
  • シモナス・カズラウスカス
  • スティーブ・クラブニック
  • スティーブンアレン
  • スティーブン・ファクラー
  • ステューブラック
  • セバスチャン・マリー
  • 唐成龍
  • テッド・ホルスト
  • ティッキ
  • ティム・モンタギュー
  • ティム・ノイマン
  • ティモン・ヴァン・オーバーベルト
  • トビアス・ブッチャー
  • トビアス・ミュラー
  • トッド・ルーカス
  • トム・トロミー
  • シェパンレコンホーベ
  • ウルリック・スヴェルドラップ
  • ヴァディム・ペトロチェンコフ
  • バレンティン・ローレンツ
  • バルンバット
  • ワン・スエルイ
  • 王山呂
  • ヨーク翔
  • arcnmx
  • アシュレイソマー
  • ボール
  • ゴメス
  • ゴーヒダ
  • ituxbag
  • みた
  • ニコラスフ
  • ピートバイン
  • ピエルチャルスキ
  • プラビック
  • スリニバスレディ
  • tiehuis
  • ub山
  • 放浪者
  • 菜食
  • ブラスタチュ
  • ヴァレリー・ラシュマノフ



All Articles