Комитет ANSI X3J1¶
Комитет ANSI X3J1 — это технический комитет по стандартизации, действовавший в рамках Американского национального института стандартов (ANSI). Основной задачей комитета была разработка и поддержка стандарта языка программирования PL/I, а также связанных с ним спецификаций, включая подмножества и расширения. Комитет работал в период с конца 1960-х годов до начала 2000-х, сыграв ключевую роль в формализации одного из ранних универсальных языков программирования.
¶История
¶Предпосылки создания
Язык PL/I был разработан в 1964 году корпорацией IBM для машин серии System/360. Он сочетал черты научного FORTRAN, коммерческого COBOL и системного языка ассемблера, что делало его универсальным, но сложным. К концу 1960-х годов PL/I получил распространение не только на мэйнфреймах IBM, но и на оборудовании других производителей (например, Burroughs, Honeywell, Univac). Возникла необходимость в едином стандарте, чтобы обеспечить переносимость программ между разными реализациями.
¶Основание и первые годы
Комитет ANSI X3J1 был сформирован в 1968 году под эгидой ANSI (тогда — USASI). Его полное название — «Technical Committee on PL/I». Первоначально в состав вошли представители IBM, других производителей вычислительной техники, академических кругов и крупных пользователей (например, правительственных учреждений США). Первая встреча состоялась в 1969 году.
¶Разработка стандарта PL/I
Основной работой комитета стала подготовка стандарта языка PL/I. Первый проект был опубликован в 1972 году, но процесс согласования затянулся. Окончательный стандарт был утверждён в 1976 году как ANSI X3.53-1976. Он описывал полный язык PL/I, включая такие сложные конструкции, как задачи (tasking), исключения (ON-условия) и динамическое выделение памяти. В 1981 году вышла редакция с исправлениями — ANSI X3.53-1981.
¶Дополнительные стандарты
Параллельно комитет разрабатывал подмножества языка для упрощения реализации:
- ANSI X3.74-1981 — стандарт на подмножество PL/I (Subset G), предназначенное для малых и средних ЭВМ.
- ANSI X3.113-1987 — стандарт на интерфейс с операционной системой (PL/I General Purpose Subset).
- ANSI X3.131-1988 — стандарт на расширенное подмножество (PL/I General Purpose Subset Extended).
¶Закат активности
С середины 1980-х годов популярность PL/I начала снижаться из-за распространения языков C, Pascal и Ada. Комитет X3J1 продолжал работу по поддержке стандарта, но новые версии выходили редко. В 1990-е годы активность практически прекратилась. Официально комитет был расформирован в начале 2000-х годов, когда ANSI перестал поддерживать стандарт PL/I как активный. Последняя редакция стандарта — ANSI X3.53-1996 (с техническими исправлениями 1998 года).
¶Организационная структура
Комитет X3J1 входил в структуру ANSI, подчиняясь аккредитованному комитету по стандартизации X3 (Information Technology). Внутри X3J1 существовали рабочие группы:
- Подгруппа по синтаксису — занималась формальным описанием грамматики PL/I (в нотации БНФ).
- Подгруппа по семантике — определяла поведение конструкций языка.
- Подгруппа по подмножествам — разрабатывала упрощённые версии PL/I.
- Подгруппа по тестированию — создавала наборы тестов для проверки соответствия реализаций стандарту.
Заседания проводились 2–4 раза в год, обычно в США. Участие было добровольным, расходы покрывались организациями-членами.
¶Основные результаты
¶Стандарт PL/I (ANSI X3.53)
Стандарт определял:
- Лексику — ключевые слова (PROCEDURE, DECLARE, IF, DO, CALL), операторы, идентификаторы, литералы.
- Типы данных — числовые (FIXED, FLOAT, BINARY, DECIMAL), строковые (CHARACTER, BIT), массивы, структуры, указатели.
- Управляющие конструкции — IF-THEN-ELSE, DO-группы, SELECT, ON-условия для обработки исключений.
- Процедуры и функции — рекурсия, передача параметров по ссылке, внешние и внутренние процедуры.
- Ввод-вывод — потоковый (STREAM) и записный (RECORD), работа с файлами.
- Параллельное выполнение — задачи (TASK), синхронизация через EVENT и PRIORITY.
Стандарт занимал более 500 страниц и считался одним из самых объёмных среди языковых стандартов своего времени.
¶Подмножество G (ANSI X3.74)
Subset G был разработан для реализации на ЭВМ с ограниченными ресурсами. Он исключал:
- задачи (TASK),
- динамическое выделение памяти (ALLOCATE/FREE),
- некоторые типы данных (например, COMPLEX),
- сложные формы ввода-вывода.
Это позволило создать компиляторы PL/I для мини-ЭВМ (например, DEC PDP-11).
¶Тестовые наборы
Комитет разработал так называемый «PL/I Validation Suite» — набор из нескольких тысяч тестовых программ, проверяющих соответствие компилятора стандарту. Этот набор использовался для сертификации реализаций PL/I в США и других странах.
¶Влияние и критика
¶Влияние
Работа комитета X3J1 оказала влияние на последующие языковые стандарты:
- Методы формального описания синтаксиса и семантики, применённые в PL/I, были использованы при разработке стандартов Ada и C.
- Концепция подмножеств (subsetting) стала распространённой практикой в стандартизации (например, подмножества C или SQL).
- PL/I Validation Suite послужил прототипом для тестовых наборов других языков (например, Ada Compiler Validation Capability).
¶Критика
Стандарт PL/I критиковался за избыточность и сложность. Многие конструкции (ON-условия, задачи, макропроцессор) были трудны для реализации и использования. Кроме того, процесс стандартизации затянулся на 8 лет, что привело к расхождению между стандартом и реальными компиляторами (особенно от IBM, которые имели собственные расширения). Комитет также обвиняли в недостаточном учёте интересов небольших производителей.
¶Прекращение деятельности
В 1998 году ANSI пересмотрел статус стандарта PL/I, переведя его в категорию «устаревших» (withdrawn). Комитет X3J1 формально продолжал существовать, но не проводил заседаний после 2000 года. Окончательно он был расформирован в 2003 году. В настоящее время (2020-е годы) стандарт PL/I не поддерживается ANSI, но его спецификации доступны в архивах.
¶Наследие
Несмотря на прекращение деятельности комитета, PL/I продолжает использоваться в некоторых унаследованных системах (legacy systems), особенно в банковской сфере и государственных учреждениях США. Стандарты, разработанные X3J1, остаются основой для этих реализаций. В России PL/I применялся в советских ЭВМ серии ЕС ЭВМ (аналог IBM System/360), где использовались компиляторы, основанные на стандарте ANSI X3.53.
¶Источники
- American National Standards Institute. ANSI X3.53-1976: Programming Language PL/I. New York: ANSI, 1976.
- American National Standards Institute. ANSI X3.74-1981: PL/I Subset G. New York: ANSI, 1981.
- Sammet, Jean E. Programming Languages: History and Fundamentals. Englewood Cliffs: Prentice-Hall, 1969.
- Wexelblat, Richard L. (ed.). History of Programming Languages. New York: Academic Press, 1981.
- ISO/IEC 646:1991 (основа для кодировки, используемой в PL/I).
- Документы комитета ANSI X3J1, хранящиеся в архиве Computer History Museum (Маунтин-Вью, Калифорния).