"Анри Бертьен. Стандартный набор операторов языка REXX (для OS/2) " - читать интересную книгу автора

· статус DO-циклов и других структур: выполнение оператора SIGNAL внутри
подпрограммы "безопасно" для вызывающей программы в том смысле, что DO-циклы
и другие структуры, которые были активными во время вызова этой
подпрограммы, не деактивируются (будут деактивироваться только те циклы и
структура, которые активны в настоящий момент внутри подпрограммы).
· трассировка: после того, как подпрограмма будет отлажена, можно вставить в
начало оператор TRACE OFF и это не повлияет на трассировку вызывающей
программы. И наоборот, если нужно отладить подпрограмму, можно вставить в её
начало TRACE R, который будет действовать только внутри подпрограммы, а
режим трассировки вызывающей программы после возврата из подпрограммы будет
автоматически восстановлен. Точно так же запоминаются во время выполнения
подпрограмм режимы '?' (диалоговая отладка) и '!' (запрет выполнения команд
всех сред).
· значения оператора NUMERIC (DIGITS, FUZZ и FORM, относящиеся к
арифметическим операциям, - см. стр. 148) запоминаются и затем
восстанавливаются при выполнении оператора RETURN. Следовательно,
подпрограмма может устанавливать значение точности и значения других нужных
ей параметров, не оказывая влияния на вызывающую программу.
· значения оператора ADDRESS (как текущее, так и вторичное имя среды команд
(см. оператор ADDRESS)) запоминается и при выполнении оператора RETURN
восстанавливается.
· условия возникновения исключительных ситуаций (условие SIGNAL on ...)
запоминаются и затем восстанавливаются при выполнении оператора RETURN. это
означает, что операторы SIGNAL on и SIGNAL OFF могут использоваться в
подпрограмме, не оказывая влияния на условия, установленные вызывающей
программой.
· часы использованного времени: подпрограмма использует показания часов
использованного времени вызвавшей её программы (см. описание функции TIME на
стр. 97); но, поскольку показания часов запоминаются при вызовах
подпрограммы, подпрограмма или внутренняя функция может самостоятельно
перезапускать и использовать часы, не оказывая влияния на вызвавшую её
программу. По той же причине показания часов, запущенных во внутренней
подпрограмме, недоступны для вызывающей программы.

Предельные значения уровней вложенности:
· в REXX-CMS ограничений именно на уровень рекурсии нет - лишь бы хватило
памяти, но общая величина вложенности управляющих структур, к которым
относятся также вызовы внутренних подпрограмм, не может быть больше, чем
250;
· в OS/2 заявлен предельный уровень вложенности 50, но реально почему-то
работает 100;
· в PC/DOS (реально) - 25;
· интерпретатор MSG допускает до 273 для вызова внутренних и 7 - для вызова
внешних подпрограмм (в последнем случае похоже, что варьированием размера
стека можно улучшить этот показатель, что в практической деятельности вряд
ли понадобится - обычно этого вполне достаточно).

Поскольку в PC/DOS и в OS/2 IBM зачем-то решила использовать оператор
CALL для управлением режимами отслеживания событий (подобные функции более
характерны для оператора SIGNAL), то при использовании этих интерпретаторов