В Rust 1.0 исключений не будет
Сегодня Аарон Тюрон — разработчик, недавно присоединившийся к разработке Rust в Mozilla — объявил об отсрочке реализации какого-либо механизма исключений, кроме уже существующего макроса try! и типа Result, до неопределённого момента после первого релиза языка программирования Rust.Это означает, что в Rust 1.0 будут отсутствовать исключения первого класса — то есть, полностью интегрированные с другими фичами языка.
Для обработки ошибок в данной момент в Rust существует тип Result { Ok (value), Err (why) } и макрос try!. Тип Result представляет из себя перечисление (enum), похожее на Option { Some (value), None } и связанное с ним по смыслу. Вариант None типа Option говорит об отстутствии значения, а вариант Err (why) типа Result уточняет, почему значение отсутствует.
Rust предлагает возвращать тип Result из функций, чтобы передавать значение возврата или причину, по которой значение вернуть не удалось. Макрос try! в свою очередь позволяет автоматически возвращать Err (why) из текущей функции, если вызов другой функции не удался (применяется к объекту типа Result).Вот так это выглядит в коде:
enum MathError { DivisionByZero }
// функция, не всегда завершающаяся успешно
fn div (x: f64, y: f64) → Result
// пример ручного раскрытия Result fn div_user () → () { match div (1.0, 0.0) { Err (why) => /* обработки ошибки, why имеет тип MathError */ Ok (result) => /* успешный результат в переменной result типа f64 */ } }
// пример автоматического возврата ошибок из функции
fn error_proxy () → Result