Выбор ответа Senior Ошибки обновлено
Сколько стоят ошибки в Swift
Вопрос
Почему бросание ошибки в Swift дешевле, чем исключение в C++ или Java?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка возвращается как значение в регистре, без раскрутки стека. Swift реализует throws как особое соглашение о вызове: ошибка возвращается в выделенном регистре, и вызывающий проверяет его после вызова.
Варианты ответа
- Swift обрабатывает ошибки в отдельном потоке, не задерживая основной
- Ошибка возвращается как значение в регистре, без раскрутки стекаправильный ответ
- Ошибки кешируются рантаймом и не создаются заново при каждом броске
- Это не так: под капотом
throwsиспользует те же исключения C++
Разбор
Swift реализует throws как особое соглашение о вызове: ошибка возвращается в выделенном регистре, и вызывающий проверяет его после вызова. Нет поиска обработчика по таблицам и тяжёлой раскрутки стека, поэтому стоимость близка к обычному возврату. Отдельных потоков и кешей нет, и с исключениями C++ механизм не совпадает. Отсюда идиома: ошибки в Swift нормальная часть потока управления, а не исключительная ситуация.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Ошибки»
- assert, precondition и fatalError
- Синтаксис do/try/catch
- Отмена задачи и ошибки
- Как объявить свою ошибку в Swift
- Конвертация между Result и throws
- Задача на Swift: калькулятор в обратной польской записи с ошибками
- Задача на Swift: валидация формы регистрации
- Формы try в Swift