спасибо, понял, но в цитируемом вами моем сообщении я имел ввиду ссылочный параметр передаваемый в функцию ЗАЯЦ (заяц) по версии Бориса и иже с ним... там идет заполнение существующей переменной.
А что это меняет? То, что у переменной только значение меняется, а сама она остается?
Если параметр-переменная "заяц" здесь ссылочная, то присвоение "результата" функции переменной заяц^, это само по себе глобальный эффект.
Если же параметр-переменная "заяц" здесь не ссылочная, даже если она при этом локальная, все равно это функция с глобальным эффектом, хотя этот ее конкретный вызов и без глобального эффекта. Ведь эта функция
может вызываться с глобальным эффектом - в каком-то другом месте программы.
Но даже если функция локальна либо неэкспортируема, а содержащий ее модуль всегда вызывает ее без реального глобального эффекта (в силу невыполнения некоторых условных ветвей или холостого присвоения внешним переменным тех же значений из-за ограничений значений и структуры фактических параметров), это не значит что эта функция не даст глобальный эффект каком-то в другом програмном окружении, т.е. будучи помещенной в другой модуль. Главное, что функция в принципе способна на глобальный эффект, что некоторый внешний по отношению к ней алгоритм может использовать функцию с таким же текстом для такого эффекта.
Функция без глобального эффекта при любом вызове в любой возможной программе не должна изменять переменные, лежащие ниже ее по стеку, т.е. созданные в реал-тайм ранее этого вызова, а также изменять любые переменные из кучи и изменять динамические типы (создавать-уничтожать значения типа) раз те в ЯП являются глобальными.
Функция будет без глобального эффекта, если результат произвольного ее вызова, будучи сразу не сохраненным (например, присвоенным параметру пустой процедуры без OUT-параметров), не оказывает никакого воздействия (наблюдаемого средствами языка) на работу программы по сравнению с отсутствием такого вызова.
Не следует смешивать:
- функцию с возможным глобальным эффектом (для некоторой произвольной точки вызова в некоторой произвольной программе),
- функцию с возможным глобальным эффектом (для некоторой произвольной точки вызова в конкретной программе),
- текстовой вызов функции (для конкретной точки в конкретной программе) с возможным глобальным эффектом, и
- реал-тайм вызов функции (для конкретной точки в конкретной программе) с реальным глобальным эффектом.
Первый, с самым слабым условием, вариант и должен служить определением "функии без побочного эффекта".