Василий Игоревич и Сергей Юрьевич! В Рефале-5 нет вообще никаких ящиков, ни статических, ни динамических. Но есть копилка — глобальный словарь стеков объектных выражений. Использование статических ящиков или копилки как словаря глобальных переменных я не одобряю из-за того, что затрудняется понимание программы — по вызову функции невозможно понять, с какими данными она работает, т.к. она может брать данные не только из аргументов, но и из глобального состояния, и, соответственно, результат не возвращать, а тоже куда-то прятать. При этом статические ящики лучше копилки тем, что они описываются явно: есть определение статического ящика (или имя в списке extern), значит, есть некоторое глобальное состояние. В случае же копилки, чтобы понять, какими переменными пользуется программа, нужно проанализировать все вызовы Br, Dg, Rp и Cp. Динамические ящики представляют некоторый компромисс между чисто функциональным стилем и императивным — по вызову функции видно, к каким ящикам она обращается. В защиту копилки могу сказать, что при определённой дисциплине ею можно пользоваться как локальными переменными: до выполнения какого-то алгоритма положить на вершины соответствующих стеков (Br) начальные значения, в самом алгоритме для работы с ними использовать только Cp для чтения и Rp для присваивания, после завершения алгоритма результирующие значения удалить прочтя (или прочитать удаля) при помощи Dg. Но я не видел программ, где так поступают. Сам я предпочитаю не пользоваться глобальным изменяемым состоянием, как и Сергей Юрьевич. А динамических ящиков в Рефале-5λ нет.
С уважением, Александр Коновалов
