Выбор ответа Senior Ошибки обновлено

Сколько стоят ошибки в Swift

Вопрос

Почему бросание ошибки в Swift дешевле, чем исключение в C++ или Java?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Ошибка возвращается как значение в регистре, без раскрутки стека. Swift реализует throws как особое соглашение о вызове: ошибка возвращается в выделенном регистре, и вызывающий проверяет его после вызова.

Варианты ответа

  1. Swift обрабатывает ошибки в отдельном потоке, не задерживая основной
  2. Ошибка возвращается как значение в регистре, без раскрутки стекаправильный ответ
  3. Ошибки кешируются рантаймом и не создаются заново при каждом броске
  4. Это не так: под капотом throws использует те же исключения C++

Разбор

Swift реализует throws как особое соглашение о вызове: ошибка возвращается в выделенном регистре, и вызывающий проверяет его после вызова. Нет поиска обработчика по таблицам и тяжёлой раскрутки стека, поэтому стоимость близка к обычному возврату. Отдельных потоков и кешей нет, и с исключениями C++ механизм не совпадает. Отсюда идиома: ошибки в Swift нормальная часть потока управления, а не исключительная ситуация.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.