Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 270


По "неструктурированности" это решение можно сравнить с выходом из подпрограммы не по возврату, а по передаче управления. Что при этом происходит с динамической цепочкой вызовов? Остается только гадать или определять, руководствуясь "тонкими" правилами!

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

 

4.21.2.4. Принцип динамической ловушки

Теперь об Аде. Одно из ключевых требований к Аде - способствовать надежному программированию. Другими словами, следует стремиться к минимуму отказов из-за ошибок в программе и в данных. Если же отказ неизбежен, то следует обеспечить по меньшей мере осмысленную диагностику.

Требование надежности оправдывает трактовку исключения как свидетельства непригодности аварийного "процесса" (того процесса, где возникло исключение) к нормальной работе в создавшихся условиях. Стремясь к минимуму отказов, следует не "ремонтировать" аварийный процесс, а нацелить обработку исключения на локализацию последствий "аварии", на создание возможности продолжать работу тех (связанных с аварийным) процессов, которых авария пока не коснулась. Саму обработку исключения в "аварийном" процессе обычно разумно  рассматривать скорее не как "ремонт", а как попытку сохранить как можно больше сведений для анализа ситуации на уровне иерархии, принимающем решения о последующих действиях.

Именно такой принцип действует в языке Ада (ведь надежность - одна из основных целей этого языка), а также в языке Эль-76 на мащинах серии Эльбрус.

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


- Начало -  - Назад -  - Вперед -