> -- Berserker писал(а):
> Если я правильно вас понял, вы ASSERT-ы считаете ошибками? Я расцениваю ASSERT как категорическое утверждение, которое нельзя отловить и обработатьСчитайте для удобства, что это некая объективная реальность (на которую ни Вы ни я не можете повлиять), введенная теми (скажем - разработчиками железа), кто все-таки считает этот механизм не противоречащий струкурному программированию.
Например, исключение, возникающее в FPU при обыкновенном сложении.
Разницы - НИКАКОЙ. Копья одни и те же ломаются...

> -- Berserker писал(а):
> В вашем примере процедуры E2 предположим, что функции возвращают код ошибки (0 - всё хорошо). Тогда помогает простое разбиение на подпроцедуры:Давайте предположим более жизненную вещь.
Процедура E2 - команда внешнего модуля, связанного с нашими "еще нижележащими" через процедурные типы.
Давно проверенная и оттестированная. Типа - эталон надежности. И всех многие годы она устраивала.
И, возможно, у Вас даже и исходников нет.
Но тут приключилась беда, Вы начали работать в некой новой области знаний. И даже еще не выяснили причин очень-очень редких сбоев... Может через год, по результатам исследований - научное открытие сделаете.
И что теперь - для проведения таковых "исследований" все переписывать с возвратами кодов ошибки

Если говорить правду - очень большая глупость.
А если деликатничать, то можно еще пару страниц объяснениями заниматься, из серии, что исходной сложности в задаче нет... что она привнесенная (субъективная) особо тонким пониманием структурности... и т.п..

> -- Berserker писал(а):
> Пример из реального кода привожуСоревноваться примерами - не самое лучшее занятие...
Но у меня тоже есть пример.
Есть у нас элемент MathParse - интерпретаро в мат.выражений в run-time. Там разбор "рекурсивный вниз" - вложений по самое небалуйся, в общем.
И два релиза - для FPC и для Дельфи. По некоторым субъективным причинам, я просто не знал как там (в FPC) исключения перехватывать (в смысле - экономно, для Дельфей есть микропримочка от Кладова)
И испытал все прелести возвратов кода ошибки, и ее анализа в каждой второй строке.
Уверяю, мне было на что поглядеть, чтобы сделать заключение -дурдом на каникулах. Хотя и работающий.
А Дельфячий вариант (с исключениями, даже и не проверяю - можно делить на нуль, или нет...) работает все равно надежнее. Можете верить, можете - нет. А для меня это просто экспериментальный результат. Многолетний, можно сказать.

> -- Berserker писал(а):
> В чём по вашему структурность программы, если из произвольного блока можно сделать произвольный вылет, который вернётся только где-то там на одном из верхних уровней в установленным когда-то обработчике?Читаем внимательней - я Вам с самого начала сказал: измените аксиоматику.
Всякий структурный элемент имеет ДВА выхода. Даже сложение двух чисел
И что занимательно, никто ведь не изменяет множество входных состояний, соответствующих некому заданному выходному. Что за кошмарное беспокойство про порушенность "системы доказательств" - не пойму.
А структурность "по-нашему" заключается в том, что всякий структурный элемент, полученный по правилам структурной композиции может быть использован еще раз как базовый.
Вот для RETURN и EXIT - это не так. А для rise,assert, и прочего аналогичного - так.
И не надо путать грешное дело с праведным.
Никто никогда вышеупомянутый EXIT не называл элементом структуры
А SEH - в своем названии содержит слово "структурный". Или как, дураки название придумывали, что ли

> -- Berserker писал(а):
> Чтобы обсудить вопрос более формально, приведу три "теоремы"Молодца
Осталось сделать последний шаг - делать все это в уме. Не надо портить коды. Делаться (исполняться) будет как Вы и написали, а коды корежить не будем.
И жизнь станет намного проще. Как и у меня - никаких проблем со структурностью исключений