Языки программирования. Прошлое и будущее. С.Бобровский (1012869)
Текст из файла
51
Глава 2 • Языки программирования — прошлое и будущееС. .Бобровский.
«Программная инженерия»
С.Петербург, изд-во «Питер», 2003.
Глава 2
Языки программирования: прошлое и будущее
От двоичного кодирования к системам автоматической генерации кода
Языки программирования по своим возможностям и времени создания принято делить на несколько поколений (Generation Language, GL). Каждое следующее поколение качественно отличается от предыдущего по функциональной мощности. На сегодняшний день насчитывают пять поколений языков программирования.
В первое поколение (1GL) входят языки, созданные в 40-50-е годы, когда компьютеры только появились на свет. В то время программы писались в машинных кодах, то есть каждая компьютерная команда вместе с ее операндами вводилась в ЭВМ в двоичном виде. Это требовало огромных усилий по вводу цифровых текстов и приводило к множеству трудноуловимых ошибок. Конечно, ни о каких мало-мальски больших проектах речи идти не могло. Ситуация качественно изменилась в середине 50-х годов, когда был написан первый ассемблер. Это само по себе можно считать подвигом, учитывая довольно сложную логику программы. Хотя этот ассемблер был в сегодняшнем понимании неполноценным, он позволял задавать названия команд в символическом виде и указывать числа не только в двоичном, но и в десятичном или шестнадцатеричном формате, что существенно облегчило работу программистов.
Языки первого поколения продолжают использовать и сегодня, хотя в значительно меньшем объеме. Чаще всего программы в машинных кодах ориентированы на новые микропроцессоры, для которых еще не разработаны компиляторы, поддерживающие требуемый набор команд.
Расцвет второго поколения языков программирования (2GL) пришелся на конец 50-х — начало 60-х годов. Был создан символический ассемблер, позволявший писать программы без привязки к конкретным адресам памяти. В него было введено понятие переменной, и он, по сути, стал первым настоящим (хотя и машинно-ориентированным) языком программирования со своим компилятором. Скорость создания и эффективность работы программ резко возросли. Ассемблеры активно применяются и в настоящее время, как правило, для создания программ, максимально использующих возможности аппаратуры: различных драйверов, модулей стыковки с нестандартным оборудованием и других. В некоторых областях, например, в машинной графике, на ассемблере пишут библиотеки, эффективно реализующие стандартные алгоритмы обработки изображений. Кроме того, среди программистов просто есть немало людей, предпочитающих использовать ассемблер в своей работе. Как правило, это специалисты, хорошо разбирающиеся в электронике и схемотехнике.
Третье поколение языков программирования (3GL) принято относить к 60-м годам. В это время родились языки, которые называют универсальными языками высокого уровня — с их помощью можно решать задачи из любых областей. Это общеизвестные Фортран, Кобол, Алгол и другие. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций позволили резко повысить производительность труда программистов. Кроме того, понятная большинству пользователей процедурная идеология этих языков позволила привлечь к написанию небольших программ (как правило, расчетного или учетного характера) большое количество специалистов из некомпьютерных областей.
Подавляющее большинство языков 3GL успешно применяется и сегодня. Современные компиляторы с интегрированными средами разработки предоставляют очень удобные средства поддержки процесса создания программ, легко осваиваемые студентами первых курсов компьютерных специальностей. Благодаря этому простые в освоении языки третьего поколения используются для разработки программ абсолютным большинством людей, зарабатывающих на жизнь программированием. Практически все современные коммерческие продукты, рассчитанные на массовый рынок, написаны на языках третьего поколения.
С начала 70-х годов по настоящее время тянется период языков четвертого поколения (4GL). После первых восторгов по поводу безграничных способностей ЭВМ возможности существующих языков программирования стали более понятными. Несмотря на рождение новых технологий (объектно-ориентированное программирование, визуальное программирование, CASE-методологии, системный анализ), процесс создания больших программных комплексов оставался очень трудоемкой задачей. Для реализации крупных проектов требовался более цельный подход к решаемым задачам, чем предлагали имевшиеся средства разработки. Языки 4GL частично снимали эту проблему. Цель их создания — в первую очередь увеличение скорости разработки проектов, снижение числа ошибок и повышение общей надежности работы больших программных комплексов, возможность быстрого и легкого внесения изменений в готовые проекты, упрощение самих языков для конечного пользователя, активное внедрение технологий визуальной разработки и так далее. Все средства разработки четвертого поколения имеют мощные интегрированные оболочки и обладают простым и удобным пользовательским интерфейсом. Они чаще всего используются для проектирования баз данных и работы с ними (встроенные языки СУБД), что объясняется возможностью формализации всех понятий, используемых при построении реляционных баз данных. Языки 4GL активно применяются в специализированных областях, где высоких результатов можно добиться, используя не универсальные, а проблемно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области. Как правило, в эти языки встраиваются мощные примитивы, позволяющие одним оператором описать такую функциональность, для реализации которой на языках младших поколений требуются тысячи строк кода.
Однако пользователям, использующим языки 4GL для создания законченных приложений, по-прежнему необходимо кодировать программу вручную, используя обычный последовательный ввод команд. При этом сохраняется главный недостаток языков предыдущих поколений. Все они в значительной степени ориентированы на чуждую человеческому мышлению чисто компьютерную идеологию (работа с памятью, переменными, базами данных, последовательностями абстрактных операторов и т. п.), что требует от людей хорошего понимания принципов функционирования компьютера и операционных систем. Кроме того, парадигма функционального программирования по-прежнему присутствует в языках 4GL во всей полноте, не позволяя перейти при разработке программных систем к более высокому уровню абстракций.
Рождение языков пятого поколения относится к настоящему времени. Довольно неожиданно вокруг самого названия 5GL разгорелись жаркие
споры. Возникло несколько программистских «школ», представители каждой из которых имеют свое мнение о том, какие средства разработки считать языками пятого поколения, а какие — нет. Например, на страницах лондонского журнала SURPRISE (SURueys and PResentations in Information Systems Engineering), выпускаемого при поддержке британских министерств по электронике и вычислительной технике, публикуются статьи известных специалистов в компьютерной области: профессоров Лондонского научного колледжа, разработчиков популярных английских программ и других. Представители «английского» направления рассматривают средства разработки пятого поколения в более широком аспекте, чем это принято делать в отношении обычных языков программирования. Они считают, что к системам 5GL можно отнести не только новые мощные языки, но и системы создания программ, ориентированные на непрограммиста. Подобные системы отличаются стремлением предоставить конечному пользователю-неспециалисту богатые возможности создания прикладных программ с помощью визуальных средств разработки без знания программирования.
Главная идея, которая закладывается в эти системы 5GL, — возможность компьютерного интерактивного или полностью автоматического преобразования инструкций, вводимых в систему наиболее удобными человеку методами в максимально наглядном виде, в текст на универсальных языках программирования, описывающий готовую программу. Наличие промежуточного этапа (получение не готового исполняемого модуля, а только исходных текстов, требующих дальнейшей обработки) объясняется низкой эффективностью автоматически генерируемого кода приложений, созданных с использованием подобных систем пятого поколения. Это связано с внутренней сложностью последних и желанием создавать независимые от платформы продукты.
Исходные тексты обычно генерируются на языках более низкого уровня (как правило — третьего поколения). Благодаря автоматическому процессу генерации текстов программы результирующий код получается хоть и неэффективным, но высоконадежным и не содержащим ошибок. Правда, при этом возникает проблема совместимости с имеющимися на рынке компиляторами. После генерации кода созданного приложения необходимо перевести его в машинное представление. Для этого требуется тесная интеграция с имеющимися коммерческими компиляторами, легкая настройка, ориентированная на пользователя-непрограммиста и соответствие получаемого кода требованиям конкретных средств разработки. В большинстве случаев из-за острой конкурентной борьбы решить проблему совместимости в целом не удается, поэтому системы разработки 5GL ориентируются обычно на определенные версии компиляторов.
В целях обеспечения возможности создания программ, решающих самые разные задачи, разработчики стараются использовать богатый многолетний опыт программной индустрии. Системы пятого поколения имеют открытую архитектуру и нередко поддерживают большое количество продуктов третьих фирм, предоставляя пользователю возможность интеграции с готовыми решениями для различных областей. Это могут быть всевозможные визуальные редакторы, генераторы отчетов, стандартные библиотеки, удобные Мастера (Wizards) быстрого создания типовых приложений, CAS-E-системы, средства интеграции с базами данных и т. п. Чем больше приложений удается объединить в одном пакете, тем большими возможностями он обладает.
В большинстве подобных систем используются усовершенствованные технологии, воплощенные в средствах более низкого уровня. Например, возможность «мышиного» создания программ без ручного набора текстов, с использованием средства визуального проектирования программного обеспечения, взята из современных систем разработки 4GL. Другое перспективное направление, заимствованное из 4GL, — методы программной инженерии. Различные формальные нотации, поддерживаемые CAS-E-системами, позволяют с помощью мыши быстро создавать заготовки программ и сценарии SQL, описывающие структуру баз данных. Ряд современных языков 5GL создан на основе успешно реализованных продуктов 4GL, и граница между этими поколениями сильно размыта. Пока системы разработки пятого поколения только появляются на свет, и нередко аббревиатура 5GL используется больше для рекламы — дескать, смотрите, мы впереди конкурентов!
Таким образом, определенная часть компьютерных экспертов считает продукты последнего поколения уже не языками, а средствами разработки, прикладными пакетами, не имеющими к процессу создания программ с помощью языков программирования никакого отношения. Проектирование программы происходит в специализированном визуальном редакторе, а работа с исходными текстами отсутствует.
Однако значительно большая группа специалистов считает, что языки пятого поколения являются именно языками программирования, требующими от разработчика соответствующей квалификации и умения составлять программы вручную. Сторонники этого мнения под языками 5GL понимают специализированные языки, оперирующие не абстрактными переменными, а понятиями своей предметной области, например бухгалтерскими счетами или ферзями и пешками. Это, как правило, узкоспециализированные языки, предоставляющие программисту мощные высокоуровневые возможности обработки информации из конкретной области знаний. К языкам пятого поколения относят также интегрированные с базами знаний и экспертными системами программные комплексы с собственными языками программирования. Типичный пример — созданная в Австралии самообучающаяся нейронная сеть LISA со встроенным языком описания фактов, сущностей и взаимосвязей между ними, на торговой марке которой гордо красуется « 5GL ».
Несмотря на внешнюю противоположность определений языков 5GL (прикладные пакеты или языки программирования), для реализации конкретных продуктов, подпадающих под то или иное определение, используются достижения одних и тех же компьютерных областей. В обоих случаях мы наблюдаем стремление предоставить программисту средства разработки, использующие наиболее естественные для человеческого мышления понятия. При этом неважно, как реализовано это желание: в виде усовершенствованных средств визуального проектирования или в виде новых мощных языков программирования, оперирующих привычными терминами. Наиболее актуальными для систем 5GL станут достижения в следующих областях:
-
логическое программирование (Пролог-подобные языки и машины
вывода); -
объектно-ориентированное программирование;
-
исследовательское программирование (проект сложен и неясен, но средства разработки позволяют быстро создать шаблон программы и включать в него работающие фрагменты, постепенно приближаясь к конечному результату);
-
использование естественных языков для создания программ;
-
технологии управления базами знаний;
-
методы обработки и анализа текстовой информации (энциклопедии, Wefo-страницы, документы) с возможностью смыслового поиска и т.д.
Для поддержки процесса создания сложных приложений планируется использовать различные экспертные системы и базы знаний со встроенными языками искусственного интеллекта, позволяющие автоматизировать многие рутинные процессы и помочь пользователю найти правильный путь решения тех или иных задач.
Пока сложно сказать, насколько успешной окажется стремление к полной и недостижимой универсальности. На практике с помощью систем 5GL этого направления пока удавалось создать небольшие и логически простые приложения, которые при реализации на языках третьего поколения потребовали бы не более десяти тысяч строк исходного кода. При попытках разработки более сложных программ возникает трудность, типичная для языков предыдущих поколений — необходима отладка, которая требует от пользователя высокой квалификации.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.