LINUX.ORG.RU

История изменений

Исправление red75prim, (текущая версия) :

Вы, блин, определитесь.

Ладно, я тоже грешу тем, что сомневаюсь во вменяемости собеседника, когда не понимаю, что происходит в его голове. Так что распишу по буквам.

Паники не предназначены для организации control flow в процессе выполнения программы предусмотренным программистом образом. Для этого есть Result’ы. Паники предназначены для индикации непредусмотренных программистом обстоятельств: выход индекса за границу массива, в том случае если он не должен выходить ни при каких условиях, отсутствие файла, который обязательно должен лежать по такому-то пути (например, потому что мы только что его туда записали) и т.п.

Но паники при возникновении, естественно, создают свой control flow (если программа не собрана с panic=«abort»), который иногда нужно контролировать.

У меня есть несколько версий почему так происходит.

Я уже свою версию озвучил: паника = баг (или непредусмотренная ситуация), доступное потоку состояние недоверенно, полагаться на инварианты в забагованном коде бессмысленно (паники как раз и должны возникать в том числе при нарушении инвариантов).

Исходная версия red75prim, :

Вы, блин, определитесь.

Ладно, я тоже грешу тем, что сомневаюсь во вменяемости собеседника, когда не понимаю, что происходит в его голове. Так что распишу по буквам.

Паники не предназначены для организации control flow в процессе выполнения программы предусмотренным программистом образом. Для этого есть Result’ы. Паники предназначены для индикации непредусмотренных программистом обстоятельств: выход индекса за границу массива, в том случае если он не должен выходить ни при каких условиях, отсутствие файла, который обязательно должен лежать по такому-то пути (например, потому что мы только что его туда записали) и т.п.

Но паники при возникновении, естественно, создают свой control flow (если программа не собрана с panic=«abort»), который иногда нужно контролировать.

У меня есть несколько версий почему так происходит.

Я уже свою версию озвучил: паника = баг (или непредусмотренная ситуация), доступное потоку состояние недоверенно, полагаться на инварианты в забагованном коде бессмысленно.