В чем разница между паникой и процессом :: выход - PullRequest
1 голос
/ 13 октября 2019

Согласно названию, в чем разница между этими двумя и когда я должен рассмотреть возможность использования одного над другим?

Ответы [ 2 ]

3 голосов
/ 13 октября 2019

Может быть или не быть разницы в зависимости от вашего определения того, что происходит, когда происходит паника (определено в Cargo.toml). В зависимости от того, установлен ли он на unwind или abort, могут происходить разные вещи:

  • При unwind это (как следует из названия) разматывает стек. При этом, в частности, можно получить полную трассировку стека
  • . При abort вы получите только последнего вызываемого

process::exit(), с другой стороны, это «чистый» выход - вы не получите последнего вызываемого, и вы получите статус регулярного выхода из процесса.

В связи с этим вам в идеале нужно придерживаться следующего:

  • Для плановых отключений используйте exit(). Обратите внимание, что известная ошибка считается запланированным завершением
  • . Для незапланированных отключений (т.е. исключительных сбоев) учитывайте panic!(), поскольку вы оба получите возможность получить трассировку стека, когда это произойдет, ислучай неудачи должен быть достаточно исключительным, чтобы он фактически не учитывался и проистекает из незапланированного сценария
2 голосов
/ 13 октября 2019

Афаик, в выпущенной программе никогда не должно случиться паники. Это дает информацию для разработчиков, но не что-нибудь удобное для пользователя. Я бы сказал, «используйте это для ошибок, которые не должны происходить в продукт». Вероятно, что-то вроде выхода exit(101);

просто завершает ваш процесс с кодом, который вы ему даете. exit(0) должно означать «все хорошо».

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