Rust 1.0には例外はありません

錆のロゴ 今日、MozillaでRustの開発に最近参加した開発者のAaron Tyuronは、既存のtry!マクロ以外の例外メカニズムの実装の延期を発表しましtry! Rustプログラミング言語の最初のリリース後、無期限にResultと入力します。

これは、Rust 1.0にはファーストクラスの例外が存在しないことを意味します。つまり、言語の他の機能と完全に統合されています。

Rustでの現在のエラー処理には、 Result { Ok(value), Err(why) }タイプResult { Ok(value), Err(why) }およびマクロtry!Resultタイプは列挙型で、 Option { Some(value), None }に似ており、意味が関連しています。 オプションタイプのオプションNone 、値がないことを示し、タイプResultオプションErr(why) 、値が存在しない理由を指定します。

Rustは、戻り値または値を返すことができなかっ理由を渡すために、関数からResult型を返すことを提案しています。 マクロtry! また、別の関数の呼び出しが失敗した場合(タイプがResultオブジェクトに適用される場合Err(why) 、現在の関数からErr(why)を自動的に返すことができます。

これはコードでどのように見えるかです:
 enum MathError { DivisionByZero } // ,     fn div(x: f64, y: f64) -> Result<f64, MathError> { if y == 0.0 { Err(DivisionByZero) //   } else { Ok(x / y) } } //    Result fn div_user() -> () { match div(1.0, 0.0) { Err(why) => /*  , why   MathError */ Ok(result) => /*     result  f64 */ } } //       fn error_proxy() -> Result<f64, MathError> { let result1 = try!(div(1.0, 0.0)); let result2 = try!(div(1.0, result1)); div(1, result2); } 

これで、エラー処理に関するRustの可能性は、実際にはそこで終わります。

Rustは、強力な静的分析システムを備えた低レベルのプログラミング言語です。 たとえば、Rustの静的分析では、メモリを使用した不注意な作業は許可されません。 Rustの詳細については、 公式Webサイトで解析されたコードの例を参照してください(例: rustbyexample.com)OptionResulttry! 。 この言語は非営利組織Mozillaによって開発されており、Rust 1.0のリリースは2015年初頭に予定されています。

Source: https://habr.com/ru/post/J242269/


All Articles