Неботов Евгений
Рус Eng Укр
Научная работа Ссылки

Неботов Е.Н.

 

 


Русский Пролог

Сергей Бобровский

В Старом свете родились практически все наиболее красивые языки программирования. Заложенные в них оригинальные идеи основывались на фундаментальных математических теориях. Разрабатывались такие языки и в СССР, продолжают разрабатываться в России (например, Dinamic фирмы "Параграф" для описания трехмерных виртуальных миров). Наиболее почтенный по возрасту, но с годами только становящийся мощнее – это РЕФАЛ (РЕкурсивных Функций АЛгоритмический язык).

О судьбе этого языка рассказал Владимир Хорошевский, профессор, чл.-корр. РАЕН, руководитель сектора экспертных систем отдела проблем искусственного интеллекта ВЦ РАН. Ниже следует краткое изложение нашей беседы.

Первую версию РЕФАЛ разработал В. Ф. Турчин еще в 1964 г. Этот язык, в основе которого лежит концепция сопоставления с образцом, появился раньше Пролога и Снобола, которые часто считают родоначальниками этого направления. В основе РЕФАЛ лежит теория нормальных алгоритмов Маркова (реализованная во внутренней машине вывода), которая потенциально мощнее теории исчисления Хорновых дизъюнктов, воплощенной в Прологе. РЕФАЛ позволяет решать определенные задачи значительно эффективнее, чем его зарубежные собратья. Немаловажно, что он превосходит известные языки сопоставления с образцом по своей выразительной мощности и легкости понимания текста программ.

Первоначально так называемый базисный РЕФАЛ позиционировался как язык для преобразования произвольных языковых конструкций, своего рода метаалгоритмический язык. Ст. Флоренцев и С. Романенко написали первый интерпретатор для РЕФАЛ на БЭСМ-6, выполняющий до 300 конкретизаций (сопоставлений с образцом и преобразований образца к требуемому результату) в секунду, что даже по нынешним временам довольно высокий результат. В основе интерпретатора лежала абстрактная РЕФАЛ-машина, работающая с бесконечным полем памяти. Модель данных поддерживала двунаправленные списки, а в РЕФАЛ-2 добавилось понятие закольцованных ссылок, в результате чего появилась возможность работать не только с древовидными структурами, но и с графами и сетями. Естественно уложился в эту концепцию процесс отождествления "слева направо" и "справа налево", сделав РЕФАЛ симметричным языком.

В 70-х годах появился РЕФАЛ-2. Были написаны компиляторы практически для всех платформ (М220, БЭСМ, СМ, ЕС ЭВМ). Для записи исходных текстов программ разработчики создали метакод-Б, позволивший значительно нагляднее в сравнении с ранними вариантами представления программ описывать структуру решаемой задачи. Скорость работы тоже впечатляла – на IBM PC XT программа выполнялась со скоростью 1500 конкретизаций в секунду! Семантика РЕФАЛ как декларативного языка позволила также получить очень хорошие тестовые результаты при реализации на параллельных компьютерах.

Однако по ряду причин судьба этого языка сложилась, как выразился г-н Хорошевский, несчастливо. В. Турчин уехал из России, и на некоторое время РЕФАЛ был предан забвению. Однако энтузиасты компьютерного дела продолжали совершенствовать язык, и на сегодняшний день имеются две версии – РЕФАЛ-5 и РЕФАЛ+. Синтаксис языка сблизился с Си++ и поддерживает объектную идеологию. ООП выражено в представлении функций языка как объектов, которые можно использовать в качестве образцов наравне со стандартными объектами Си++, что превращает РЕФАЛ в очень мощную открытую систему программирования.

Последние версии языка работают на различных платформах. В Институте прикладной математики (ИПМ) РАН разработан транслятор с РЕФАЛ для RISC-архитектур, позволяющий получать выигрыш в быстродействии при решении ряда задач по сравнению с результатами известных западных фирм, использующих другие языки, примерно в пять раз. Реализация РЕФАЛ на спецпроцессоре дает выигрыш на порядок.

Сегодня РЕФАЛ прочно занимает свою нишу, не опасаясь никаких конкурентов. Например, он успешно используется физиками Обнинска, многими математическими центрами в России. Одно из основных применений РЕФАЛ – разработка трансляторов с языков программирования, когда сам РЕФАЛ используется как метаязык. В ИПМ на нем был очень быстро написан высокоэффективный транслятор Cern Fortran.

РЕФАЛ не обошли вниманием и военные. Современная боевая техника нередко требует модификации средств разработки, делая их адекватными растущим возможностям электроники, и РЕФАЛ поддерживает создание быстро совершенствующихся узкоспециализированных языков программирования.

Один из создателей языка занимается теорией эквивалентных преобразований программ. С помощью разработанных им алгоритмов были оптимизированы исходные тексты программ на РЕФАЛ, при этом в качестве языка, осуществляющего необходимые преобразования текстов, был взят, естественно, сам РЕФАЛ.

Наконец, еще одна из интересных областей, в которой применяется РЕФАЛ, – искусственный интеллект (ИИ). В ИИ РЕФАЛ используется и в качестве конечного средства разработчика, и как инструмент для создания языков представления знаний, ориентированных на конкретные области применения в ИИ. Одним из фундаментальных направлений, позволяющих эффективно использовать мощь РЕФАЛ, является анализ естественных языков. С помощью РЕФАЛ созданы лингвистические процессоры, экспертные системы и т. д.

В 80-х годах американцы были серьезно озабочены японским проектом создания компьютеров пятого поколения, опасаясь появления конкурента в сфере компьютерных технологий. Однако выбранный в качестве базового языка машины вывода систем пятого поколения Пролог не оправдал значительных ожиданий* из-за того, что его система логического вывода обладает рядом ограничений. А РЕФАЛ, имеющий в своей основе мощную математическую модель, существенно превосходящую Пролог, по мнению г-на Хорошевского, вполне мог бы удовлетворить требованиям японской системы. Поэтому будем надеяться, что если мы доживем до идеи реализации проекта разработки компьютеров нового поколения в России, то в качестве базового языка будет выбран именно РЕФАЛ.

Статья опубликована в PC Week/RE № 02 от 21.01.1997 г., стр. 44.

Источник:http://www.computer-museum.ru/histsoft/refal.htm

 
Научная работа Ссылки

Raven (C) 2006