От двоичного кодирования к системам автоматической генерации кода

Вид материалаДокументы

Содержание


Borland вскоре выпустила свой Turbo Pascal
Iso/iec 8652:1985(е).
GNAT: компилятор GNUAda95
Jovial: веселый язык программирования
Pl/i, fortran
Turbo Pascal
PL/I (ПЛ/1 в советской версии) такова. В середине 60-х годов компания IBM
Jet Propulsion Laboratory
MS-DOS, Windows, OS/2, Unix/Linux, AS/400, IBM RS/6000 AIX, DEC, VM, MVS, VSE
IBM. В ее версиях языка VisualAge PL/I
Подобный материал:
1   2   3   4   5   6

Язык Ада

Среди языков программирования Ада без сомнения занимает особое место. Ада сыграла в истории программирования важнейшую роль - с помощью данного инструмента стало возможным в разумные сроки реализовывать очень масштабные (по меркам 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, сертифицированные Министерством обороны США, вы можете попытаться приобрести непосредственно у фирм-разработчиков, коих насчитывается около десятка.

Интересно, что стандартизации подвергся не только сам язык, что позво­лило создавать легко переносимые программы, но и набор вспомога­тельных средств разработчика. К ним относятся различные библиотеки ввода/вывода и организации графического интерфейса, препроцессоры, верификаторы, генераторы кода, анализаторы логической структуры программы, программы для тестирования компиляторов и многое дру­гое. Конечно, имеются крупные пакеты, включающие в себя все стан­дартизированные средства разработки, но они стоят достаточно дорого, как и полагается солидному и мощному языку программирования.


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 ResearchXinotech Language Translator (XLT), предназначенный для семантического анализа языков программиро­вания и перевода исходных текстов программ с одних языков на дру­гие с возможностью интерактивного контроля процесса преобразова­ния со стороны пользователя. В XLT используются описания языков с помощью абстрактных грамматик на XPAL (Xinotech Plan Abstraction Мeta-language) и применяются технологии сопоставления с образцом. Похожие возможности имеются у созданного в нашей стране РЕФАЛа. XLT на сегодня предоставляет возможность следующих парных пре­образований, гарантирующих корректный результат: Паскаль — Ада, CMS-2 — Ада и Jovial — Ада.

Перспективы языка Jovial в свете усилий, прилагаемых Министер­ством обороны США, можно оценить как весьма хорошие, особенно если учесть его планируемую тесную «стыковку» с языком Ада. Воз­растающая «электронизация» современной боевой техники требует не только адекватных ее возможностям средств создания программного обеспечения, но также использования существующих разработок и их интеграции в новые инфраструктуры. Связка Jovial — Ада, достаточно эффективно используемая в этой области уже сегодня, в недалеком будущем вряд ли будет иметь серьезных конкурентов в сфере создания программ для встроенных бортовых систем военного профиля. Правда, набирающий популярность язык Java уже начинает заметно теснить проверенные временем решения, и хотя консервативность государ­ственных структур в информационной сфере общеизвестна, Java имеет одно несомненное преимущество: встроенную поддержку современных сетевых технологий, отсутствующую в Jovial.

ПЛ/1, пли!

Лет 15-20 назад этот язык занимал во всевозможных «почтовых ящи­ках» СССР примерно такое же (только неформальное) место, как спе­циально созданный для использования в военных учреждениях США язык программирования Ада. Версия компилятора ПЛ/1, разработан­ная в нашей стране для компьютеров серии ЕС, использовалась для решения самых разных задач. Хотя тогда существовали и более эффек­тивные, и более удобные в некоторых отношениях компиляторы Пас­каля, Алгола 68 и других языков программирования, но программисты-ремесленники предпочитали именно ПЛ/1, не без основания считая все остальные языки пижонством.

С появлением первых персоналок популярность ПЛ/1 стала снижаться, хотя и не совсем закономерно. Компиляторы для этого языка прекрасно работали уже на IBM PC XT, куда удавалось перенести немало задач с больших компьютеров (по быстродействию равных сегодняшним пер­соналкам с процессором Intel 386/33). При этом резко возросла произ­водительность труда. На большой машине нередко крутилось до десятка задач и приходилось вымаливать у диспетчера лишние полчаса на от­ладку. При такой организации работ на скромной персоналке без жест­кого диска за один день удавалось сделать то, что на ЕС ЭВМ делалось за неделю. Затем появились системы Turbo Pascal и Turbo С с прекрас­ной по тем временам оболочкой и пошаговыми отладчиками, и если на машинах ЕС ЭВМ не сразу поставили крест, то только из-за временного превосходства в возможностях хранения данных.

Вместе с большими ЭВМ оказался забыт и ПЛ/1. А создал бы Филипп Кан вместе с Turbo Pascal еще и Turbo PLI, и, возможно, популярность Borland достигла бы заоблачных высот. Дело в том, что если для напи­сания расчетных программ в несколько тысяч строк на персональном компьютере удобнее всего использовать С, то для большинства эконо­мических и финансовых задач ПЛ/1 и сегодня подходит значительно лучше и С, и Паскаля, и любых других языков. Вообще-то, в оригина­ле этот язык, созданный компанией IBM, называется PL/I. Но как только ни уродовали его название! Чаще всего встречалось ПЛ/1, но попадались и PL/I и даже ПЛ/1. До сих пор в официальных сообщениях крупнейших западных фирм можно встретить аббревиатуру PL/I.

История PL/I (ПЛ/1 в советской версии) такова. В середине 60-х годов компания IBM решила улучшить Фортран, сделав его структуру более естественной, но это ей почему-то не удалось. Хотя достаточно вспом­нить версии Фортран 77 и 90, чтобы убедиться, что этот язык сегодня ничем не уступает многим своим собратьям третьего поколения. В сле­дующей попытке IBM постаралась взять все лучшее из Фортрана, Кобола и Алгола 60. В результате в 1964 году на свет официально по­явился новый язык программирования, который сначала называли New Programming Language, а потом переименовали в Programming Language One. Для того времени, когда ЭВМ ориентировались исклю­чительно на пакетную обработку информации, в языке было реали­зовано множество уникальных решений, полезность которых стала понятной только через несколько десятков лет, в эпоху крупных про­граммных систем.

В 80-е годы появилось немало языков (C/C++ — типичный пример), ориентированных на создание высокопроизводительных приложений, но при этом о надежности создаваемого программного обеспечения и мобильности программ (я прекрасно помню, как легко переносились на «персоналки» тексты с ЕС ЭВМ) временно забыли.

В результате, когда на рынке образовался неудовлетворенный спрос на средства разработки высоконадежных программ, появился язык Java. Интересно, что по идеологии этот язык существенно ближе к PL/I, чем к С!

ПЛ/1 значительно мощнее, чем Паскаль, Фортран 90, Кобол, Бейсик, Си и во многом похож на Аду. В частности, в ПЛ/1 присутствует уни­кальная возможность указания точности вычислений, которой не имеют ни C++, ни Java, претендующие на ведущие позиции среди средств разработки прикладного программного обеспечения.

К преимуществам ПЛ/1, которые в такой полноте сегодня не найти ни в одном из наиболее распространенных языков программирования, относятся:
  • строгая семантика языка, не допускающая двусмысленностей (известен случай, когда из-за пропуска оператора break в программе на С хакеры получили доступ ко всем банковским счетам);
  • аккуратные средства работы с указателями и памятью, напоминающие средства Java;
  • богатый набор описателей данных для управления размещением переменных в памяти;
  • готовые функции преобразования типов;
  • встроенная поддержка комплексных чисел;
  • независимость данных от типа компьютера благодаря возможности указания разрядности переменных;
  • произвольное комбинирование типов данных (можно создать, напри­мер, структуру объединений массивов) со строгим синтаксическим
    контролем их использования;
  • работа с различными представлениями данных (наложенные структуры, битовые представления, части данных);
  • использование массивов (в том числе с динамическими границами) как единой структуры данных;
  • возможность организации циклов с перебором списка значений;
  • очень мощные строковые функции (на уровне сегодняшних языков
    четвертого поколения);
  • встроенные средства отладки и диагностики этапа выполнения про­граммы (контроль выхода за границы массива, потери точности и т. д.);
  • поддержка концепции пакетов, модулей, параллельных задач и многое другое.

Одним из главных преимуществ ПЛ/1 перед другими языками стали его машинно-независимые конструкции, среди которых имелись встроенные операторы (не функции!) ввода-вывода, позволявшие получать высокомобильные программы. Эти операторы могут быть ориентиро­ваны на записи одного типа или на поточный обмен данными. При этом в отличие от С, где строка формата ввода/вывода интерпретируется в процессе выполнения, в ПЛ/1 происходит ее компилирование, что в ряде задач может существенно повысить производительность прило­жения.

Просто уникальный в ПЛ/1 препроцессор. Он представляет собой под­множество самого языка ПЛ/1 и позволяет организовывать очень слож­ные процессы генерации исходных текстов. Например, если требуется проинициализировать трехмерный массив определенной последова­тельностью чисел, то программист может организовать препроцессорный цикл генерации программы с условными операторами. Так и хо­чется еще раз напомнить, что все это было придумано и реализовано в 1964 году!

Удивительна степень мобильности программ ПЛ/1! Вот несколько при­меров. Несколько лет назад компании Rockwell потребовалось перене­сти на HP-UX компьютерную систему технического обслуживания бомбардировщиков В1, написанную на PL/I и работавшую на старых мэйнфреймах IBM 4381 (их производительность эквивалентна произ­водительности компьютеров с процессором Intel 486/50 МГц). Лет 20 назад эти машины считались одними из самых «крутых» ЭВМ; ввоз их в СССР был запрещен. Чтобы заново переписать эту систему, состояв­шую из 90 модулей по 3000 строк, требовались миллионы долларов. Два года пыталась Rockwell перевести тексты программ с PL/I на С, потратила кучу денег и уйму времени, но ничего у нее так и не получи­лось. Наконец было решено сохранить исходный язык программиро­вания. Для переноса был выбран вариант Open PL/I компании Liant, работающий под управлением Unix и Windows 95/NT. В результате перенос успешно завершился за 4 месяца, система стала работать в клиент-серверной архитектуре с СУБД Oracle (данные были перекачаны в Oracle за 3 дня), а суммарные расходы на перенос составили всего 140 тысяч долларов.

Американская лаборатория Jet Propulsion Laboratory разработала про­граммное обеспечение для обмена информацией с космической стан­цией «Вояджер», которая в 1977 году вышла на орбиту Нептуна (полет станции «Галилео» к Юпитеру был автоматизирован также с исполь­зованием PL/I). Исходные тексты занимали 55 тысяч строк. С увели­чением объемов данных, регулярно поступающих от станции, стало невозможным работать со старыми приложениями на древних мэйн­фреймах UNISYS и DEC. Было решено перенести все программное


обеспечение на сеть рабочих станций, функционирующих под управ­лением Unix/Linux. Проблема осложнялась тем, что старый PL-код был недокументирован и много раз переделывался. Сначала планиро­валось полностью переписать весь проект на Си, но из-за запутанности исходных текстов и отсутствия формальных описаний проекта данная работа оценивалась в миллионы долларов. В конце концов, был выбран продукт Open PL, и с его помощью в течение 1996 года все старые тек­сты были успешно перенесены в новую среду.

Сегодня ПЛ/1 реализован практически на всех мыслимых платформах: MS-DOS, Windows, OS/2, Unix/Linux, AS/400, IBM RS/6000 AIX, DEC, VM, MVS, VSE и многих других. Язык постоянно совершенству­ется. В него были введены новые дополнения: усилена и расширена типизация данных (в частности, добавлен тип «целое без знака»), стало возможным определять пользовательские типы, появился оператор break и т. д. Были добавлены новые функции работы с датами/временем, средства эффективной обработки строк и ряд других возможностей.

Не забыла свое детище и компания IBM. В ее версиях языка VisualAge PL/I и Enterprise PL/I (www-4.ibm.com/software/ad/pli) реализуются прин­ципы объектно-ориентированного программирования, осуществлена интеграция с программными компонентами, написанными на Коболе, С и C++, а в последнее время предлагается стыковка с Java. Так что российской армии программистов язык ПЛ/1 (или PL/I, кому как нра­вится) может еще неплохо послужить.