Обработка ошибок в Rust, наконец-то наглядно (полный курс)
Rust It Over
0:00 / 0:00
Обработка ошибок в Rust, наконец-то наглядно (полный курс)
919 просмотров · 1 мес. назад
Rust It Over
731 подписчик
919 просмотров · 1 мес. назад
Каждый новичок уже знает три лозунга об обработке ошибок в Rust — «никогда не используйте unwrap», «вопросительный знак просто разворачивает код», «в Rust нет исключений» — и каждый из них наполовину неверен. Этот фильм развенчивает все три, глава за главой, с реальным выводом компилятора и панической ошибкой. 16 глав, построенных вокруг одного вопроса, задаваемого каждой строке: является ли эта ошибка возвращаемым значением или ошибкой, на которой следует остановиться?
Что вы усвоите:
· Даже «42» возвращается в обернутом виде: parse никогда не возвращает число, он возвращает Result — и собственное решение rustc заключается в том, чтобы развернуть его, вызывая панику при Err.
· Option отвечает на вопрос «есть ли здесь что-то?», а None не требует объяснения; Result отвечает на вопрос «сработало ли это?», а Err содержит причину, которая может различать типы ошибок.
· • Функция `match` обрабатывает обе ветви обработки; если `let` обрабатывает одну и игнорирует другую, `let-else` сохраняет значение и заставляет другую ветвь покинуть функцию — это показано реальным выводом терминала, а не просто описанием.
• Паника — это не сбой: при стратегии размотки стека по умолчанию она выводит сообщение, запускает деструкторы в обратном порядке, а затем завершает работу с кодом 101 — и завершает только поток, в котором это произошло, а не всегда всю программу.
• Утверждение «Никогда не используйте unwrap» неверно так же, как и «всегда используйте unwrap»: это утверждение верно, когда сбой означает ошибку в вашем собственном коде, и неверно, когда пользователь может его вызвать.
• Аргумент `unwrap_or` оценивается каждый раз, даже на пути, где он не нужен — `unwrap_or_else` вызывает свою функцию только тогда, когда действительно требуется значение по умолчанию.
• Вопросительный знак — это совпадение плюс возврат — при ошибке Err он возвращается из объемлющей функции, а на обратном пути обрабатывает ошибку с помощью From, что в этом фильме показано в действии, а не просто как сбой компиляции.
• Box‹dyn Error› позволяет вопросительному знаку распространять несвязанные типы ошибок без каких-либо преобразований, выполненных вручную.
• Функция main может возвращать Result: при ошибке Err она выводит "Error:" плюс отладочную форму ошибки и завершает работу с кодом 1 — не панику и не 101.
• Функция collect на итераторе Results сохраняет первую ошибку и останавливается — последующие элементы даже не оцениваются.
Разделы:
0:00 Даже "42" возвращается в обертке
1:16 Никто ничего не говорит. Err объясняет почему.
2:16 Три способа открыть результат
3:09 Паника устраняет последствия до того, как исчезнет
4:24 Функция unwrap работает, когда сбой означает ошибку
5:26 Комбинаторы — это железнодорожные стрелки
6:13 Резервный вариант, за который вы все равно заплатили
7:22 Вопросительный знак — это совпадение и возврат
8:23 Вопросительный знак не перейдет из варианта в результат
9:22 Вопросительный знак преобразует — только на красном пути
10:25 Одна ячейка, содержащая любую ошибку
11:18 Что выводит main при сбое
12:11 Ошибка может содержать ошибку, которая ее вызвала
13:06 thiserror для библиотек, в любом случае для приложений
14:14 collect останавливается на первой ошибке
15:04 Ошибки — это значения. Паника — это ошибки.
Каждый фрагмент кода в этом видео был скомпилирован и запущен на rustc 1.98.0 (версия 2021 года) во время его написания. Каждая ошибка компилятора, сообщение о панике и код завершения на экране — это реальный вывод, а не имитация. В главе 14 также зафиксированы anyhow 1.0.104 и thiserror 2.0.20 — два крейта от одного автора, Дэвида Толнея.
Новичок в Rust? Начните здесь:
▶ Визуализация владения и заимствования в Rust: • Rust Ownership & Borrowing, Finally Visual...
Больше визуализации Rust:
▶ Визуализация параллельного программирования в Rust: https://www.youtube.com/@RustItOver/v...
Логотип Rust © Rust Foundation, CC-BY 4.0, изменен.
— Rust, визуализация. Без лишних деталей, без лишнего. —
▶ Подпишитесь: https://www.youtube.com/@RustItOver?s...
🦀 Тик Ток: / rust.it.over
#rust #rustlang #обработка ошибок