Влияет ли бросание серьезно на производительность в Swift? - PullRequest
1 голос
/ 18 апреля 2019

Я читал в других потоках, таких как this one, что создание исключения в языке, подобном c ++, должно быть тем, что вы делаете только в действительно исключительных обстоятельствах, потому что компилятор работает изо всех силсделать так, чтобы код работал максимально быстро в случае без исключения, а затем заплатил бы цену за эту скорость, имея дорогие случаи исключения.Это то, что происходит и в Swift?

Разработчики Swift, как правило, предпочитают создавать исключения, и мне интересно, стоит ли мне избегать использования шаблона do-try-catch.

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

Думайте о throw и catch в Swift как о безопасной, контролируемой форме goto или jump. Это безопасно и контролируется, потому что компилятор следит за тем, что вы не можете выбросить, если там нет кого-то, кого можно поймать. Что произойдет при каких обстоятельствах, таким образом, полностью известно во время компиляции .

Это полностью отличается от исключений Objc, когда ничего не известно заранее, и во время выполнения мы просто начинаем вслепую подниматься по стеку вызовов, анализируя каждый шаг, и заканчивая возможным сбоем.

3 голосов
/ 18 апреля 2019

Документация по обработке ошибок в Swift гласит следующее:

... характеристики производительности оператора throw сопоставимы с характеристиками оператора return.

Итак, поскольку вы все равно собираетесь выйти из текущего прицела, бросок вряд ли будет иметь дополнительную стоимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...