> -- Александр Шостак писал(а):
> Если код изначально пишется безопасным (который не вылетает на пользовательских данных, не портит память, не переполняет стёк и т.д), то обработка должна быть любой потенциально опасной ситуации. И на месте мат. выражений могут быть вполне себе сложные функции. Что это поменяет?

Поясню свою мысль. Экзотика, когда в выражении несколько раз встречается одна и та же функция (у Вас хорошая фантазия), обрабатывается указанным выше способом. Если функции разные, то и исключения, и обработчики будут разными. Проблема решена.

Но самое главное, чтовозможность во время исполнения точно распознать причину действительно серьезного исключения как правило не важна!Исключение в PureBuilder завершает аварийную процедуру/функцию без возврата скомпрометированных данных в вызывающую процедуру/функцию, и этого более чем достаточно. И не столь уж важно, почему возникло исключение. Если процедура/функция дала сбой, то полагаться на нее уже нельзя - независимо от причин. Нужно искать другие выходы.

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


> -- Александр Шостак писал(а):
> Вопрос мышления. Попробуйте рассказать алгоритм на естественном языке. Попробуйте пописать вообще без исключений и с флагами результатов. Тогда подобные цепочки начнут встречаться везде.

В PureBuilder если процедура/функция вернула параметры/возвращаемое значение в точку вызова, значит она завершилась без исключений. В этом случае нет никакой необходимости в флагах, проверках, длинных цепочках логических операций и т.п. Всё и так OK.

Если же она завершилась с исключением, то значит, никаких данных не вернула, и в логических цепочках для обработки этих данных опять же нет нужды.