Я не забуду тебя никогда!..

 

Владимир Кузьмин

 

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

 

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

 

Вскоре с большими ЭВМ оказался забыт и ПЛ/1. Однако, если для написания расчетных программ в несколько тысяч строк на ПК удобнее всего использовать Си, то для большинства экономических и финансовых задач ПЛ/1 до сих пор подходит значительно лучше Си, Паскаля и любых других языков.

 

Вообще-то в оригинале этот язык, созданный IBM, называется PL/I. Но как только не курочили его название! Чаще всего встречалось ПЛ/1, но попадались и PL/1 и даже ПЛ/I. До сих пор в официальных сообщениях крупнейших западных фирм можно встретить PL/1.

 

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

 

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

 

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

 

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

 

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

 

Так и хочется еще раз напомнить, что все это было придумано и реализовано в 1964 г.!

 

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

 

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

 

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

 

Не забыла свое детище и IBM. В ближайшее время в ее версии языка будут реализованы принципы объектно-ориентированного программирования и осуществлена интеграция с программными компонентами, написанными на Коболе, Си и Си++. Так что российской армии программистов язык ПЛ/1 (или PL/I, кому как нравится) может еще неплохо послужить.            

 

К автору статьи можно обратиться по адресу: softart@postman.ru.

 

С. Б.

 

В ближайшее время IBM планирует реализовать в PL/I принципы объектно-ориентированного программирования и интеграцию с программными компонентами, написанными на Коболе, Си и Си++

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