Популярность Пролога продолжает оставаться на достаточно высоком уровне не только на Западе, но и в нашей стране. Причем в России не просто используют этот язык в качестве инструмента для прикладных применений, но и разрабатывают компиляторы для хорошо известных за рубежом фирм.
В частности, московский программист Анатолий Дедков с 1992 г. работает в американской фирме Paralogic, занимаясь совершенствованием Пролог-компилятора PTC (Prolog-To-C). Эту версию отличает такая оригинальная возможность, как компиляция в Си-текст (ANSI-стандарт), что позволяет в итоге получать переносимый и высокопроизводительный код, а также осуществлять тесную интеграцию с программами, написанными на Си. Модульная структура PTC снимает ряд ограничений, нередко возникающих при переводе Пролог-программ на другие языки. Поддерживается стандартный интерфейс с любыми СУБД через ODBC-протокол, а также работа с внешними базами данных в индексном формате и формате двоичных деревьев. Для поддержки графического интерфейса с пользователем обеспечивается связь с языком Tcl/Tk. Вместе со всеми инструментальными наборами эта система реализована для Unix и Windows NT.
В последнее время в связи с бурным развитием Internet г-н Дедков занимается добавлением в PTC новых возможностей, связанных в первую очередь с использованием Пролога в Web-серверах для поддержки различных поисковых механизмов и организации запросов к базам данных (БД). Семантика Пролога позволяет очень компактно описывать самые сложные запросы, как к реляционным БД, так и к БД с иерархической и другой нелинейной структурой, для чего обычно требуется трудоемкое cgi-программирование. При этом возможность компиляции Пролог-программ в Java-код представляется достаточно перспективным направлением.
К сожалению, в США фактически нет рынка для Пролог-компиляторов. Это объясняется, по мнению Дедкова, в первую очередь сильной “раскрученностью” других языков. Интересно, что причиной невысокой популярности ряда языков программирования, явно обладающих по сравнению с другими более мощными и выразительными средствами, таких, как тот же Пролог или Лисп, Дедков считает их происхождение. В самом деле, прекрасные языки, разработанные в Европе, известны относительно узкому кругу специалистов, а наиболее популярны языки, созданные в США. Примеров более чем достаточно. С американской стороны пришли Си/Си++, Фортран,
Бейсик, Кобол, PL/1, а в Европе родились Симула 67, Алгол 68, Пролог, Лисп! Может быть, это объясняется большей практичностью американцев, их нацеленностью на скорейшее получение результатов.
В Paralogic Анатолий Дедков также занимается созданием версии Пролога для параллельных компьютеров - n-Parallel Prolog. Этот продукт первоначально создавался для транспьютеров, но они в США сегодня абсолютно непопулярны. Лет пять назад в мире произошел определенный всплеск интереса к транспьютерам, в России было создано несколько СП, занимавшихся распространением этой техники в нашей стране, но уже в то время наиболее дальновидные эксперты предсказывали скорую гибель этого направления. Все упиралось в первую очередь в высокую трудоемкость (и соответственно стоимость) создания программного обеспечения для транспьютеров, что так и не позволило занять им даже небольшую нишу на рынке параллельных систем. n-Parallel Prolog сегодня способен работать на компьютерах nCube-2, в локальной сети рабочих станций и, по словам Дедкова, переносимость данной версии на любую другую мультипроцессорную платформу - дело двух-трех недель.
Фирма “Анет” (Троицк, Моск. обл.) по соглашению с компанией Amzi! Inc. распространяет в России продукт Amzi! Prolog + Logic Server. Он представляет из себя объектные plug-in-компоненты, предназначенные для интегрирования с различными системами программирования (например, Си++, Java, Visual Basic, Delphi), СУБД, электронными таблицами и т. д. С их помощью появляется возможность включать в программный код для платформ DOS, Windows 3.x, Windows 95 и NT обращения к Пролог-системе. Сами Пролог-компоненты хранятся в специальном репозитории, доступ к которому осуществляется с помощью API Logic Server, включающего в себя около 50 высокоуровневых функций с интуитивным интерфейсом. Создается Пролог-код в специальной интегрированной среде разработчика, работающей под управлением Windows. В результате обычный текстовый интерфейс Пролог-систем заменяется на простые вызовы соответствующих функций с параметрами-строками. Например, запрос с получением результата в переменной Х
?- WhoIs(X)
X = Компьютер превращается в следующий вызов функций (на Delphi): ls.CallPStr(t, ‘WhoIs(X)’ );
Res := ls.GetPStrArg(t, 1);
ShowMessage(’Результат’ + Res);
Эта система поддерживает еще довольно много возможностей, в частности работу с базами данных через ODBC-интерфейс.
В С.-Петербурге есть фирма “Пролог-Софт”, в последнее время в связи с возросшим интересом к Прологу значительно укрупнившаяся. Она распространяет в России и странах СНГ версию Пролога, хорошо известную отечественным разработчикам под маркой Turbo Prolog 2.0 фирмы Borland, ранее пытавшейся объять необъятное и выпускавшей компиляторы, наверное, со всех языков программирования. Нельзя без улыбки вспомнить ее попытки бороться с фирмой Microsoft на Basic-рынке со своим прекрасным по тем временам компилятором Turbo Basic. Знал бы Филипп Кан, какую участь уготовил его коллега Билл Гейтс этому языку!
В дальнейшем все права на Turbo Prolog вернулись к первичному разработчику, датской фирме PDC. С 1990 г. она продала более 300000 копий этого продукта и неустанно продолжает его развивать. В России PDC сотрудничает с вышеупомянутой компанией “Пролог-Софт”.
PDC Prolog продается в нескольких версиях за умеренную цену. Он имеется как в DOS-, так и в Windows-версиях, снабжен визуальными средствами разработки (Visual Prolog, VIP) и позволяет создавать программы для платформ DOS, Windows, OS/2. Прилагаются библиотеки поддержки TCP/IP-протокола, доступа к базам данных через ODBC-интерфейс. Также имеется возможность включения Пролог-подсистемы в программы, написанные на других языках программирования (в Amzi! Prolog).
С помощью системы PDC Prolog было создано довольно много крупных программных комплексов. Для Windows это Visual Prolog, написанный “сам на себе” путем постепенной “раскрутки”, что вообще-то для языков программирования не редкость. Трудоемкость этого проекта оценивается в 30 человеко-лет.
Системы, созданные с помощью продуктов фирмы PDC, применяются в самых разных сферах. Программные комплексы, написанные на VIP, используются в ряде авиационных компаний для управления движением самолетов и регулирования загрузки авиалиний. Пакет STAFF применяется многими фирмами, в частности McDonalds, для оптимальной расстановки персонала. В России было создано несколько систем бухгалтерского и складского учета с удаленным доступом, в которых возможности Пролога позволяют эффективно проводить различный анализ экономической информации, оптимизировать процессы учета и хранения продукции и т. д.
Практическое применение современных версий Пролога наглядно показывает его преимущества в ряде областей перед традиционными системами программирования. Основное из этих преимуществ - возможность создания программы в терминах решаемой задачи. Бухучет - вы оперируете терминами проводка, сальдо, актив/пассив, квартальный/годовой баланс, а не абстрактными операторами if, new и goto. Синтаксический разбор запросов на естественном языке - вы имеете дело с предложениями, словами и лексемами, а не организовываете циклы для посимвольного анализа строки. Соответственно для широкого круга задач значительно (на порядок) возрастает скорость разработки и дополнительно обеспечивается очень высокая надежность программы. А современные профессиональные Пролог-системы обеспечивают скорость, не уступающую скорости выполнения аналогичных программ, написанных на Си. Конечно, если не решать на Прологе задачи обращения степенного ряда.
Однако в России уже очень давно ведутся работы над языком РЕФАЛ, имеющим сходную с Прологом декларативную идеологию. Но если раньше про Пролог говорили, что это “самый функциональный из декларативных языков и наоборот”, то сегодня таким языком является именно РЕФАЛ-5. О нем PC Week/RE расскажет в ближайшее время.
Сергей Бобровский