Введение

Язык программирования PL/C, разработанный в Корнелльском университете, является учебным диалектом языка программирования PL/I, разработанным в Отделе компьютерных наук Корнелльского университета в начале 1970-х годов под руководством профессора Ричарда У. Конвея и аспиранта Томаса Р. Вилкокса. PL/C был разработан с конкретной целью использования для обучения программированию. Компилятор PL/C, который реализовывал почти весь обширный язык PL/I, обладал необычной способностью всегда успешно компилировать программу, благодаря широкой автоматической коррекции множества синтаксических ошибок и преобразованию любых оставшихся синтаксических ошибок в операторы вывода. Это было важно, поскольку в то время студенты отправляли свои программы на перфокартах IBM и могли не получить результат в течение нескольких часов. Подобным образом, обзор языков программирования, проведенный в середине-конце 1970-х годов, отмечал, что "PL/C – широко используемый диалект PL/I".

Истоки и обоснование

PL/C берет свое начало в Департаменте компьютерных наук Корнеллского университета, расположенном в Upson Hall на Engineering Quadrangle. Хотя PL/I и использовался в образовательных целях, это сравнение было сделано явно: один университет объяснил своим пользователям компьютерного центра, что "PL/C для PL/I – это то же самое, что WATFOR для FORTRAN IV, быстрая система компиляции и запуска с некоторыми возможностями пакетной обработки, предназначенная главным образом для использования студентами". IBM предоставила часть финансирования для первоначальной разработки PL/C, которая проходила в 1968 и 1969 годах, при этом буква "C" в названии обозначала Корнелл. Регулярное использование PL/C началось в сентябре 1970 года. Исключение составляет использование определенных несовместимых диагностических функций PL/C. Компилятор PL/C обладал уникальной способностью всегда успешно компилировать любую программу благодаря обширной автоматической коррекции множества синтаксических ошибок и преобразованию оставшихся синтаксических ошибок в операторы вывода. PL/C предоставил расширения к собственной функции CHECK для трассировки потока управления, а также новые возможности, такие как операторы PUT ALL; и PUT ARRAY; для вывода значений всех скалярных и всех переменных массивов в данной точке программы. Простой пример исправления ошибок в PL/C выглядит следующим образом: И PL/C был единственным образовательным диалектом PL/I, упомянутым в обширном обзоре языков программирования, проведенном экспертом по языкам Жан Э. Самметом в 1976–77 годах. Промежуточный язык, используемый между этапами компиляции, и сопровождающая его таблица символов были разработаны с учетом и являлись ключевыми для реализации возможностей исправления ошибок и диагностической отчетности PL/C. Скорость компиляции PL/C была достаточно высокой – около 10 000–20 000 строк исходного кода в минуту на IBM System/360 Model 65. Он работал на IBM System/360 и System/370 под управлением OS и HASP. Стоимость составляла 1800 долларов США по состоянию на 1972 год, и только в 1970–71 годах он был отправлен в 100 различных учреждений, в результате чего 60 из них приобрели его. Существовал также интерес к PL/C со стороны организаций, не связанных с академической сферой, что привело к добавлению в PL/C поддержки некоторых бизнес-ориентированных функций, таких как переменные PICTURE. Некоторые университеты, включая Вашингтонский государственный университет, добились успеха в обучении на вводном курсе, который начинался с PL/C, а затем переходил к Fortran (с использованием WATFIV), что оказалось полезным порядком с точки зрения обучения студентов. Действительно, Корнелл в какой-то момент реструктурировал свое вводное предложение курсов, чтобы предоставить студентам такую возможность. Номера выпусков PL/C в некоторой степени синхронизировались с выпусками компилятора IBM PL/I F, так что, например, выпуск 4 PL/C был предназначен для соответствия версии 4 компилятора IBM F с точки зрения обратной совместимости. Выпуск 7.1 в марте 1975 года; и выпуск 7.5 в марте 1976 года.

Варианты

В отделе компьютерных наук Корнельского университета чувствовали гордость за то, что PL/C связан с этим учебным заведением, и несколько вариантов PL/C разрабатывались Конвеем, другими преподавателями и аспирантами. В 1974 году вариант PL/CT, предназначенный для использования на интерактивных терминалах, а не для пакетной обработки заданий, впервые стал доступен в Корнелле, а в 1976 году – и другим организациям. К 1976 году разрабатывался вариант PL/CS, который был значительно более ограниченным подмножеством PL/I, чем обычный PL/C, и обеспечивал прямую языковую поддержку для утверждений. Однако этого подмножества было достаточно, чтобы PL/CS оставался подходящим для обучения на вводных курсах программирования. Другая реализация определения PL/CS появилась вместе с профессором Тимом Тейтельбаумом и его новаторской работой над синтезатором программ Корнельского университета. Эта ранняя версия интегрированной среды разработки была создана в 1978 году для PDP 11/60 и включала в себя структурированный редактор для PL/CS, инкрементальный компилятор и интерпретатор. Синтезатор программ Корнельского университета вскоре был адаптирован для настольной рабочей станции Terak – одного из первых персональных компьютеров. Вторая версия, PL/CV2, была выпущена в 1978 году и представлена на симпозиуме по принципам языков программирования в 1979 году.

Кросс-компиляторы

В начале 1970-х годов в Университете Северной Каролины было создано три кросс-компилятора на основе PL/C, для которых в качестве хост-платформы использовалась IBM 360. Однако, модули генерации кода для IBM 360 и распределения памяти были заменены на модули, предназначенные для целевой архитектуры. Улучшенная версия PLCV была выпущена примерно в 1973 году. На мейнфрейме использовался компилятор IBM PL/I F, при этом программисты ограничивались использованием подмножества языка PL/C, а PLCD применялся для генерации кода для PDP 11/45.

Учебники

Учебник "Введение в программирование: структурированный подход с использованием PL/I и PL/C" был написан Конвеем и Грисом с использованием PL/C в качестве языка программирования и опубликован в 1973 году. В нём был представлен подход "сверху вниз" и подчеркивалась дисциплина структурированного программирования, что сделало его одним из наиболее известных учебников в этой области. Помимо реорганизации некоторых материалов, касающихся разработки и тестирования компьютерных программ, в 1979 году было опубликовано третье издание, которое, помимо повышения уровня материала с учетом того, что многие студенты колледжей уже имели опыт программирования в старшей школе, включало дополнения, отражающие варианты PL/CT и PL/CS языка PL/C. "Введение в программирование: структурированный подход" послужило основой для ряда производных учебников, иногда с дополнительными соавторами, которые были либо ориентированы на начинающих, либо охватывали другие языки или диалекты.

Наследие

PL/C все еще использовался в начале 1980-х годов. Конвей заявил, что не знает, как долго PL/C оставался в использовании на различных площадках, где он был внедрен. По состоянию на 2022 год, исходный код PL/C, по всей видимости, был утерян.