Языки программирования. Прошлое и будущее. С.Бобровский (1012869), страница 3
Текст из файла (страница 3)
Однако этот язык по-прежнему занимает особую нишу, в которой равных ему пока нет. Помимо раздельной компиляции модулей и обеспечения иерархической секретности спецификаций, в нем была реализована такая черта, как поддержка параллельного программирования. Предпринятое на более-менее высоком уровне в Алголе-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, сертифицированные Министерством обороны США, вы можете попытаться приобрести непосредственно у фирм-разработчиков, коих насчитывается около десятка.
Интересно, что стандартизации подвергся не только сам язык, что позволило создавать легко переносимые программы, но и набор вспомогательных средств разработчика. К ним относятся различные библиотеки ввода/вывода и организации графического интерфейса, препроцессоры, верификаторы, генераторы кода, анализаторы логической структуры программы, программы для тестирования компиляторов и многое другое. Конечно, имеются крупные пакеты, включающие в себя все стандартизированные средства разработки, но они стоят достаточно дорого, как и полагается солидному и мощному языку программирования.
Jovial: веселый язык программирования
Ада, несмотря на все усилия ее создателей, обладала достаточно внушительным списком недостатков. Кроме того, в силу исторических причин, характерных для всех стран, развивавших собственную компьютерную промышленность, число языков программирования, используемых в государственных структурах, нередко достигало десятка. Вместе с Адой применялись PL/I, FORTRAN, Кобол, а также ассемблер. Подобная бессистемность приводила к возникновению множества плохо или совсем не совместимых друг с другом приложений и к сложностям в их развитии и поддержке. Рассматриваемый здесь язык Jovial представляет собой типичный образчик подобного не самого хорошего и не самого плохого языка, стечением обстоятельств ставшего одним из военных стандартов.
Современная армия немыслима без использования электронных технологий. Бортовые микропроцессорные системы, устанавливаемые на военной технике (самолетах, танках, стационарных и мобильных ракетных установках и т. п.), применяются для решения самых разных боевых задач. Эти системы используются для автоматического контроля, управления, анализа состояния и степени поражения боевой техники; они позволяют повысить точность стрельбы и организовать эффективное управление системами ведения огня. Устанавливаемые на ракетах электронные бортовые комплексы обеспечивают непрерывное слежение за целью и нахождение оптимальной траектории атаки. Все эти возможности обеспечиваются программистами, разрабатывающими прикладные программы для подобных систем.
Создание программного обеспечения, применяемого для решения боевых задач, первоначально было затруднено. Это связано с повышенными требованиями к надежности функционирования программ, с необходимостью обеспечения повышенного уровня секретности и с использованием специализированных, созданных специально для военных применений микропроцессоров с оригинальной архитектурой и нестандартной системой команд. Первые программы для этих микропроцессоров писались в машинных кодах, что приводило к огромной стоимости проектов, изобиловавших вдобавок множеством ошибок. Поэтому для создания программного обеспечения, отвечающего вышеприведенным требованиям, программистам понадобились мощные средства разработки, жестко ориентированные на внутреннюю структуру микропроцессоров, которые применяются в бортовых системах. Создание подобных средств, в силу специфичности их применения, было возможно только по заказу военного министерства.
Первыми инициаторами практического внедрения бортовых систем и создания для них средств разработки программного обеспечения были ВВС США. Это связано с тем, что в авиации используется наиболее дорогостоящая и сложная в управлении техника. 26 октября 1983 года американская военная директива за номером 9070 констатировала насущную необходимость создания универсального средства разработки программ для бортовых авиационных систем. В качестве основных требований к нему в первую очередь выдвигались высокая надежность получаемого кода, эффективность работы программ при жестких ограничениях на объемы памяти и возможность быстрой и дешевой реализации проектов. Лучшие военные специалисты США были брошены на поиски подходящего средства разработки программного обеспечения, которое планировалось быстро адаптировать к внутренним нуждам Министерства обороны. Такое средство было найдено довольно быстро. Им оказался старый язык программирования Jovial (в переводе — веселый). В его основе лежал язык IAL (International Algorithmic Language), один из первых диалектов Алгола, в дальнейшем усовершенствованный и получивший название OVIAL (Own Version of the IAL). Американский программист Джулиус Шварц (Jules Schwartz) дополнил OVIAL рядом полезных усовершенствований и прибавил к аббревиатуре первую букву своего имени — так в январе 1959 г. на свет появился Jovial. Одной из главных целей создания языка Jovial Шварц объявил создание кросс-платформных программ, способных работать в режиме реального времени. Во внутреннюю структуру Jovial-ма-шины были заложены гибкие возможности оптимизации кода, не зависящие от платформы, и быстрый перенос программ при модификации архитектуры целевого компьютера. Жесткая структура организации файлов с исходными текстами, не допускающая машинно-зависимых синтаксических конструкций, позволяла легко переносить программы на различные платформы. Именно эти возможности и оказались ключевыми при выборе этого языка ВВС США.
Сегодня язык программирования Jovial, несмотря на свое «веселое» название, применяется отнюдь не для создания развлекательных программ. Хорошо продуманная кросс-платформная идеология и успешная практика применения позволили ему завоевать признание практически во всех военных областях. Сорок подрядчиков Пентагона написали с его помощью программы, исполняемые на бортовых процессорах многих американских военных самолетов (бомбардировщики В-2, F-117, транспортные самолеты С-17, истребители F-15, F-16, F-18, F-22), вертолетов огневой поддержки, ракет тактического и стратегического назначения, крейсеров, космических спутников и других систем. Этот язык используется для создания программного обеспечения, управляющего мобильными и стационарными ракетными установками на поле боя и в радарных системах слежения. Применяют его в некоторых видах боевой техники и американские силы специального назначения.
Чтобы не распылять усилия разработчиков и обеспечить единый подход к созданию и унификации программного обеспечения, Министерство обороны США приняло стандарт на набор команд для 16-разрядного микропроцессора, используемого в бортовых военных системах. Этот стандарт получил название MIL-STD-1750. В дальнейшем набор команд был дополнен несколькими дополнительными инструкциями, и модификация этого стандарта 1750А используется в американской армии по сей день.
В силу жестких требований, предъявляемых к языку, реализация Jovial, созданная в ВВС США, представляет собой не просто компилятор, а целый комплекс стандартизованных средств разработки. В этом на него похожа система Java, в типичную поставку которой помимо компилятора обязательно входит виртуальная Jaua-машина, набор библиотек, средства отладки, средства просмотра, имитирующие работу в сети и многое другое. Язык Jovial распространяется в комплекте разработчика под названием ITS. Этот комплект представляет собой прекрасный пример тщательно продуманного подхода к выбору и совершенствованию средства разработки программного обеспечения, которое планируется использовать в ответственных областях десятки лет. В типовой комплект ITS входят кросс-платформные компилятор и макроассемблер, поддерживающий систему команд 1750А, сборщик, символьный интерактивный отладчик, поддерживающий режим реального времени, программный симулятор процессора с набором команд 17БОА, библиотека стандартных модулей и загрузчик кода в оборудование стандарта 1750 (при наличии соответствующих аппаратных плат). Первая очередь этого комплекса была закончена в 1984 году. Первоначально она функционировала только на мэйнфреймах, а сегодня работает также под управлением SCO UNIX или MS-DOS. Комплект ITS обеспечивает генерацию кода не только для микропроцессора 1750А, но и для VAX, IBM PC, Z80, М680ХО, Д/5С-компьютеров и ряда других систем. Наиболее популярная реализация ITS для компьютеров серии VAX используется сегодня более чем в 50 подразделениях Министерства обороны США. Почти так же популярна реализация для персоналок, работающая под управлением Unix/Linux.
Комплект ITS (www.jovial.hill.af.mil) распространяется правительством США бесплатно. Для получения (или попытки получения) этого комплекта рекомендовано обращаться к военному атташе американского посольства.
Сегодня имеются и коммерческие версии языка Jovial, впрочем, распространяемые за пределами США только с разрешения американских компетентных органов. Стоят эти версии десятки тысяч долларов. Одна из них представляет собой компилятор Jovial для платформ VAX/VMS, SPARC/SunOS, HP/UX, позволяющий получать код для Z8000 и 1750А. В комплект дополнительно включаются ассемблер для каждой платформы, сборщик, симулятор целевых наборов команд и символьный отладчик, использующий интерфейс X-Windows. Настройки оптимизации позволяют получать код, который по сравнению с кодом, написанным на ассемблере вручную, дает выигрыш на 15% в размере программы и скорости ее выполнения.
Стремительно возросшая сложность современной боевой техники потребовала более мощных микропроцессорных устройств управления. Летом 1996 года был выпущен компилятор для Jovial, работающий под управлением операционной системы Solaris компьютеров Sun SPARC. Он позволяет получать код для бортовых управляющих систем, основанных HaM/PS-микропроцессорах серии R2000/3000/4000. Компилятор встроен в графическую оболочку, содержащую редактор и символьный отладчик. Эта оболочка хорошо известна разработчикам программ на Аде для компьютеров SPARC; теперь она стала доступна и программистам на языке Jovial.
Министерство обороны США уделяет языку Jovial большое внимание. За последние 15 лет использования Jovial американская армия инвестировала в его совершенствование более 16 миллионов долларов. Суммы, стимулирующие написание программ на Jovial и перенос других программных систем на этот язык, увеличиваются с каждым годом. Для организации полной совместимости всего программного обеспечения, используемого в бортовых системах, американские военные приняли стандарт MIL-STD-1589 на версию этого языка J-73. Теперь все программное обеспечение, разрабатываемое в подразделениях Министерства Обороны США на языке Jovial, должно соответствовать данному стандарту. ВВС США собираются провести полный реинжиниринг своей компьютерной инфраструктуры, при этом все программное обеспечение, работающее в бортовых микропроцессорных устройствах, планируется перенести на языки Jovial и Ада. В данном проекте особое внимание уделяется связке этих языков. Дело в том, что множество программ, предназначенных для решения боевых задач, довольно бессистемно разрабатывались как на том, так и на другом языке. Теперь же планируется осуществить интеграцию компьютерных программ, написанных на этих языках, с целью обеспечения возможности их совместного использования и легкой модификации программного обеспечения. Для решения этой задачи будет активно использоваться продукт фирмы Xinotech Research — Xinotech Language Translator (XLT), предназначенный для семантического анализа языков программирования и перевода исходных текстов программ с одних языков на другие с возможностью интерактивного контроля процесса преобразования со стороны пользователя. В XLT используются описания языков с помощью абстрактных грамматик на XPAL (Xinotech Plan Abstraction Мeta-language) и применяются технологии сопоставления с образцом. Похожие возможности имеются у созданного в нашей стране РЕФАЛа. XLT на сегодня предоставляет возможность следующих парных преобразований, гарантирующих корректный результат: Паскаль — Ада, CMS-2 — Ада и Jovial — Ада.