Технология программирования естественно развивается в сторону оперирования понятиями задачи, которая стоит перед программистом, а не понятиями универсального прибора, на котором программа будет исполняться. Это стимулирует развитие языков программирования высокого уровня, позволяющих адекватно отражать объектную область задачи. К таким языкам, например, относятся функциональные и логические языки (LISP, REFAL, PROLOG, HASKELL, ML, SCHEME и др.), а также различные языки, специализированные на конкретную область их применения. С другой стороны, аппаратная реализация современных широко используемых ЭВМ поддерживает фоннеймановскую модель вычислений, что приводит к неэффективной реализации таких языков – посредством интерпретации – более того, часто не прямой, а косвенной – через другую интерпретацию. К подобной неэффективности приводит и любое структурное программирование само по себе, ибо его целью является создание гибких, легко понимаемых и изменяемых программ. Все чаще программы вычисляются другими программами, а потому естественно ожидать, что первые будут содержать простейшие структуры, ведущие к накладным расходам, которые никогда бы не допустил квалифицированный программист. Методы автоматической оптимизации структурированных программ высокого уровня (а не программ, отшлифованных профессиональными программистами на языках программирования низкого уровня) и призваны предоставить свободу развития новым технологиям программирования. Одним из активно развивающихся здесь направлений является автоматическая специализация программ. Предположим, что вы купили дистрибутив операционной системы LINUX. В момент ее установки на вашем компьютере вы должны указать его аппаратные характеристики, т.е. эти характеристики являются аргументами программы-установщика. Возникает желание максимально настроить LINUX на ваше "железо", ибо в другом контексте он вам не понадобится. В этом и состоит задача специализации. Операционную систему вы устанавливаете однажды, и потому стоит предложить поработать автоматическому специализатору, даже если его работа достаточно продолжительна во времени. Суперкомпияция есть набор методов автоматической специализации программ, написанных на функциональных языках. Основной механизм суперкомпиляции – метаинтерпретация. Основополагающие идеи суперкомпиляции, как и сам термин, были предложены В.Ф.Турчиным в 70-х годах XX века. Но первый реально работающий свободно распространяемый экспериментальный суперкомпилятор был создан относительно недавно. Описанию его структуры и принципов работы и посвящена предлагаемая читателю книга. Сам факт существования такого суперкомпилятора является значительным шагом в направлении внедрения технологии суперкомпиляции в практику программного обеспечения современных компьютеров. Андрей Петрович НЕМЫТЫХ В 1984 г. окончил Московский государственный университет им. М.В.Ломоносова,
где учился на механико-математическом факультете. С 1984 г. работает в
Институте программных систем Российской академии наук. Более двадцати лет
занимается проблемами функционального программирования. Основной круг
интересов – автоматическая специализация программ. Принимал участие в
реализации нескольких диалектов функционального языка программирования
РЕФАЛ. Автор суперкомпилятора SCP4 (специализатора РЕФАЛ-программ), который
разработал и реализовал под руководством В.Ф.Турчина – автора языка РЕФАЛ.
|