"Анри Бертьен. Стандартный набор операторов языка 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), то при использовании этих интерпретаторов |
|
|