Пятое поколение  -  языки программирования или прикладные системы?

 

Языки программирования (ЯП) по своим возможностям и времени создания принято делить на несколько поколений (Generation Language, GL). К сегодняшнему дню насчитывается пять поколений ЯП. Каждое из последующих поколений языков по своей функциональной мощности качественно отличается от предыдущего.

 

В первое поколение (1GL) входят языки, созданные в 40 - 50-х годах, когда компьютеры только появились на свет. В то время программы писались в машинных кодах, т. е. каждая компьютерная команда вместе с ее операндами вводилась в ЭВМ в двоичном виде. Это требовало огромных усилий по набору цифровых текстов и приводило к множеству трудноуловимых ошибок. Конечно, о реализации больших проектов речи идти не могло. Ситуация качественно изменилась в начале 50-х годов, когда был написан первый ассемблер, что само по себе можно считать подвигом, учитывая довольно сложную логику программы. Хотя этот ассемблер был неполноценным в сегодняшнем понимании, но он позволял задавать названия команд в символическом виде и указывать числа не только в двоичном, но и в десятичном или шестнадцатеричном формате, что существенно облегчало работу программистов.

 

Языки первого поколения продолжают использоваться и сегодня, хотя в значительно меньшем объеме. Чаще всего приходится писать программы в машинных кодах для новых микропроцессоров, для которых еще не разработаны компиляторы, поддерживающие требуемый набор команд.

 

Расцвет второго поколения языков программирования (2GL) пришелся на конец 50-х  -  начало 60-х годов. Был создан символический ассемблер, позволявший писать программы без привязки к конкретным адресам памяти. В него было введено понятие переменной, и он по сути стал первым настоящим (хоть и машинно-ориентированным) языком программирования со своим компилятором. Скорость разработки и эффективность функционирования программ резко возросли. Ассемблеры активно применяются в настоящее время, как правило, для создания программ, максимально использующих возможности аппаратуры  -  различных драйверов, модулей состыковки с нестандартным оборудованием и т. д. В некоторых областях, например в машинной графике, на ассемблере пишутся библиотеки, эффективно реализующие стандартные алгоритмы обработки изображений. Кроме того, среди программистов просто есть немало людей, предпочитающих использовать ассемблер в своей работе. Как правило, это специалисты, хорошо разбирающиеся в электронике.

 

Появление третьего поколения ЯП (3GL) принято относить к 60-м годам. В это время родились языки, которые называют универсальными языками высокого уровня, с их помощью можно решать задачи из любых областей. Это общеизвестные Фортран, Кобол, Алгол и др. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций, позволили резко повысить производительность труда программистов. Кроме того, понятная большинству пользователей процедурная идеология этих языков привлекла к написанию небольших программ (как правило, расчетного или учетного характера) значительное количество специалистов из некомпьютерных областей.

 

Подавляющее большинство языков 3GL успешно применяется и сегодня. Современные компиляторы с интегрированными средами разработки предоставляют очень удобные средства поддержки процесса создания программ, легко осваиваемые студентами первых курсов, благодаря чему простые в освоении языки третьего поколения используются для разработки программ абсолютным большинством людей, зарабатывающих на жизнь программированием. Практически все современные коммерческие продукты, рассчитанные на массовый рынок, написаны на языках третьего поколения.

 

С начала 70-х годов по настоящее время продолжается период языков четвертого поколения (4GL). После первых восторгов по поводу безграничных способностей ЭВМ стали более ясны возможности существующих языков программирования. Несмотря на рождение новых технологий (ООП, визуальное программирование, CASE-методологии, системный анализ), процесс создания больших программных комплексов оказался очень трудоемкой задачей, так как для реализации крупных проектов требовался более глобальный подход, чем тот, который предлагали имевшиеся средства разработки. Языки 4GL частично снимали эту проблему. Целью их создания было стремление увеличить скорость разработки проектов, снизить число ошибок и повысить общую надежность работы больших программных комплексов, получить возможность быстро и легко вносить изменения в готовые проекты, активно внедрять технологии визуальной разработки и т. д. Все языки четвертого поколения интегрированы в мощные пользовательские оболочки и обладают простым и удобным интерфейсом. Они чаще всего используются для проектирования баз данных и работы с ними (встроенные языки СУБД), что объясняется возможностью формализации всех понятий, используемых при построении реляционных баз данных. Языки 4GL активно применяются в различных специализированных областях, где высоких результатов можно добиться, используя не универсальные, а проблемно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области. Как правило, в эти языки встраиваются мощные примитивы, позволяющие в одном операторе описать такую функциональность, для реализации которой на языках младших поколений потребовались бы тысячи строк кода.

 

Однако тем, кто использует языки 4GL для создания законченных приложений, по-прежнему необходимо кодировать программу вручную с последовательным вводом команд. При этом сохраняется главный недостаток языков предыдущих поколений. Он заключается в том, что все они в значительной степени ориентированы на чуждую человеческому мышлению чисто компьютерную идеологию (работа с памятью, переменными, базами данных, последовательностями абстрактных операторов и т. п.), что требует от людей хорошего понимания принципов функционирования компьютера и операционных систем. Кроме того, парадигма функционального программирования по-прежнему присутствует в языках 4GL во всей полноте, не позволяя перейти к более высокому уровню абстракций при разработке программных систем.

 

Рождение языков пятого поколения относится к середине 90-х годов. Довольно неожиданно вокруг самого названия 5GL разгорелись жаркие споры. Возникло несколько программистских "школ", представители каждой из которых имеют свое мнение о том, какие средства разработки считать языками пятого поколения, а какие  -  нет. Например, представители "английского" направления рассматривают средства разработки пятого поколения в более широком аспекте, чем это принято делать в отношении обычных языков программирования. Они считают, что к системам 5GL можно отнести не только новые мощные языки, но и системы создания программ, ориентированные на непрограммиста. Подобные системы отличаются стремлением предоставить конечному пользователю-неспециалисту богатые возможности создания прикладных программ с помощью визуальных средств разработки без знания программирования. Главная идея, которая закладывается в эти системы 5GL,  -  возможность компьютерного интерактивного или полностью автоматического преобразования инструкций, вводимых в компьютер, наиболее удобными человеку методами в максимально наглядном виде, в текст на универсальных языках программирования, описывающий готовую программу. Наличие подобного промежуточного этапа (получение не готового исполняемого модуля, а только исходных текстов, требующих дальнейшей обработки) объясняется низкой эффективностью автоматически генерируемого кода приложений, созданных с использованием подобных систем пятого поколения, что связано с внутренней сложностью последних и стремлением разрабатывать независимые от платформы продукты. Исходные тексты обычно генерируются на языках более низкого уровня, как правило, третьего поколения. Благодаря автоматическому процессу получения текстов программы результирующий код оказывается хоть и неэффективным, но высоконадежным и не содержащим ошибок. Правда, при этом возникает проблема совместимости с имеющимися на рынке компиляторами. После генерации кода созданного приложения необходимо перевести его в машинное представление. Для этого требуется тесная интеграция с имеющимися коммерческими компиляторами, легкая настройка, ориентированная на пользователя-непрограммиста и соответствие получаемого кода требованиям конкретных средств разработки. В большинстве случаев из-за острой конкурентной борьбы решить проблему совместимости в целом не удается, поэтому системы разработки 5GL ориентируются обычно на определенные версии компиляторов.

 

Создавая программы, решающие самые разные задачи, разработчики стараются использовать богатый многолетний опыт компьютерной индустрии. Системы пятого поколения имеют открытую архитектуру и поддерживают большое количество продуктов третьих фирм, предоставляя пользователю возможность интеграции с готовыми решениями для различных областей. Это могут быть всевозможные визуальные редакторы, генераторы отчетов, стандартные библиотеки, удобные Мастера (Wizards) быстрого создания типовых приложений, CASE-системы, средства интеграции с базами данных и т. п. Чем больше приложений удастся объединить в одном пакете, тем большими возможностями он будет обладать.

 

В большинстве подобных систем используются усовершенствованные технологии, воплощенные в средствах более низкого уровня. Например, возможность "мышиного" создания программ без ручного набора текстов, с использованием средства визуального проектирования ПО, взята из современных систем разработки 4GL. Другое перспективное направление, заимствованное из 4GL,  -  методы программной инженерии. Различные формальные нотации, поддерживаемые CASE-системами, позволяют с помощью мышки быстро создавать заготовки программ, SQL-"скрипты", описывающие структуру баз данных. Поскольку ряд современных языков 5GL создан на основе успешно реализованных продуктов 4GL, граница между этими поколениями сильно размыта. Системы разработки пятого поколения только появляются на свет, и нередко аббревиатура 5GL используется больше для рекламы.

 

Некоторые компьютерные эксперты считают продукты последнего поколения уже не языками, а средствами разработки, прикладными пакетами, не имеющими к процессу создания программ с помощью ЯП никакого отношения. Проектирование программы происходит в специализированном визуальном редакторе, и работа с исходными текстами отсутствует.

 

Однако значительно большая часть специалистов считает, что языки пятого поколения являются именно языками программирования, требующими от разработчика соответствующей квалификации и умения составлять программы вручную. Сторонники этого мнения под языками 5GL понимают специализированные языки, оперирующие не абстрактными переменными, а понятиями своей предметной области, например бухгалтерскими счетами или ферзями и пешками. Это, как правило, узкоспециализированные языки, предоставляющие программисту мощные высокоуровневые возможности обработки информации из конкретной области знаний. К языкам пятого поколения относят также интегрированные с базами знаний и экспертными системами программные комплексы с собственными языками программирования. Типичный пример  -  созданная в Австралии самообучающаяся нейронная сеть LISA со встроенным языком описания фактов, сущностей и взаимосвязей, на торговой марке которой красуется "лейбл" 5GL.

 

Несмотря на внешнюю противоположность языков 5GL (прикладные пакеты или языки программирования), их определяет то, что они предоставляют программисту средства разработки, использующие наиболее естественные для человеческого мышления понятия. При этом неважно, как подобные возможности будут реализованы  -  в виде усовершенствованных средств визуального проектирования или в виде новых мощных языков программирования, оперирующих привычными терминами. Наиболее актуальными для систем 5GL станут достижения в таких областях, как логическое программирование (Пролог-подобные языки и машины вывода), объектно-ориентированное программирование, исследовательское программирование (когда проект слишком сложен и неясен, а средства разработки позволяют быстро создать шаблон программы и включать в него работающие кусочки с постепенным приближением к конечному результату), использование для создания программ естественных языков, технологии управления базами знаний, методы обработки и анализа текстовой информации (энциклопедии, Web-страницы, документы) с возможностью смыслового поиска и т. д. Для создания достаточно сложных приложений планируется использовать различные экспертные системы и базы знаний со встроенными языками логического программирования, позволяющие автоматизировать многие рутинные процессы и помочь пользователю найти правильный путь решения тех или иных задач.

 

Пока сложно сказать, насколько успешной окажется тенденция к полной и недостижимой универсальности. На практике с помощью систем 5GL этого направления пока удавалось создать небольшие и логически простые приложения, которые при реализации на языках третьего поколения потребовали бы не более 10 000 исходных строк кода. При попытках разработки сложных программ возникает проблема, типичная для более старых языков,  -  необходимость отладки, что требует от пользователя высокой квалификации.

 

Языки 5GL, ориентированные на конкретные области применения, уже в ближайшее время могут завоевать самую широкую популярность. Это относится прежде всего к продуктам, позволяющим создавать приложения для работы с базами данных  -  области информатики, наиболее успешно поддающейся формализации. Наглядное подтверждение этому  -  тенденции развития практически всех известных СУБД корпоративного уровня. Вслед за встроенными языками СУБД появляются и другие проблемные ЯП. Кроме того, универсальные языки логического программирования пятого поколения наподобие Пролога, в основе которых лежат мощные математические аппараты, совсем не канули в Лету. Эти языки продолжают более чем успешно развиваться, другое дело, что для их грамотного применения требуется высокая культура программирования (и проектирования) в сравнении с Си++. И используются они для несколько других задач, чем создание коробочных бухгалтерий (хотя для этих целей они также подходят значительно лучше Си или Паскаля). Неудивительно, что в нашей стране мощными зарубежными средствами разработки, реализующими алгоритмы искусственного интеллекта или имеющими в своей основе уникальные математические теории, нередко наиболее активно интересуется ФАПСИ, что явствует хотя бы из открытых семинаров ведущих российских фирмдистрибьюторов соответствующих продуктов. Хочется надеяться, что рано или поздно и коммерческие фирмы поймут выгоду использования хоть и дорогих, но очень мощных по своим возможностям систем создания приложений сверхвысокого уровня.

 

Так что смерть языкам программирования (и профессии программиста вместе с ними) в ближайшие лет пятьдесят не грозит. А дальше будет видно.

 

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

 

К Сергею Бобровскому можно обратиться по адресу: softart@extranet.ru.

Версия для печати