ПЛ/1

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

ПЛ/1 (PL/I, Programming Language I — «Язык программирования номер один», в русском языке произносится «пиэ́ль оди́н») — разработанный в 1964 году язык программирования, созданный для научных, инженерных и бизнес-ориентированных вычислений. Он содержит такой широкий набор синтаксических конструкций и встроенных функций, что, вероятно, не существует ни одного компилятора, поддерживающего все возможности языка ПЛ/1. ПЛ/1 поддерживает рекурсию и структурное программирование, и его основная область применения — обработка данных.

Содержание

Основные свойства языка ПЛ/1

  • Свободный синтаксис
  • Ключевые слова и идентификаторы нечувствительны к регистру
  • По умолчанию (в классических мэйнфреймовских версиях — всегда) передача параметров по ссылке
  • Поддержка сложных структур с объединениями (в терминологии языка Паскаль — записи с вариантами)
  • Чрезвычайно развитая система встроенных типов данных, при этом возможность неявных преобразований между большинством из них
  • Несколько видов динамического выделения памяти
  • Очень обобщенные операторы со многими вариантами синтаксиса
  • Строго определённая семантика управляющих конструкций (например, оператор цикла определён через эквивалентные присваивания и go to и т.д.)
  • Операции с массивами
  • Развитый механизм исключительных состояний
  • Поддержка на уровне языка мультизадачности и асинхронного ввода-вывода
  • Поддержка на уровне языка сложных методов доступа для ввода-вывода
  • Очень развитый препроцессор, фактически сам являющийся подмножеством ПЛ/1

Алфавит языка

Первоначальный алфавит ПЛ/1 включал 60 символов:

$ @ # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / ( ) , . ' % ; : ¬ & | > < _ ? пробел

Была предусмотрена возможность работы и с более ограниченным 48-символьным алфавитом, в который не входили @ # ; : ¬ & | > < _ ? — вместо отсутствующих символов использовались дополнительные ключевые слова[1]:

60 : ; || > >= < <= ¬< ¬> ¬= ¬ | & ->
48 .. ,. CAT GT GE LT LE NL NG NE NOT OR AND PT

В современных версиях языка разрешено использовать также строчные латинские буквы (ключевые слова можно писать и заглавными, и строчными буквами). Вместо символа ¬ (отрицание), отсутствующего в переносимом наборе символов, используют ~.

История ПЛ/1

ПЛ/1 был разработан в IBM как часть системы System/360. До того, IBM разработала несколько несовместимых компьютеров для разных целей: одни для научных, другие — для бухгалтерских приложений. Целью System/360 была разработка единой системы совместимых компьютеров, которые заменили бы все предыдущие модели и могли бы с успехом использоваться для любых задач.

Научные и бухгалтерские программы не только использовали разные компьютеры, но ещё и писались на разных языках: научные — на Фортране, бухгалтерские — в основном на Коболе. Целью ПЛ/1 было создание языка, подходящего для обоих типов приложений. Другой целью было добавление конструкций для структурного программирования, взятых из Алгол-60, не поддерживаемых в то время ни Коболом, ни Фортраном.

Для разработки ПЛ/1 был сформирован комитет, состоящий из программистов IBM и пользователей со всех концов США. Работа комитета длилась несколько месяцев. Изначально планировалось, что ПЛ/1 будет готов к использованию к моменту запуска System/360, но это не было выполнено.

Язык изначально был назван NPL (New Programming Language — "Новый Язык Программирования"), но эта аббревиатура уже использовалось британской Национальной Физической Лабораторией (National Physics Laboratory). Поэтому название изменили на ПЛ/1.

Поначалу ПЛ/1 вызвал большой энтузиазм, но оказался не так успешен, как планировалось, по следующим причинам:

  • Чрезвычайная сложность языка, в значительной мере потому, что язык был разработан комитетом, пытавшимся найти соглашение и удовлетворить нужды совершенно разных пользователей (научных и банковских).
  • Трудность реализации компилятора, и, как следствие, большое количество сбоев и ошибок и низкое качество первых компиляторов. Это возникало также из-за того, что ПЛ/1 содержал много почти не используемых большинством пользователей возможностей, вроде поддержки многозадачности.
  • Неоптимальность скомпилированного кода, что было очень критично для математических расчётов. Отчего ПЛ/1 не смог заменить собой Фортран. Асинхронная модификация переменных (например, в результате конструкции 'on error') крайне затрудняла оптимизацию.
  • Компиляторы языка ПЛ/1 реализовывали различные подмножества языка, что приводило к непереносимости программ.

Хотя ПЛ/1 и не смог вытеснить Фортран и КОБОЛ (или даже сравниться с ними по популярности), тем не меннее он широко использовался во второй половине 1960-х и в 1970-х годах, особенно для бухгалтерских приложений, в основном из-за отсутствия в то время лучшей альтернативы. Как Фортран, так и КОБОЛ были бедны по своим возможностям даже для задач того времени. ПЛ/1, напротив, представлял богатый набор средств.

Так, проект Multics, одна из первых попыток написать ОС на языке высокого уровня, использовал EPL (Early PL) — диалект ПЛ/1, разработанный в МТИ в 1964 году. Впоследствии для Multics был реализован «настоящий» ПЛ/1. Диалект XPL был использован для создания языка HAL/S, на котором программировались компьютеры космических кораблей проекта "Шаттл". Для ещё одного подмножества — PL/C — в Корнелльском университете был создан уникальный компилятор CORC, который мог скомпилировать программу с любыми синтаксическими ошибками, путём исправления многих ошибок и преобразования оставшихся в объектный код (это свойство в значительной степени присуще также компиляторам IBM для мэйнфреймов). Первая система резервирования авиабилетов, SABRE, была написана (по крайней мере, её предполагалось написать) на ПЛ/1. Ещё одним диалектом ПЛ/1 был PL/S, на котором фирма IBM написала в начале 1970-х операционную систему MVS. IBM до сих пор использует усовершенствованный PL/S (который ныне известен как PL/X) для работы над системами семейства z/OS для IBM System z.

На базе ПЛ/1 был разработан язык PL/M, фактически представляющий собой приблизительный аналог языка Си с синтаксисом, близким к подмножеству ПЛ/1. Компилятор языка PL/M был разработан фирмой Intel и использовался ею для написания операционной системы CP/M и большинства программного обеспечения под CP/M и MP/M. Digital Research продавала компилятор к PL/M для CP/M и MS-DOS, который сам был написан на PL/M. PL/M широко использовался для написания программного обеспечения к компьютерам, использовавшим интеловские процессоры 8080, 8085 и Z-80.

В СССР ПЛ/1 также был популярен в 1970-х и первой половине 1980-х гг. благодаря широкой распространённости ЕС ЭВМ, совместимых с мэйнфреймами IBM. Кроме того, ПЛ/1 был реализован на БЭСМ-6 и Эльбрусе.

ПЛ/1 был, вероятно, первым коммерческим языком, компилятор для которого писался на компилируемом языке. (Подобные экспериментальные языки были и раньше: например, NELIAC был разработан как минимум за 5 лет до ПЛ/1.)

Реализации

Хотя ПЛ/1 использовался в основном на мейнфреймах различных производителей, были также версии для операционных систем AIX, OS/2, OS/400, Windows, Unix и ряда других. В настоящее время фирма IBM предлагает компиляторы ПЛ/1 для платформ z/OS, MVS, VM, VSE, AIX, Windows, фирма Micro Focus — для платформ HP-UX, AIX, Windows, Solaris, Linux (Intel SuSE, Intel RedHat), фирма Fujitsu-Siemens — для платформы BS2000/OSD, фирма Kednos — для платформ OpenVMS и Tru64, фирма Stratus Technologies — для платформы VOS.

Первый IBMовский компилятор PL/I (F) (как и вся OS/360) и компилятор PL/C CORC в настоящее время имеют статус свободно распространяемого программного обеспечения.

Стандарты языка

  • ANSI X3.53-1976 (R1998) Information Systems - Programming Language - PL/I
  • ANSI X3.74-1987 (R1998) Information Systems - Programming Language - PL/I General-Purpose Subset
  • ISO 6160:1979 Programming languages -- PL/1
  • ISO/IEC 6522:1992 Information technology -- Programming languages -- PL/1 general purpose subset

Пример программы

Test: procedure options(main);
   declare My_String char(20) varying initialize('Hello, world!');
   put skip list(My_String);
end Test;

То же самое можно написать гораздо короче:

Test: proc options (main);
  put list ('Hello, world!');
end;

Примечания

Ссылки

bg:PL/I

bs:PL/I ca:PL/I cs:PL/1 de:PL/I en:PL/I es:PL/1 fa:پی‌ال/آی fi:PL/I fr:PL/I gl:PL/1 he:PL/I it:PL/I ja:PL/I ko:PL/I ms:Bahasa pengaturcaraan PL/I nl:PL/1 pl:PL/I pt:PL/I sh:PL/I sk:PL/I sv:PL/1 tg:ПЛ/1 zh:PL/I

Источник — «http://www.sbup.com/wiki/%D0%9F%D0%9B/1»
Личные инструменты

Served in 0.291 secs.