8.5. ПАРАМЕТРИЗАЦИЯ
421
котором запрещается подобная оптимизация). В результате транслятору раз-
решаются любые перестановки операндов логических выражений, сохраня-
ющие их истинность или ложность, с тем, чтобы выбрать наиболее эффек-
тивный путь вычислений. Как следствие, пример, подобный (8.2) может ока-
заться некорректно вычислен в стандартном
Pascal
. Прагматическая полез-
ность такого употребления логических выражений приводит к тому, что в
большинстве систем программирования на языке
Pascal
принята стратегия
их вычисления, в точности соответствующая тому, что предписано стандар-
том
С/С++
.
Красноречивый пример-иллюстрация для второй цели параметризации
по необходимости — распределенные вычисления. Пусть программа работа-
ет с данными, доступ к которым возможен лишь через сеть и которые непре-
рывно модифицируются другой программой. Предположим, что наша про-
грамма не изменяет данные, но принимает решение на основе их анализа.
Это дает возможность оставить в стороне много трудных проблем,связанных
с организацией совместного доступа к данным. Но нам важно проанализи-
ровать ту информацию, которая соответствует реальному состоянию дел. И
поэтому параметр, соответствующий данным, хранящимся в другом месте
сети, естественно передавать по необходимости, а не по значению.
Тот же пример иллюстрирует и третью цель параметризации по необходи-
мости. Для установления связи и последующей работы с удаленными данны-
ми целесообразна передача по необходимости, поскольку, с одной стороны,
установление связи — операция долгая, а с другой — не исключено, что си-
туация сложится так, что без удаленных данных можно будет обойтись. Еще
один пример, когда анализ наступления необходимости тривиален, демон-
стрируют логические операции: &&, || и др. (смотри анализ первой цели).
То, что два естественных примера группируют цели попарно, показывает.
что три цели передачи по необходимости отлично согласованы друг с другом
и концепция имеет право на существование.
Рассмотрим, как соотносится механизм подстановки параметра по необ-
ходимости с другими механизмами параметризации.
Передача по необходимости моделирует входной параметр в том случае,
когда вычисления, идущие после вызова процедуры до момента использо-
вания параметра не изменяют передаваемый процедуре фактический пара-
метр. Не следует в связи с этим исключать предельной возможности, когда
параметр, передаваемый по необходимости, придется передавать в момент
вызова (т. е. как параметр-значение).
Что касается выходного назначения параметра, то здесь ситуация еще бо-