Языки программирования. Прошлое и будущее. С.Бобровский (1012869), страница 10
Текст из файла (страница 10)
Знакомый многим отечественным программистам Turbo Prolog, рабатывавшийся ранее фирмой Borland, теперь выступает под мар PDC Prolog и реализован для операционных систем MS-DOS, Wind( OS/2 и Unix/Linux. Правда, сохранились как достоинства, так и н статки первоначального варианта. Имеется удобная среда разработ*; и быстрый компилятор, но наблюдается несовместимость с подав! щим большинством других диалектов этого языка. Существует cm альная версия для визуальной разработки VisualProlog.
Едва появившись на свет, Пролог породил множество диалектов даже совсем других языков типа Planner, основанных на деклара ных принципах, но имеющих более узкие области применения. Caw же ему не суждено было воплотиться в строгом стандарте, скорее в как раз потому, что слишком глобальными оказались заложенн него идеи.
Однако нельзя сказать, что Пролог свою «лебединую песню» про Как наиболее известный и наиболее простой в освоении из всех де ративных языков, он остается и сегодня прекрасным средством быстрого создания экспертных систем и интеллектуальных баз зна требующих сложной структуры запроса. Хорошая реализация Пр га — это, по сути, CASE-система, только простая в изучении и гиб! использовании, что косвенно подтверждается ценами на разли* версии этого языка.
Русский Пролог
В Старом свете родились практически все наиболее красивые я; программирования. Заложенные в них оригинальные идеи основывались на фундаментальных математических теориях. Разрабатывались такие языки и в СССР, продолжают они разрабатываться и в России (например, язык Dynamo фирмы «Параграф» для описания трехмерных виртуальных миров). Наиболее почтенный по возрасту, но с годами только становящийся мощнее — это язык РЕФАЛ (РЕкурсивных Функций АЛгоритмический язык).
О судьбе этого языка я узнал из первых рук — от Владимира Хорошевского, профессора, члена-корреспондента РАЕН, руководителя ceктора экспертных систем отдела проблем искусственного интеллекта РАН.
Первую версию РЕФАЛа разработал В.Ф. Турчин еще в 1964 году, Этот язык, реализовавший концепцию сопоставления с образцом, родился раньше Пролога и СНОБОЛа, которых часто считают родоначальниками этого направления. В основе РЕФАЛа лежит теория нормальных алгоритмов Маркова (реализованная во внутренней машине вывода), которая потенциально мощнее теории исчисления Хорновых дизъюнктов, воплощенной в Прологе. Благодаря этому язык, созданный в СССР, позволяет решать некоторые задачи значительно эффективнее, чем его зарубежные собратья. Немаловажно, что РЕФАЛ превосходит известные языки сопоставления с образцом по своей выразительной мощности и легкости понимания текста программ.
Первоначально так называемый базисный РЕФАЛ позиционировался как язык для преобразования произвольных языковых конструкций, своего рода метаалгоритмический язык.
Первый интерпретатор РЕФАЛа на БЭСМ-6 написали С. Флоренцев и С. Романенко. Он выполнял до 300 конкретизации (сопоставлений с образцом и преобразований образца к требуемому результату) в секунду, что даже по нынешним временам довольно высокий результат. В основе интерпретатора лежала абстрактная РЕФАЛ-машина, работающая с бесконечным полем памяти. Модель данных поддерживала двунаправленные списки, а в РЕФАЛ-2 добавилось понятие закольцованных ссылок, в результате чего появилась возможность работать не только с древовидными структурами, но и с графами и сетями. Естественно уложился в эту концепцию процесс отождествления «слева направо» и «справа налево», что сделало РЕФАЛ симметричным языком.
Язык РЕФАЛ-2 появился в 70-е годы. Были написаны компиляторы практически для всех платформ (М220, БЭСМ, СМ, ЕС ЭВМ). Для записи исходных текстов программ разработчики создали метакод-Б, позволивший описывать структуру решаемой задачи намного нагляднее, чем в ранних вариантах представления программ. Скорость работы тоже впечатляла: на IBM PC XT программа выполнялась со скоростью 1500 конкретизации в секунду! Семантика РЕФАЛа как декларативного языка позволила также получить очень хорошие тестовые результаты при реализации на параллельных компьютерах.
Однако по ряду причин судьба этого языка сложилась несчастливо. В. Турчин уехал из России, и на некоторое время РЕФАЛ был предан забвению. Однако энтузиасты компьютерного дела продолжали совершенствовать язык, и на сегодняшний день имеются две версии: РЕФАЛ-5 и РЕФАЛ+. Синтаксис языка сблизился с C++ и поддерживает объектную идеологию. Объектно-ориентированное программирование выражено в представлении функций языка как объектов, которые можно использовать в качестве образцов наравне со стандартными объектами C++, что превращает РЕФАЛ в очень мощную открытую систему программирования. Сегодня последние версии языка реализованы на самых разли платформах. В Институте прикладной математики (ИПМ) РАН i ботан транслятор с РЕФАЛа для .R/SC-архитектур. При реализации ряда алгоритмов он позволяет получать выигрыш примерно в 5 ] сравнению с результатами известных западных фирм, использу) другие языки. При реализации РЕФАЛа на спецпроцессоре выи еще больше.
Сегодня РЕФАЛ прочно занимает свою нишу, не опасаясь никаки: курентов. Например, он успешно используется физиками Обн] при реализации аналитических преобразований, а также мне математическими центрами России. Одно из основных приме! РЕФАЛа — разработка трансляторов с языков программиров; когда сам РЕФАЛ используется как метаязык. В ИПМ на нем был быстро написан высокоэффективный транслятор CERN Fortran.
Благодаря тому что РЕФАЛ был разработан в нашей стране, не об его вниманием и военные. Для современной боевой техники не] требуется быстро модифицировать средства разработки, делая и: кватными растущим возможностям электроники. РЕФАЛ подде вает создание быстро совершенствующихся узкоспециализирова языков программирования.
Наконец, еще одна интересная область, где используется РЕФА это искусственный интеллект. Здесь РЕФАЛ применяется и как к ное средство разработчика, и как инструмент для создания яз представления знаний, ориентированных на конкретные области менения в искусственном интеллекте. Одним из фундаментал направлений, позволяющих эффективно использовать мощь РЕФ является анализ естественных языков. С помощью РЕФАЛа соз лингвистические процессоры, экспертные системы и многое друго одном из проектов оптимизации исходных текстов программ на РЕ<5 в качестве языка, осуществляющего необходимые преобразование стов, был взят сам РЕФАЛ.
В 80-е годы американцы были серьезно озабочены японским прое компьютеров пятого поколения, опасаясь появления конкуре] сфере компьютерных технологий. Однако язык Пролог, выбранЕ качестве базового для машины вывода систем пятого поколени оправдал ожиданий, возможно потому, что его система логичес вывода обладает рядом ограничений. А РЕФАЛ, имеющий в своей 0( мощную математическую модель, существенно превосходящую лог, вполне мог удовлетворить требованиям японской системы. Поз можно надеяться, что если мы доживем до реализации подобного екта компьютеров нового поколения в России, то в качестве базе языка будет выбран именно РЕФАЛ.
Пишется на чем угодно — разрабатывается только в Visual Studio
Существует еще как минимум с десяток не менее популярных языков программирования, по различным причинам не упомянутых в данной книге, хотя вполне этого заслуживающих. Так, одним из сценарных языков, завоевавших большую популярность в России, безусловно является РНР. Буквально за считанные годы набрал известность разработанный в Microsoft язык С#, напоминающий Java. Распространенная Интернет-технология Flash также содержит встроенный режим программирования. Кроме того, в немалом количестве отечественных систем автоматизации имеются собственные внутренние сценарные языки. Например, должность «программист 1C» уже стала фактическим стандартом.
Интересную возможность объединения множества языков программирования в одной оболочке предложила корпорация Microsoft. Посмотрим, какие новые языки она предлагает разработчикам.
Несколько лет назад корпорациямicrosoft выпустила бета-версию среды разработки Visual Studio.NET, в которой реализована идея общего языкового окружения (Common Language Runtime, CLR). Коммерческая версия должна появиться в 2003 году. Тексты программ на различных языках программирования должны транслироваться не в команды процессора, а в промежуточный байт-код на языке MSIL (просматривается четкая аналогия с технологией Java, основным конкурентом системы Windows). Это дает разработчикам ряд несомненных удобств, например доступ к общей библиотеке стандартных классов. На уровне CLR реализованы поддержка объектной технологии, сборка мусора, проверка безопасности, многопотоковость, вызов удаленных процедур и другие функции.
Одно из важнейших достоинств идеи CLR — возможность создания программ, написанных на разных языках программирования, а также разработки и отладки приложений в единой оболочке Visual Studio.NET. В стандартный комплект поставки Microsoft войдут, по всей видимости, языки С#, C++ и Visual Basic.NET. Кроме того, корпорация Microsoft предложила ряду компаний реализовать их собственные расширения Visual Studio.NET для других языков программирования. Это такие достаточно известные языки, как Smalltalk, Component Pascal, Oberon, Perl, Fujitsu COBOL (его рекомендовал к переносу на .NET сам Билл Гейтс), а также целый ряд менее известных, но во многих случаях гораздо более полезных языков. Хочется надеяться, что выпуск их ../У-ЕТ-версий принесет им заслуженную популярность.
Среди языков, готовящихся к ../УЕТ-реализации, немало языков ( ционального программирования. Они отличаются от обычных, п дурных (императивных) языков тем, что написанная на них про ма — это не линейная последовательность операторов, а выраж Вместо механического выполнения, производится вычисление жения с активным использованием рекурсии, методов сопоставь с образцом и т. д. При этом обычно требуется достаточно мощное и нительное ядро, реализующее сложные алгоритмы поддержки bi лений. Классический пример такого языка — Лисп.
Функциональная программа чаще всего представляет собой одно выражение. Программисту в процессе его составления удается сосредоточиться на логике решения задачи в целом (что надо вычислить) на более мелкой проблеме (как что-то вычислить). К функциональным языкам можно отнести, в частности, язык SQL.
Операторы SQL делают, что надо получить от базы данных (программист просто пишет команду «дайте мне данные, связанные таким-то образом»), но не уточняют, как их получить — эта задача возлагается на сервер базы данных.
В плане реализации функциональные языки схожи с логическими декларативными языками (такими, как Пролог), определяющими тс правила решения задачи. Вычислительная работа возлагается исполнительное ядро.
Haskell
Это функциональный язык со строгой типизацией, базирующий лямбда-исчислениях (как Лисп). Он обладает прозрачной для программиста семантикой. Язык Haskell (www.haskell.org) создавался для повышения производительности работы программистов при создании больших систем. Как показал опыт таких компаний, как Ericsson ( язык Haskell применялся при разработке телекоммуникационных приложений) и Software AG (на языке Haskell написана экспертная Natural Expert), скорость создания программного обеспечения возрастала в 9-25 раз по сравнению с аналогичными проектами, где использовались C/C++.
Отличительная особенность языка Haskell — возможность использования собственного синтаксиса для формального описания требований к проекту, что позволяет безболезненно переходить от проектированию к программированию. Этот язык дает возможность писать простой, краткий и наглядный код, обеспечивая несложными средствами инкапсуляцию и полиморфизм. Так, рекурсивное описание процедуры быстрой сортировки занимает всего пять строчек. Использовать такую процедуру можно с данными любых типов, допускающих сравнение.
Все задачи управления памятью возлагаются на исполняющую среду. Программисту не надо заботиться о выделении и освобождении динамической памяти. Кроме того, среда реализует так называемое «ленивое вычисление»: в ходе выполнения программы происходит вычисление только тех данных, которые реально запрашиваются. Например, вычисление параметров процедуры, заданных в виде выражений, выполняется только в том случае, если в ходе выполнения процедуры происходит обращение к ним.
К недостаткам языка Haskell следует отнести повышенные требования к памяти (из-за рекурсии) и не очень высокое быстродействие. Впрочем, последняя версия Haskell 98 отличается неплохими показателями.
К переносу на платформу .NET готовится облегченная версия языка Haskell под названием Mondrian (www.mondrian-script.org). По синтаксису этот язык напоминает Си и Java.
Scheme