Введение
Язык программирования PL/C, разработанный в Корнелльском университете, является учебным диалектом языка программирования PL/I, разработанным в Отделе компьютерных наук Корнелльского университета в начале 1970-х годов под руководством профессора Ричарда У. Конвея и аспиранта Томаса Р. Вилкокса. PL/C был разработан с конкретной целью использования для обучения программированию. Компилятор PL/C, который реализовывал почти весь обширный язык PL/I, обладал необычной способностью всегда успешно компилировать программу, благодаря широкой автоматической коррекции множества синтаксических ошибок и преобразованию любых оставшихся синтаксических ошибок в операторы вывода. Это было важно, поскольку в то время студенты отправляли свои программы на перфокартах IBM и могли не получить результат в течение нескольких часов. Подобным образом, обзор языков программирования, проведенный в середине-конце 1970-х годов, отмечал, что "PL/C – широко используемый диалект PL/I".
PL/C is an instructional dialect of the programming language PL/I, developed at the Department of Computer Science of Cornell University in the early 1970s in an effort headed by Professor Richard W. Conway and graduate student Thomas R. Wilcox. PL/C was developed with the specific goal of being used for teaching programming. The PL/C compiler, which implemented almost all of the large PL/I language, had the unusual capability of never failing to compile a program, through the use of extensive automatic correction of many syntax errors and by converting any remaining syntax errors to output statements. This was important because, at the time, students submitted their programs on
IBM punch cards and might not get their output back for several hours. Similarly, a mid late 1970s survey of programming languages said that "PL/C is a widely used dialect of 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, по всей видимости, был утерян.