Реферат: От двоичного кодирования к системам автоматической генерации кода
Глава 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 этого направления пока удавалось создать небольшие и логически простые приложения, которые при реализации на языках третьего поколения потребовали бы не более десяти тысяч строк исходного кода. При попытках разработки более сложных программ возникает трудность, типичная для языков предыдущих поколений — необходима отладка, которая требует от пользователя высокой квалификации.
Языки 5GL, ориентированные на конкретные области применения, могут уже в ближайшее время завоевать самую широкую популярность. Наиболее перспективны продукты, позволяющие создавать приложения для работы с базами данных. Базы данных — это область информатики, наиболее успешно поддающаяся формализации. Наглядное подтверждение этому — тенденции развития практически всех известных СУБД корпоративного уровня. Вслед за встроенными языками СУБД появляются и другие проблемные языки программирования.
Кроме того, универсальные языки логического программирования наподобие Пролога, основанные на мощных математических аппаратах, совсем не канули в Лету, как может иногда показаться читателю российской компьютерной прессы, где мелькают сплошные «Си» и «Явы». Языки логического программирования продолжают более чем успешно развиваться; другое дело, что для их грамотного применения требуется высокая культура программирования (и проектирования) по сравнению с тем же C++. Они нужны для несколько иных задач, чем создание коробочных бухгалтерий (хотя для этих целей они также подходят значительно лучше С или Паскаля). Неудивительно, что в нашей стране мощными зарубежными средствами разработки, реализующими алгоритмы искусственного интеллекта или имеющими в своей основе уникальные математические теории, нередко наиболее активно интересуется ФАПСИ. Это явствует хотя бы из открытых семинаров ведущих российских фирм-дистрибьюторов соответствующих продуктов. Хочется надеяться, что рано или поздно и коммерческие фирмы поймут выгоду использования хоть и дорогих, но очень мощных по своим возможностям систем для создания приложений сверхвысокого уровня.
Так что смерть языкам программирования (и профессии программиста вместе с ними) в ближайшие лет пятьдесят не грозит. А дальше будет видно.
Третье поколение
^ Фортран: программисты свой выбор сделали — еще 40 лет назад
Рассмотрение языков программирования конечно лучше всего начать с самого первого языка программирования высокого уровня, как ни удивительно, не потерявшего своей актуальности и по сей день.
Язык программирования FORTRAN (FORmula TRANslation) был самым первым языком высокого уровня, получившим широкое распространение. Он возник в конце 50-х годов, когда шли горячие дискуссии о самой необходимости создания подобных языков. Программисты, разрабатывавшие программы исключительно на ассемблере, выражали сильное сомнение в возможности появления высокопроизводительного языка высокого уровня.
Поэтому основным критерием при разработке стандартов Фортрана и создании компиляторов этого языка являлась эффективность исполняемого кода. Большинство операторов Фортрана транслировалось непосредственно в одну-две машинные команды; простые синтаксические конструкции и активное использование меток и оператора goto позволяли получить очень быстрый код. В результате программы на Фортране подчас работали быстрее ассемблерных. Сама внутренняя структура оттранслированной программы была также очень простой: весь код, все подпрограммы и все данные вместе с общим блоком размещались исключительно в статической памяти, из-за чего, правда, невозможно было использовать рекурсию.
Так как Фортран был первым языком высокого уровня, отвечающим нуждам большинства пользователей компьютеров того времени, да еще и простым в изучении, распространение его произошло очень быстро. Программисты сразу сделали правильный выбор. В то время компьютеры использовались практически только для научных расчетов, и необходимости в разработке больших проектов комплексной автоматизации (в сегодняшнем понимании) тогда еще не возникало. Конечно, многие задачи, например, расчеты военного назначения, связанные с баллистикой или ядерной физикой, требовали довольно хитрого кодирования, но умельцы, воспитанные на ассемблере, без проблем справлялись с подобными трудностями.
Из-за широкого распространения языка и появления множества программ на Фортране (преимущественно вычислительного характера) насущным стал вопрос его стандартизации. Сначала это был стандарт
^ Fortran IF 1964 года, затем, по мере появления новых языков с новыми идеями, в 19 78 году был принят новый стандарт Fort ra n 77(/77)с большим числом синтаксических расширений, носящих более современный и более гибкий характер. Сегодня наиболее распространенным является стандарт Fortran 90 (f90) и его очередной пересмотренный вариант Fortran 95.
Огромное количество библиотек для Фортрана, начиная от статистических комплексов и кончая пакетами управления спутниками ^ NASA COSMIC, потребовало строгой совместимости новых стандартов языка с предыдущими версиями для обеспечения корректной трансляции старых текстов программ новыми компиляторами. Поэтому тщательной проработке стандарта именно в отношении Фортрана всегда уделялось особое внимание.
В новые версии языка вносились и ненужные дополнения, которые выглядят как следование моде и желание сохранить популярность Фортрана (это, например, расширения, связанные с динамическим выделением памяти), и полезные вещи (модульная организация программы, работа с частями массивов и другие). Все же сегодня этот язык нельзя назвать перспективным для изучения, так как его синтаксис сильно устарел. Однако разработчикам крупных систем, которым часто приходится решать вычислительные задачи, совсем не обязательно каждый раз брать в руки учебник по математике и «начинать творить» с нуля. В 90% подобных случаев то, что вы ищете, уже давным-давно было реализовано и отлажено на Фортране.
Я сам был свидетелем разработки двух схожих между собой наукоемких проектов. Вычислительные алгоритмы, написанные с десяток лет назад для машин типа VAX с диалоговым вводом данных в текстовом режиме, переписывались с помощью Microsoft Fortran (операторы ввода/вывода заменялись на обращения к внешним функциям). Из этих модулей формировались библиотеки DLL, а сама графическая оболочка разрабатывалась на C++. И все прекрасно работало. Причем в первом подобном проекте я участвовал в 1993 году, а во втором — ровно через десять лет (правда, в последнем случае вместо Microsoft Fortran использовался Intel Fortran). Популярность Фортрана за это время в научном мире ничуть не понизилась.
Поэтому «безбедная жизнь» Фортрану обеспечена надолго. Есть и еще одна ниша — параллельные вычисления, где строгая семантика языка позволяет получать высокопроизводительные программы. Обычно используется стандарт f90, немного расширенный набором операторов для указания пригодных к распараллеливанию частей программы. Параллельный Фортран имеет свой стандарт HPF (High Performance Fortran).
Ярые поклонники Фортрана, девизом которых стала легендарная фраза: «Зачем мне изучать другие языки, когда я могу все написать на Фортране?» — тем не менее, ощущали его очевидную непригодность для крупномасштабных проектов, связанную с привязанностью к синтаксису 50-х годов. Они попытались ввести в него модные идеи объектно-ориентированного программирования. К счастью, объектный Фортран в качестве стандарта так и не появился, иначе он представлял бы собой что-то типа Мерседеса с движком от Запорожца.
Среди бесплатно распространяемых версий Фортрана наиболее известен f2c, реализованный для всех Unix/Linux-систем и преобразующий текст Фортран-программы в Си-код (ftp://netlib.att.com). Для MS-DOS имеется версия bcf77, распространяемая бесплатно для студентов (ftp.uni-stuttgart.de). Отметим Watcom Fortran (www.watcom.org), генерирующий высокоэффективный код, а также прекрасную серию Intel-ком-пиляторов. А вообще различные по качеству компиляторы Фортрана имеются на абсолютно всех компьютерных платформах.
Программисты часто спрашивают: «А чем этот Фортран лучше, например, Си?» Конечно, у каждого языка есть свои плюсы, и у Фортрана это, в первую очередь, фактическое отсутствие машинно-ориентированных конструкций и определенные гарантии в отношении правильности исполнения вычислительных операций. Например, если при использовании Си-компилятора для 16-разрядных платформ целочисленное сложение 32000+1000 может дать отрицательное число, то в Фортране такие «проколы» отсутствуют, причем тщательно отслеживается накопление погрешности при вычислениях с большим числом знаков после запятой. Кроме того, программ, реализующих самые разные математические алгоритмы, на Фортране написано столько, что переписывать их на другие языки просто глупо. А вообще на подобные «наезды» — «Си лучше!» — в конференции Интернета comp.lang.fortran обычно отвечают: «А чего ты тогда сюда пишешь?»
Однако, на мой взгляд, основная заслуга Фортрана в другом. Когда стали актуальными вопросы реализации очень крупных проектов, недостатки Фортрана, в первую очередь связанные с тяжелой отладкой, оказались слишком неприятными. Поэтому Фортран послужил сильнейшим стимулом для развития теории отладки и тестирования программ. Появились сотни синтаксических верификаторов Фортран-текстов, вылавливающих скрытые логические ошибки. В дальнейшем на этом направлении выросли такие теоретические области программирования, как эквивалентные оптимизирующие преобразования программ, высокоуровневая компиляция, автоматическое тестирование и другие.
Так что про Фортран забывать никак нельзя. Использовать его в каче-1стве инструментария в задачах системной интеграции, наверное, не имеет смысла, но то, что было наработано лучшими программистами за 20-30 лет, вполне может ускорить процесс разработки программ. По крайней мере, программных «кирпичиков» для Фортрана существует несравненно больше, чем для других языков программирования.
Язык Ада
Среди языков программирования Ада без сомнения занимает особое место. Ада сыграла в истории программирования важнейшую роль - с помощью данного инструмента стало возможным в разумные сроки реализовывать очень масштабные (по меркам 60-70-х годов прошлого века) проекты. Опыт подобных проектов в свою очередь оказал стимулирующее воздействие на исследования в области программной инженерии, которые определили направления развития информационной индустрии на пару десятков лет вперед.
Применение языка Ада при создании систем реального времени потребовало проведения достаточно сложных исследований, связанных с обеспечением поддержки в одной программе нескольких одновременно выполняющихся процессов. Через некоторое время эти исследования были положены в основу быстро набравших популярность технологий параллельных вычислений.
История этого языка начинается отнюдь не с 1975 года, когда Министерство обороны США приняло решение о начале разработки единого языка программирования для американских вооруженных сил, а в дальнейшем и для всего НАТО. История его начинается с названия, ибо Ада — имя Августы Ады Лавлейс, которую считают первой программисткой. Она была дочерью английского поэта Байрона и его отдаленной родственницы Анабеллы Милбэнк, с которой супруг расстался навсегда через месяц после рождения дочери, появившейся на свет 10 декабря 1815 года.
После того как Чарльз Бэббидж сконструировал свою механическую вычислительную машину, Ада написала для нее первую программу для вычисления коэффициентов Бернулли. В дальнейшем она разработала настоящую теорию программирования, ввела понятие цикла и еще нескольких ключевых терминов, которые почти дословно изучают сегодня студенты кибернетических факультетов! Сегодня Ада известна всем только как первая программистка, однако почему же у молодой девушки проявились такие уникальные способности? На этот вопрос откровенно ответила она сама: «Клянусь Дьяволом, что не пройдет и 10 лет, как я высосу некоторое количество жизненной крови из загадок вселенной, причем так, как этого не смогли бы сделать обычные смертные умы и губы. Никто не знает, какие ужасающие энергия и сила лежат еще неиспользованными в моем маленьком гибком существе...» Однако спонсоров на проект вычислительной машины не нашлось — ядерных ракет тогда еще не было, и Ада, проиграв на скачках все свое состояние и попав в грязную историю, скончалась в возрасте 37 лет, как и ее знаменитый отец. Стоило ли американцам так превозносить Аду, вопрос весьма спорный.
Вернемся к разработке языка Ада. Через пять лет после начала проекта сотни экспертов отобрали из 17 вариантов единственный удовлетворяющий требованиям язык, разработанный небольшой группой, которой руководил талантливый ученый Жан Ишбиа. Конечная версия международного стандарта ISO 8652:1987 была опубликована в 1987 году. По официальным сообщениям, в создании и доработке этого языка участвовали все лучшие специалисты мира в области программирования, что, впрочем, вызывает сомнение. Например, в первоначальном варианте Ады отсутствовало понятие объекта, да и советские программисты в этом проекте не участвовали, хотя и по очевидным причинам.
В развитие инфраструктуры Ады во всем мире были вложены десятки миллиардов долларов. Это привело к появлению амбициозных заявлений типа: «XX век пройдет под знаком Ады». Однако, как обычно, жизнь все расставила по своим местам.
К сожалению, для Министерства обороны США, активные работы по разработке четкого стандарта на этот язык и созданию эффективных компиляторов были завершены как раз в то время (начало 80-х), когда только-только стал вырисовываться на горизонте программной индустрии новый язык C++ с объектной идеологией. Теперь трудно сказать, что испытывал комитет разработчиков Ады, видя, как растет популярность C++ и старой, хорошо забытой объектной парадигмы мышления. Но выделенные средства уже были потрачены, стандарт создан — обратной дороги не было.
Структура самого языка очень похожа на Паскаль, а еще точнее, на Модулу. Синтаксис большинства операторов и описаний практически идентичен синтаксису Модулы, хотя она появилась практически в одно время с Адой, и трудно сказать, кто на кого оказал влияние и оказал ли влияние вообще. В Аду, в частности, было добавлено довольно много различных расширений, так что компактным, по сравнению с тем же Паскалем, этот язык назвать никак нельзя. По количеству своих возможностей Ада скорее напоминает PL/I. Но так как основной упор создатели Ады делали на модульность и соответствие пожеланиям американских «первых отделов», то средства закрытости (видимости) данных и возможность разработки отдельных блоков с использованием только спецификаций (интерфейсных описаний модулей) других разработчиков были для того времени самыми совершенными. Например, программист, реально писавший код для вычисления траектории полета крылатой ракеты, даже не представлял себе, где и для каких целей его модуль будет использоваться, хотя имел доступ к требуемым спецификациям других сотрудников и мог без проблем отлаживать свой участок кода. Из-за строгого разграничения доступа к различным уровням спецификаций подчас оказывалось невозможно определить, для чего и какими средствами должна вызываться данная процедура. Стремление к независимой разработке программ привело к весьма сложной системе взаимосвязей между спецификациями модулей и появлению «дыр», способных вызвать побочные эффекты, наличие которых, впрочем, Министерство обороны США сочло даже полезным.
Кроме того, были усилены элементы типизации данных, а также более формализованы сами типы. Все функции, связанные с вводом-выводом, были исключены из стандартного синтаксиса, а обработка исключительных ситуаций стала неотъемлемой частью языка. Кроме того, была доведена до предела мощность управляющих конструкций, что делало Аду наиболее передовым среди других паскалеподобных языков.
Фирма ^ Borland вскоре выпустила свой Turbo Pascal, в который было встроено понятие модуля, и приблизило по возможностям свою версию Паскаля к Аде. Однако в дальнейшем попыток создания необъектных языков программирования третьего поколения, предназначенных для разработки сверхбольших проектов, к счастью, не предпринималось. Поэтому Ада поставила жирную точку в длинной веренице простых процедурных языков, начиная с Фортрана и Алгола. Фактически все, что только можно было придумать в рамках идеологии структурного программирования, было воплощено в Аде. Затем стремительно расцвело объектное программирование, и Ада отошла на второй план.
Однако этот язык по-прежнему занимает особую нишу, в которой равных ему пока нет. Помимо раздельной компиляции модулей и обеспечения иерархической секретности спецификаций, в нем была реализована такая черта, как поддержка параллельного программирования. Предпринятое на более-менее высоком уровне в Алголе-68, затем развитое в Модуле-2, оно воплотилось в очень мощных средствах Ады — так называемых задачах, способных выполняться независимо друг от друга, на параллельных компьютерах. Это привело к рождению целой идеологии программирования, базирующейся на задачах, которые могли выполняться «псевдопараллельно» на компьютере с одним процессором. При этом решаемая задача разбивалась на набор одновременно работающих процедур, независимо взаимодействующих друг с другом. Это немного напоминало способ решения задачи на Прологе: описывается некий виртуальный мир, а затем он как бы «запускается» на функционирование, и решение находится само собой.
Тем более удивительно, что Министерство Обороны США по тем или иным причинам отказалось от объектной идеологии, прекрасно воплощенной еще в 60-е годы в Симуле-67, и наверняка не раз пожалело об этом. Правда, в язык Ада была введена довольно жалкая замена ряда возможностей, предоставляемых объектно-ориентированным программированием, — так называемые шаблоны, то есть процедуры с параметрами неопределенных типов. Но все-таки главным преимуществом Ады, которое позволяет ей и сегодня выдерживать натиск более развитых языков, явилась, помимо мощного финансирования, встроенная поддержка параллельного выполнения задач и мощные средства координации их взаимодействия. Здесь необходимо отметить, что основная ориентация Ады — это отнюдь не системы автоматизации бухгалтерии в Министерстве обороны США, а чисто боевые задачи, например, управление в реальном времени самонаводящейся ракетой, где микропроцессору требуется одновременно обрабатывать информацию, непрерывно поступающую от множества самых разнообразных датчиков. Ранее такие задачи писались на ассемблере, что приводило к множеству ошибок и трудностям сопровождения. Для подобных задач Ада, конечно, подходит как нельзя лучше.
Но язык Ада продолжают позиционировать и как хорошее средство для разработки больших программных комплексов. Правда, теперь голоса в поддержку этого языка звучат уже тише, примерно так: «Ада, по крайней мере, не хуже Си». С учетом главного промаха, отсутствия объектов, и современных требований к технологии разработки программ был разработан новый стандарт языка ^ ISO/IEC 8652:1985(Е). Он описывает версию языка Ada95 (njmAda9X). Самое интересное, что эта версия является первой в мире объектно-ориентированной системой программирования, на которую имеется международный стандарт, введенный, по-видимому, в приказном порядке (с C++ так пока не получается). Кроме того, в языке была улучшена система согласования видимости данных в спецификациях модулей, и добавлены средства повышения эффективности функционирования параллельных задач.
Министерство обороны США довольно ревниво относится к своему дорогому детищу, и даже зарегистрировало слово «Ada» как свою торговую марку. Правда, впоследствии вместо торговой марки Министерство обороны решило использовать «Ada» как свой внутренний сертифицированный знак. Без особой радости Министерство обороны США относится и к появлению коммерческих версий этого языка. Конечно, никто не вправе запретить вам написать компилятор, но чтобы он получил коммерческое признание, необходимо его соответствие военному стандарту, а тестирование осуществляется только комитетом AJPO при Министерстве обороны США, который очень строго проверяет соответствие компилятора множеству требований, в том числе, по-видимому, и чисто политических.
Тем не менее, различные версии Ады можно получить, как это обычно бывает с языками программирования, на халяву, то бишь даром (не пиратским способом, а fгееwaге-версии), а также, конечно, за деньги.
Из свободно распространяемых версий в первую очередь необходимо выделить ^ GNAT: компилятор GNUAda95 (ftp://cs.nyu.edu/pub/gnat). В рамках проекта GNU (свободно распространяемого программного обеспечения) его можно получить в исходных текстах. Работать он может и на компьютере с одним процессором, только надо, чтобы операционная система поддерживала многозадачность. Это может быть, например, какая-нибудь версия Unix/Linux, или Windows NT/2000/ХР. Что касается MS-DOS — догадайтесь сами. Но если очень хочется запустить сотню-другую параллельных процессов на вашей персоналке под MS-DOS 6.x, то вполне можно попробовать Ada/Ed (ftp://cs.nyu.edu/pub/ adaed). Это компилятор и интерпретатор версии языка 1987 года, который, впрочем, совершенно несовместим со стандартом и не имеет ряда существенных элементов.
Если есть деньги, то ситуация, конечно, облегчается. В пределах месячной зарплаты среднего российского программиста можно приобрести, например, FirstAda за полтысячи долларов, и написать систему управления холодильником. Более дорогие системы для Windows или Unix/ Linux, сертифицированные Министерством обороны США, вы можете попытаться прио
еще рефераты
Еще работы по разное
Реферат по разное
Проблема причинности в современной физике*
17 Сентября 2013
Реферат по разное
Организационный взнос организационный взнос
17 Сентября 2013
Реферат по разное
Темы: Авиационная и аэропортового оборудования, Транспорт и логистика Inter Airport
17 Сентября 2013
Реферат по разное
Системы управления запасами Кугач В. В., Мастыков А. Н. Вгму, Витебск Введение
17 Сентября 2013