Открыть сервис

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 состоял из нескольких этапов:

  1. Лексический анализ: Разбиение исходного кода на токены.
  2. Синтаксический анализ: Проверка грамматики и построение дерева разбора.
  3. Генерация кода: Преобразование дерева в машинный код для целевого процессора.
  4. Оптимизация: Упрощение кода (например, удаление избыточных операций, подстановка констант).

Компилятор 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 →