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

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 имеет богатую систему встроенных типов данных:

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

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

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

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

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

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

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

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

Критика

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

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

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

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

На главную BFOmetr →