stringtranslate.com

БЦПЛ

BCPLБазовый комбинированный язык программирования ») — процедурный , императивный и структурированный язык программирования . Первоначально предназначенный для написания компиляторов для других языков, BCPL больше не используется повсеместно. Однако его влияние все еще ощущается, поскольку урезанная и синтаксически измененная версия BCPL, называемая B , была языком, на котором был основан язык программирования C. BCPL представил несколько функций многих современных языков программирования, включая использование фигурных скобок для разграничения блоков кода. [3] BCPL был впервые реализован Мартином Ричардсом из Кембриджского университета в 1967 году . [1]

Дизайн

BCPL был разработан таким образом, чтобы для него можно было писать небольшие и простые компиляторы; по общему мнению, некоторые компиляторы могли быть запущены в 16 килобайтах . Кроме того, оригинальный компилятор, сам написанный на BCPL, был легко переносимым. Таким образом, BCPL был популярным выбором для начальной загрузки системы. [ необходима цитата ] Основная причина переносимости компилятора заключалась в его структуре. Он был разделен на две части: фронтенд анализировал исходный код и генерировал O-код, промежуточный язык . Бэкенд брал O-код и транслировал его в машинный код для целевой машины. Только 15 кода компилятора нужно было переписать для поддержки новой машины, задача, которая обычно занимала от 2 до 5 человеко-месяцев . Такой подход стал общепринятой практикой позже (например, Pascal , Java ).

Язык необычен тем, что имеет только один тип данных : слово , фиксированное число бит, обычно выбираемое для согласования с машинным словом архитектуры и достаточной емкости для представления любого допустимого адреса хранения. Для многих машин того времени этот тип данных был 16-битным словом. Этот выбор позже оказался существенной проблемой, когда BCPL использовался на машинах, в которых наименьшим адресуемым элементом было не слово, а байт , или на машинах с большими размерами слов, такими как 32-бит или 64-бит. [ необходима цитата ]

Интерпретация любого значения определялась операторами, используемыми для обработки значений. (Например, +складывал два значения, рассматривая их как целые числа ; !обращался через значение, фактически рассматривая его как указатель.) Для того чтобы это работало, реализация не предусматривала проверку типов .

Несоответствие между ориентацией слов BCPL и байт-ориентированным оборудованием было устранено несколькими способами. Одним из них было предоставление стандартных библиотечных процедур для упаковки и распаковки слов в байтовые строки. Позднее были добавлены две языковые функции: оператор выбора битового поля и оператор инфиксной байтовой косвенности (обозначаемый как %). [4]

BCPL обрабатывает привязки, охватывающие отдельные единицы компиляции , уникальным образом. Нет никаких глобальных переменных, объявляемых пользователем; вместо этого есть глобальный вектор, похожий на «пустой общий» в Fortran . Все данные, совместно используемые различными единицами компиляции, включают скаляры и указатели на векторы, хранящиеся в заранее подготовленном месте в глобальном векторе. Таким образом, файлы заголовков (файлы, включаемые во время компиляции с помощью директивы «GET») становятся основным средством синхронизации глобальных данных между единицами компиляции, содержащими директивы «GLOBAL», которые представляют списки символических имен, каждое из которых сопряжено с числом, связывающим имя с соответствующим численно адресуемым словом в глобальном векторе. Помимо переменных, глобальный вектор содержит привязки для внешних процедур. Это делает динамическую загрузку единиц компиляции очень простой в реализации. Вместо того чтобы полагаться на загрузчик ссылок базовой реализации, BCPL фактически предоставляет программисту контроль над процессом компиляции. [ необходима цитата ]

Глобальный вектор также сделал очень простым замену или дополнение стандартных библиотечных процедур. Программа могла сохранить указатель из глобального вектора на исходную процедуру и заменить его указателем на альтернативную версию. Альтернатива могла вызвать оригинал как часть своей обработки. Это можно было использовать как быстрое специальное средство отладки. [ необходима цитата ]

BCPL был первым языком программирования с фигурными скобками , и фигурные скобки пережили синтаксические изменения и стали общепринятым средством обозначения операторов исходного кода программы. На практике, на ограниченных клавиатурах того времени, исходные программы часто использовали последовательности $(и $)или [и ]вместо символов {и }. Однострочные // комментарии BCPL, которые не были приняты в C , снова появились в C++ и позже в C99 .

В книге «BCPL: Язык и его компилятор» философия BCPL описывается следующим образом:

Философия BCPL не является философией тирана, который думает, что он знает лучше всех и устанавливает законы о том, что разрешено, а что нет; скорее, BCPL действует скорее как слуга, предлагающий свои услуги в меру своих возможностей без жалоб, даже когда сталкивается с очевидной бессмыслицей. Программист всегда считается знающим, что он делает, и не стесненным мелкими ограничениями. [5]

История

BCPL был впервые реализован Мартином Ричардсом из Кембриджского университета в 1967 году. [1] BCPL был ответом на трудности с его предшественником, Cambridge Programming Language, позже переименованным в Combined Programming Language (CPL), который был разработан в начале 1960-х годов. Ричардс создал BCPL, «удалив те особенности полного языка, которые затрудняют компиляцию». Первая реализация компилятора для IBM 7094 в рамках Compatible Time-Sharing System была написана, когда Ричардс посещал Project MAC в Массачусетском технологическом институте весной 1967 года. Впервые язык был описан в докладе, представленном на весенней Объединенной компьютерной конференции 1969 года . [ требуется ссылка ]

Ходят слухи, что изначально BCPL расшифровывалось как «Bootstrap Cambridge Programming Language», но CPL так и не был создан, поскольку разработка BCPL остановилась, а аббревиатура была позже переосмыслена для книги BCPL. [ требуется пояснение ] [ требуется цитата ]

BCPL — это язык, на котором была написана оригинальная программа «Hello, World!» . [6] Первая MUD также была написана на BCPL ( MUD1 ).

Несколько операционных систем были написаны частично или полностью на BCPL (например, TRIPOS и самые ранние версии AmigaDOS ). BCPL также был первоначальным языком, использовавшимся в проекте Xerox PARC Alto . Среди других проектов система подготовки документов Bravo была написана на BCPL.

Один из первых компиляторов, запущенный в 1969 году с использованием бумажной ленты O-кода компилятора Atlas 2 Ричардса , был нацелен на серию ICT 1900. У этих двух машин была разная длина слов (48 против 24 бит), разные кодировки символов и разные представления упакованных строк, а успешная загрузка повысила уверенность в практичности метода.

К концу 1970 года существовали реализации для Honeywell 635 и Honeywell 645 , IBM 360 , PDP-10 , TX-2 , CDC 6400 , UNIVAC 1108 , PDP-9 , KDF 9 и Atlas 2. В 1974 году диалект BCPL был реализован в BBN без использования промежуточного O-кода. Первоначальная реализация представляла собой кросс-компилятор, размещенный на TENEX PDP-10 компании BBN , и напрямую нацеленный на PDP-11, используемые в реализации BBN IMP второго поколения , используемых в ARPANET .

Также была версия, выпущенная для BBC Micro в середине 1980-х годов компанией Richards Computer Products, основанной Джоном Ричардсом, братом Мартина Ричардса. [7] Проект BBC Domesday Project использовал этот язык. Версии BCPL для компьютеров Amstrad CPC и Amstrad PCW были также выпущены в 1986 году британской компанией-разработчиком программного обеспечения Arnor Ltd. MacBCPL был выпущен для Apple Macintosh в 1985 году компанией Topexpress Ltd из Кенсингтона, Англия.

Как дизайн, так и философия BCPL оказали сильное влияние на B , который в свою очередь повлиял на C. [8] Программисты того времени спорили, будет ли возможный преемник C называться «D», следующей буквой в алфавите, или «P», следующей буквой в названии родительского языка. Наиболее признанным в качестве преемника C языком является C++ (с оператором инкремента++ C ), [9] хотя между тем существует также язык программирования D.

В 1979 году реализации BCPL существовали по меньшей мере для 25 архитектур; язык постепенно вышел из употребления, поскольку C стал популярным на не-Unix-системах.

Мартин Ричардс поддерживает современную версию BCPL на своем веб-сайте, последний раз обновленную в 2023 году. [10] Ее можно настроить для работы на различных системах, включая Linux, FreeBSD и Mac OS X. Последний дистрибутив включает графические и звуковые библиотеки, а также имеется подробное руководство. Он продолжает программировать в ней, в том числе для своего исследования музыкальной автоматизированной партитуры после .

Распространенным неформальным типом MIME для BCPL является text/x-bcpl .

Примеры

Привет, мир

Ричардс и Уитби-Стревенс [11] приводят пример программы «Hello, World!» для BCPL, использующей стандартный системный заголовок «LIBHDR»:

ПОЛУЧИТЬ "LIBHDR"ДАВАЙТЕ НАЧНЕМ() BE WRITES("Привет, Мир")

Дополнительные примеры

Если эти программы запускаются с использованием текущей версии Cintsys Ричардса (декабрь 2018 г.), LIBHDR, START и WRITEF необходимо изменить на нижний регистр, чтобы избежать ошибок.

Печать факториалов:

ПОЛУЧИТЬ "LIBHDR"ДАВАЙТЕ НАЧНЕМ() = VALOF $(ДЛЯ I = 1 ДО 5 ДЕЛАТЬWRITEF("%N! = %I4*N", I, ФАКТ(I))РЕЗУЛЬТАТ 0$)И ФАКТ(N) = N = 0 -> 1, N * ФАКТ(N - 1)

Подсчитайте решения задачи N ферзей :

ПОЛУЧИТЬ "LIBHDR"ГЛОБАЛЬНЫЙ $(КОЛИЧЕСТВО: 200ВСЕ: 201$)ПУСТЬ ПОПРОБУЕТ(LD, СТРОКА, RD) БЫТЬТЕСТОВАЯ СТРОКА = ВСЕ ТОСЧЕТ := СЧЕТ + 1ИНАЧЕ $(ДАВАЙТЕ ПОЛОЖИМ = ВСЕ & ~(LD | СТРОКА | RD)ПОКА ВОЗМОЖНО = 0 ДЕЛАТЬ $(ПУСТЬ P = POSS & -POSSПОЛОЖИТЕЛЬНО := ПОЛОЖИТЕЛЬНО - PПОПРОБУЙТЕ(LD + P << 1, СТРОКА + P, RD + P >> 1)$)$)ДАВАЙТЕ НАЧНЕМ() = VALOF $(ВСЕ := 1ДЛЯ I = 1 ДО 12 ДЕЛАТЬ $(КОЛИЧЕСТВО := 0ПОПРОБУЙТЕ(0, 0, 0)WRITEF("%I2-ЗАДАЧА С ФЕРЗЯМИ ИМЕЕТ %I5 РЕШЕНИЙ*N", I, COUNT)ВСЕ := 2 * ВСЕ + 1$)РЕЗУЛЬТАТ 0$)

Ссылки

  1. ^ abc "Martin Richards (2003 Computer Pioneer Award)". IEEE Computer Society. Архивировано из оригинала 24 ноября 2017 года . Получено 24 ноября 2017 года .
  2. Пайк, Роб (24 апреля 2014 г.). «Hello Gophers» . Получено 11 марта 2016 г. .
  3. ^ https://www.cl.cam.ac.uk/~mr10/bcplman.pdf Руководство пользователя BCPL Cintsys и Cintpos, 2.1.4 Скобки раздела
  4. ^ "Clive Feather on CPL and BCPL". www.lysator.liu.se . Получено 1 марта 2024 г. .
  5. ^ Ричардс, Мартин; Уитби-Стревенс, Колин (1980). BCPL: Язык и его компилятор . Cambridge University Press. стр. 5. ISBN 978-0521785433.
  6. ^ BCPL, Файл жаргона
  7. ^ "Техническое развитие Reuters: Глоссарий - THE BARON". www.thebaron.info .
  8. ^ Керниган, Брайан В.; Деннис М. Ритчи (1978). Язык программирования C. Bell Telephone Laboratories. стр. 2. ISBN 0-13-110163-3.
  9. ^ История C++ Получено 12 декабря 2017 г.
  10. ^ Мартин Ричардс. «BCPL/README (дистрибутив BCPL Cintcode)».
  11. ^ Ричардс, Мартин; Уитби-Стревенс, Колин (1980). BCPL: Язык и его компилятор . Cambridge University Press. стр. 8. ISBN 978-0521785433.

Дальнейшее чтение

Внешние ссылки