PL/M
PL/M — это язык программирования высокого уровня, разработанный в 1973 году компанией Digital Research (позднее известной как Digital Research Inc.) для микропроцессоров Intel 8080. PL/M (сокращение от Programming Language for Microcomputers) был создан как альтернатива ассемблеру, позволяя писать программы для микроконтроллеров и микрокомпьютеров на более абстрактном уровне, сохраняя при этом эффективность, близкую к машинному коду. Язык оказал значительное влияние на развитие ранних операционных систем, в частности, на CP/M (Control Program for Microcomputers), и стал предшественником таких языков, как C и PL/I.
История
Разработка и контекст
PL/M был создан Гэри Килдаллом (Gary Kildall), основателем Digital Research, в 1973–1974 годах. Килдалл, работая над созданием операционной системы для микропроцессора Intel 8080, столкнулся с необходимостью инструмента, который бы упростил программирование, но не требовал бы значительных вычислительных ресурсов, характерных для ассемблера. PL/M был задуман как язык, который мог бы транслироваться в эффективный машинный код, подходящий для ограниченных ресурсов микрокомпьютеров того времени.
Первая версия PL/M была реализована в виде кросс-компилятора, работающего на больших компьютерах (например, на PDP-10), и генерировала код для Intel 8080. Позднее, с развитием микропроцессоров, появились версии для Intel 8085, Z80, Intel 8086 и других.
Роль в развитии CP/M
PL/M сыграл ключевую роль в создании операционной системы CP/M, которая стала стандартом для 8-битных микрокомпьютеров в конце 1970-х — начале 1980-х годов. Сама CP/M была написана на PL/M, что позволило Килдаллу быстро разрабатывать и модифицировать её. Это также способствовало портированию CP/M на разные аппаратные платформы, так как компилятор PL/M мог генерировать код для различных процессоров.
Распространение и упадок
В 1970-х и начале 1980-х годов PL/M использовался в основном в индустрии встраиваемых систем и для разработки системного программного обеспечения. Он был популярен среди инженеров, работающих с микропроцессорами Intel, благодаря своей близости к аппаратному обеспечению. Однако с появлением более универсальных языков, таких как C (особенно после стандартизации ANSI C в 1989 году), а также с развитием 16-битных и 32-битных процессоров, интерес к PL/M постепенно угас. Последние версии компилятора PL/M (например, для Intel 8086) выпускались до середины 1980-х годов, после чего Digital Research сосредоточилась на других продуктах.
Классификация и характеристики
Тип языка
PL/M относится к языкам высокого уровня с элементами низкоуровневого программирования. Он поддерживает структурное программирование (циклы, условные операторы, процедуры) и предоставляет прямой доступ к памяти и портам ввода-вывода, что характерно для ассемблера. Язык является строго типизированным, но с ограниченной системой типов.
Основные особенности
- Компилируемый язык: PL/M транслируется в машинный код, что обеспечивает высокую производительность.
- Близость к аппаратному обеспечению: Позволяет работать с адресами памяти, регистрами процессора и портами ввода-вывода напрямую.
- Поддержка модульности: Программы могут состоять из нескольких модулей (процедур), которые компилируются отдельно и затем связываются.
- Ограниченная система типов: Поддерживаются целые числа (8-битные и 16-битные), массивы, структуры (RECORD) и указатели (ADDRESS). Нет поддержки чисел с плавающей запятой, строковых типов или динамической памяти.
- Синтаксис: Напоминает смесь PL/I и ALGOL, с использованием ключевых слов, таких как
DO,END,IF,THEN,ELSE,CALL,RETURN.
Пример синтаксиса
Пример простой программы на PL/M, вычисляющей сумму двух чисел:
`` SUMPROG: DO; DECLARE (A, B, SUM) BYTE; A = 10; B = 20; SUM = A + B; CALL OUTPUT(SUM); END SUMPROG; ``
Устройство и компиляция
Компилятор PL/M
Компилятор PL/M состоял из нескольких этапов:
- Лексический анализ: Разбиение исходного кода на токены.
- Синтаксический анализ: Проверка грамматики и построение дерева разбора.
- Генерация кода: Преобразование дерева в машинный код для целевого процессора.
- Оптимизация: Упрощение кода (например, удаление избыточных операций, подстановка констант).
Компилятор PL/M для Intel 8080 генерировал код, который был почти таким же эффективным, как написанный вручную на ассемблере, что делало его привлекательным для систем с ограниченными ресурсами.
Связывание и загрузка
После компиляции объектные файлы (с расширением .OBJ) связывались с помощью линкера (например, LINK.COM), который создавал исполняемый файл (обычно с расширением .COM для CP/M). Исполняемые файлы загружались в память и выполнялись напрямую.
Применение
Разработка операционных систем
PL/M был основным языком для написания CP/M и её компонентов, включая BIOS (Basic Input/Output System) и BDOS (Basic Disk Operating System). Это позволило создать модульную и переносимую операционную систему.
Встраиваемые системы
PL/M широко использовался в промышленности для программирования микроконтроллеров (например, Intel 8048, 8051) и встраиваемых устройств, таких как контроллеры принтеров, терминалов и измерительных приборов. Его способность напрямую управлять аппаратным обеспечением делала его идеальным для таких задач.
Образовательные проекты
В 1970-х годах PL/M использовался в университетах и исследовательских лабораториях для обучения принципам системного программирования и разработки компиляторов.
Влияние и наследие
Влияние на другие языки
PL/M оказал влияние на разработку языка C, особенно в части структурного программирования и работы с памятью. Концепции модульности и процедурной организации кода, реализованные в PL/M, были позже развиты в C и других языках. Также PL/M стал предшественником языка PL/I, хотя и не был его прямым потомком.
Историческое значение
PL/M считается одним из первых языков высокого уровня, специально разработанных для микропроцессоров. Он продемонстрировал возможность создания эффективного системного программного обеспечения без использования ассемблера, что способствовало популяризации микрокомпьютеров. Несмотря на упадок, PL/M остаётся важной вехой в истории программирования.
Критика
- Ограниченная переносимость: PL/M был тесно привязан к архитектуре процессоров Intel, что затрудняло его использование на других платформах.
- Слабая система типов: Отсутствие поддержки чисел с плавающей запятой, строк и динамической памяти ограничивало область применения.
- Сложность отладки: Из-за близости к аппаратному обеспечению отладка программ на PL/M требовала глубоких знаний архитектуры процессора.
- Устаревание: С появлением более мощных языков (C, Pascal) и универсальных операционных систем (Unix, MS-DOS) PL/M потерял актуальность.
Интересные факты
- PL/M был одним из первых языков, для которого был разработан кросс-компилятор, работающий на мейнфреймах.
- Исходный код CP/M, написанный на PL/M, был опубликован в 1980-х годах и доступен для изучения в архивах.
- Некоторые компиляторы PL/M для Intel 8086 использовались в ранних версиях MS-DOS.
Источники
- Kildall, G. (1973). PL/M: A Programming Language for Microcomputers. Digital Research.
- Digital Research. (1976). PL/M-80 Compiler User's Guide. Digital Research.
- Freiberger, P., & Swaine, M. (1984). Fire in the Valley: The Making of the Personal Computer. McGraw-Hill.
- История развития языков программирования. PL/M. Википедия (русская версия).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →