Открыть сервис

PL/I

PL/I — это язык программирования общего назначения, разработанный в середине 1960-х годов корпорацией IBM. Название является аббревиатурой от «Programming Language One» (Язык программирования номер один). PL/I был создан как попытка объединить возможности языков для научных (FORTRAN), коммерческих (COBOL) и системных (ассемблер) задач в одном универсальном инструменте. Язык отличался исключительно богатой стандартной библиотекой, поддержкой структурного и модульного программирования, а также сложным синтаксисом, что делало его мощным, но трудным для изучения.

История

Предпосылки создания

В начале 1960-х годов в вычислительной технике существовал «языковой разрыв». Для научных и инженерных расчётов использовался Fortran, для бизнес-приложений — COBOL, а для системного программирования — ассемблеры. Организациям, особенно крупным корпорациям и государственным учреждениям, приходилось поддерживать несколько языков и специалистов. В 1963 году комитет SHARE, объединяющий пользователей мейнфреймов IBM, выдвинул инициативу создания единого языка, который бы покрыл все эти области.

Разработка и анонс

Разработка была поручена компании IBM. Первая версия компилятора была выпущена в 1966 году для операционной системы OS/360. Изначально язык назывался просто «NPL» (New Programming Language), но это название вызвало конфликт с британской National Physical Laboratory. В итоге, в 1965 году было официально принято название PL/I. IBM вложила значительные ресурсы в продвижение языка, позиционируя его как будущее программирования.

Версии и стандартизация

В 1976 году была опубликована версия PL/I (F), которая стала первой официальной стандартизацией. Она включала, среди прочего, поддержку структур данных, многозадачности и обработки исключений. В 1981 году вышел стандарт ANSI X3.53-1981, а затем в 1984 году — ISO 6160:1984. Последняя крупная версия стандарта — ANSI/IEEE X3.74-1987, принятая в 1987 году. Несмотря на стандартизацию, IBM продолжала выпускать свои расширения для конкретных систем (например, PL/I for MVS, PL/I for OS/390, Enterprise PL/I for z/OS). Эти реализации отличались от стандарта в деталях.

Спад популярности

К 1970-м годам стало очевидно, что обещания PL/I не оправдались в полной мере. Язык оказался слишком сложным для обучения, его компиляторы требовали больших ресурсов, а программы часто были менее эффективными по сравнению с написанными на специализированных языках. Кроме того, появление более простых и эффективных языков (C, Pascal) сделало PL/I нишевым решением. К концу 1980-х годов он использовался в основном для сопровождения старых систем (legacy code) на мейнфреймах IBM.

Современное состояние (на 2025 год)

PL/I по-прежнему применяется, хотя и в крайне ограниченной сфере — в основном для поддержки мейнфреймов IBM Z в крупных банках, страховых компаниях и государственных учреждениях. Тысячи приложений на PL/I продолжают работать. В 2016 году компания IBM выпустила Enterprise PL/I 5.1 для z/OS, который поддерживает современные стандарты (Unicode, XML, 64-разрядную адресацию). Несмотря на это, рынок труда для PL/I-программистов крайне узок и преимущественно связан с обслуживанием старых систем. Свободных (бесплатных) реализаций полного стандарта не существует; все коммерческие компиляторы (IBM, Micro Focus) являются платными.

Классификация и парадигмы

PL/I относится к императивным, процедурным и в общем случае — к языкам высокого уровня. В рамках одного языка он поддерживает множество парадигм:

Характеристики и особенности

Синтаксис

Синтаксис PL/I — его самая знаменитая (и, по мнению критиков, ужасная) особенность. Он построен на свободном формате (игнорирование пробелов) и использует ключевые слова для управления структурой программы. Например, блоки кода всегда обрамляются парами PROCEDURE/END, DO/END. Комментарии заключаются в пару символов / ... /. Язык является регистронезависимым.

Типы данных

PL/I имеет богатую систему встроенных типов данных:

  • Числовые: FIXED BINARY (целые), FIXED DECIMAL (дробные с фиксированной точкой), FLOAT BINARY/DECIMAL (вещественные с плавающей точкой), COMPLEX (комплексные).
  • Строковые: CHARACTER VARYING (строки переменной длины), CHARACTER (строки фиксированной длины), BIT (битовые строки).
  • Структуры (структурные типы): Определяются ключевым словом STRUCTURE или через объявление переменных в блоках DECLARE ... BASED. Позволяют объединять разные типы данных (например, для работы с записями файлов).
  • Указатели: POINTER для адресной арифметики.
  • Массивы: Однородные и неоднородные, с произвольным числом размерностей.

Переменные и объявления

Объявление переменных выполняется с помощью ключевого слова DECLARE. Оно может быть явным или неявным (по умолчанию). PL/I поддерживает динамические массивы, размер которых может изменяться во время выполнения, что активно использовалось.

Управляющие конструкции

  • Условные операторы: IF condition THEN ... ELSE ...
  • Циклы: DO WHILE (condition); ... END;, DO UNTIL (condition); ... END;, DO variable = start TO finish BY step; ... END;
  • Выбор: SELECT (expression); WHEN (value1) ... OTHERWISE ... END;

Обработка исключений

Одно из новшеств PL/I — концепция ON units. Например: ``pl/i ON OVERFLOW BEGIN; PUT LIST('Арифметическое переполнение!'); CALL ERROR_HANDLER; END; `` Такие блоки позволяют перехватывать и обрабатывать ошибки, не прерывая выполнение программы.

Многозадачность

PL/I позволяет создавать параллельные задачи (tasks). Программа может запускать дочерние задачи с помощью CALL TASK, а затем синхронизировать их. Это одна из ранних реализаций многопоточности.

Основные области применения

  • Системное программирование: В 1960-70-х годах на PL/I была написана часть компонентов операционной системы OS/360 (например, подсистема управления базами данных IMS).
  • Бизнес-приложения (Мейнфреймы): Огромное количество приложений для обработки транзакций, банковских систем, расчета заработной платы. Большая часть этого кода до сих пор работает на мейнфреймах.
  • Научные расчеты: Меньше, чем в Fortran, но PL/I поддерживал числа с плавающей точкой и комплексные числа.
  • Текстообработка: Строковые типы и функции делали PL/I популярным для задач по обработке текстов в крупных системах.

Критика

PL/I подвергался суровой критике на протяжении всей своей истории:

  1. Чрезмерная сложность: Язык был признан одним из самых сложных для изучения. Сотни ключевых слов, неоднозначный синтаксис (например, неявное объявление переменных) и сложная система правил делали разработку на нём дорогостоящей и подверженной ошибкам.
  2. Несовместимость: Компиляторы разных производителей (IBM, Micro Focus) часто по-разному трактовали стандарт, что вело к проблемам переносимости кода.
  3. Непрозрачность: Код на PL/I часто труднее читать и поддерживать по сравнению с языками с более строгим синтаксисом (например, Pascal).
  4. Ресурсоёмкость: Компиляторы PL/I были медленными, а сгенерированный код — менее эффективным по сравнению с нативным кодом на C или ассемблере.
  5. Негибкость: Язык пытался покрыть слишком много областей сразу, но в каждой из них он уступал специализированному языку (Fortran — научные; COBOL — бизнес; C — системное).

Литература и документация

  • IBM Enterprise PL/I for z/OS User’s Guide — официальная документация от производителя.
  • PL/I Language Reference Manual (GC33-0006-0) — оригинальная документация IBM (1966 год).
  • «PL/I Programming» by E. H. P. (Englebert) B. — книги по изучению языка**.
  • S. P. (Steven) M. — «A Guide to PL/I» — учебное пособие.
  • Стандарты: ANSI X3.53-1981, ISO 6160:1984, ANSI/IEEE X3.74-1987.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →