Оптимизирующие преобразования, повышающие качество программ при сохранении их смысла, получают все большее распространение как эффективное средство автоматизации построения качественных программ. Они во многом способствовали массовому применению языков программирования высокого уровня и получают дальнейшее развитие и расширенное использование в связи с развитием трансформационного подхода к программированию.
Предлагаемая вниманию читателя книга является одной из первых попыток систематизации знаний по оптимизирующим преобразованиям для современных языков и ЭВМ.
Книга состоит из 11 глав, образующих три части.
Задача части I — развитие математического аппарата, ориентированного на исследование оптимизации программ. Эта часть содержит описание основных понятий и свойств операторной модели программы (крупноблочной схемы), в рамках которой формулируются и обосновываются оптимизирующие преобразования. Здесь же рассматриваются абстрактная модель вычислительной машины (РАМ) и методика исследования алгоритмов оптимизации, сочетающая высокий уровень их представления (так называемый ВУ-язык) с простотой получения оценок сложности их выполнения на РАМ.
В части II рассматриваются системы оптимизирующих преобразований и исследуются их корректность, полнота и сложность. В ней содержится обзор основных понятий оптимизации программ; приводятся методы и алгоритмы анализа потока управления в программе, структуры ее управляющих связей; исследуются оптимизирующие преобразования на линейных участках программы и внутри ее циклов; изучаются алгоритмы глобальной оптимизации, рассматривающей при преобразованиях всю программу целиком.
Часть III посвящена применению оптимизирующих преобразований. Здесь описываются основные направления методов и техники оптимизации при автоматизации программирования, подробно рассматриваются оптимизирующая трансляция и конкретизация программ, связанные с выполнением оптимизирующих преобразований для повышения качества программ при изменении и сохранении языкового уровня их представления.
Читатель, желающий расширить свои знания по оптимизации, может использовать краткие обзоры и комментарии, завершающие каждую часть книги и содержащие ссылки на основные и доступные работы с дополнительным материалом по оптимизации программ. В основном тексте ссылки на литературу, как правило, отсутствуют. Список литературы в конце книги ни в коей мере не претендует на библиографическую полноту; за редким исключением, он содержит только публикации, упоминаемые в кратких обзорах и комментариях. Символ означает окончание доказательства, примера или алгоритма.
Монография основывается на работах автора, большинство из которых выполнено в рамках проектов Вычислительного центра СО АН СССР по созданию универсальной многоязыковой системы программирования БЕТА и систем конструирования программ СКАТ. В книгу вошел переработанный и исправленный материал спецкурса по оптимизации программ, читаемого автором в течение ряда лет для студентов старших курсов Новосибирского государственного университета им. Ленинского комсомола.
Автор глубоко благодарен своим коллегам и друзьям из ВЦ СО АН СССР за активное сотрудничество в работе над проектами БЕТА и СКАТ и особенно И.В. Поттосину, С.Б. Покровскому, В.К. Сабельфельду и Г.Г. Степанову. Нельзя не назвать здесь и тех, кто своими работами, советами и поддержкой способствовал появлению этой книги. Прежде всего — это А.П. Ершов, С.С. Лавров, А.А. Летичевский, Э.З. Любимский и В.Е. Котов. Всем им, а также П.В. Карповской и Г.И. Нариньяни, оказавшим большую помощь в технической подготовке рукописи, автор выражает искреннюю признательность.