Склеивание переменных

Трансформация склеивания переменных есть замена в определении предиката нескольких переменных одной. Трансформация определяет список имен переменных. Переменные из указанного списка переменных заменяются первой переменной. Например, склеивание переменных a, b и c представляет систематическую замену всех вхождений имен b и c на имя a. Необходимо соблюдение условий корректности, гарантирующих эквивалентность определений предиката до и после проведения склеивания. Склеивание переменных является первой трансформацией среди перечисленных в начале разд. 7 четырех видов трансформаций. В результате склеивания уменьшается число переменных, программа становится короче и быстрее. Значительный эффект достигается при склеивании структурных переменных, таких как массивы и списки, поскольку склеивание обычно позволяет избежать копирования структур.

Задача склеивания переменных в данной постановке вряд ли может стать актуальной для оптимизации функциональных программ:в определении функции нет результирующих переменных, и там можно было бы рассматривать лишь склеивание локальных и исходных переменных. Эта задача не возникает для императивных программ, поскольку практически все рассматриваемые здесь склеивания обычно реализуются программистом в императивной программе.

Склеивание переменных рассматривалось ранее в рамках задачи экономии памяти в классических работах А. П. Ершова, С. С. Лаврова, В. В. Мартынюка. Склеивание переменных определялось как выбор переобозначения аргументов и результатов из заданного множества корректных переобозначений, которое позволяет в наибольшей степени уменьшить объем необходимой памяти [2]. В оптимизирующей трансляции императивных программ склеивание переменных обычно реализуется на основе анализа локальных свойств программы [3; 4]. Отметим, что необходимость склеивания переменных обусловлена также тем, что в применяемых методах трансляции конструкций (особенно выражений) происходит включение в программу большого числа дополнительных промежуточных переменных.

В отличие от задачи экономии памяти [2] склеиванию подлежат только те переменные, между которыми имеется информационная связь в определении предиката. Кроме того, склеиваются лишь переменные одного типа, однако допускается различие в параметрах типа. Алгоритм автоматического оптимального склеивания переменных описан в работе [5]. В каждом операторе программы определяются аргументы и результаты оператора. Результат оператора может быть склеен с любым аргументом соответствующего типа при условии, что аргумент не используется далее после завершения исполнения оператора. В работе [5] не рассматриваются сложные формы склеивания переменных структурных типов, когда несколько структурных переменных размещаются внутри некоторой другой переменной. Пример сложной формы склеивания иллюстрируется в разд. 7.6.