Jump to content

БКПЛ

(Перенаправлено с машины O-code )

БКПЛ
Парадигма процедурный , императивный , структурированный
Разработано Мартин Ричардс
Впервые появился 1967 год ; 57 лет назад ( 1967 ) [1]
Дисциплина набора текста бестиповый (все есть слово )
Под влиянием
CPL
Под влиянием
Б , С , Иди [2]

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

Дизайн [ править ]

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

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

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

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

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

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

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

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

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

История [ править ]

BCPL был впервые реализован Мартином Ричардсом из Кембриджского университета в 1967 году. [1] BCPL стал ответом на трудности с его предшественником, Cambridge Programming Language, позже переименованным в Комбинированный язык программирования (CPL), который был разработан в начале 1960-х годов. Ричардс создал BCPL, «удалив из полного языка те особенности, которые затрудняют компиляцию». Первая реализация компилятора для IBM 7094 под совместимой системой разделения времени была написана весной 1967 года, когда Ричардс посещал проект MAC в Массачусетском технологическом институте. Язык был впервые описан в статье, представленной на Spring Joint в 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 без использования промежуточного О-кода. Первоначальная реализация представляла собой кросс-компилятор, размещенный на TENEX PDP-10 компании BBN и непосредственно ориентированный на PDP-11, используемый в реализации BBN IMP второго поколения , используемых в ARPANET .

Была также версия, выпущенная для BBC Micro в середине 1980-х годов компанией Richards Computer Products, основанной Джоном Ричардсом, братом Мартина Ричардса. [7] Проект BBC Domesday использовал этот язык. Версии 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, последний раз обновленную в 2018 году. Ее можно настроить для работы в различных системах, включая Linux, FreeBSD и Mac OS X. Последний дистрибутив включает графические и звуковые библиотеки, а также имеется всеобъемлющее руководство. Он продолжает программировать на нем, в том числе для своих исследований в области автоматизированной музыкальной партитуры .

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

Примеры [ править ]

Привет, мир [ править ]

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

GET "LIBHDR"
LET START() BE WRITES("Hello, World")

Дальнейшие примеры [ править ]

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

Распечатать факториалы:

GET "LIBHDR"

LET START() = VALOF $(
	FOR I = 1 TO 5 DO
		WRITEF("%N! = %I4*N", I, FACT(I))
	RESULTIS 0
$)

AND FACT(N) = N = 0 -> 1, N * FACT(N - 1)

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

GET "LIBHDR"

GLOBAL $(
	COUNT: 200
	ALL: 201
$)

LET TRY(LD, ROW, RD) BE
	TEST ROW = ALL THEN
		COUNT := COUNT + 1
	ELSE $(
		LET POSS = ALL & ~(LD | ROW | RD)
		UNTIL POSS = 0 DO $(
			LET P = POSS & -POSS
			POSS := POSS - P
			TRY(LD + P << 1, ROW + P, RD + P >> 1)
		$)
	$)

LET START() = VALOF $(
	ALL := 1
	FOR I = 1 TO 12 DO $(
		COUNT := 0
		TRY(0, 0, 0)
		WRITEF("%I2-QUEENS PROBLEM HAS %I5 SOLUTIONS*N", I, COUNT)
		ALL := 2 * ALL + 1
	$)
	RESULTIS 0
$)

Ссылки [ править ]

  1. Перейти обратно: Перейти обратно: а б с «Мартин Ричардс (Премия пионера компьютеров 2003 г.)» . Компьютерное общество IEEE. Архивировано из оригинала 24 ноября 2017 года . Проверено 24 ноября 2017 г.
  2. ^ Пайк, Роб (24 апреля 2014 г.). «Привет, суслики» . Проверено 11 марта 2016 г.
  3. ^ https://www.cl.cam.ac.uk/~mr10/bcplman.pdf Руководство пользователя BCPL Cintsys и Cintpos, 2.1.4 Скобки разделов
  4. ^ «Клайв Физер о CPL и BCPL» . www.lysator.liu.se . Проверено 1 марта 2024 г.
  5. ^ Ричардс, Мартин; Уитби-Стивенс, Колин (1980). BCPL: язык и его компилятор . Издательство Кембриджского университета. п. 5. ISBN  978-0521785433 .
  6. ^ BCPL , Файл жаргона
  7. ^ «Технические разработки Reuters: Глоссарий - БАРОН» . www.thebaron.info .
  8. ^ Керниган, Брайан В.; Деннис М. Ричи (1978). Язык программирования Си . Телефонные лаборатории Белла. п. 2. ISBN  0-13-110163-3 .
  9. ^ История C++ , дата обращения 12 декабря 2017 г.
  10. ^ Ричардс, Мартин; Уитби-Стивенс, Колин (1980). BCPL: язык и его компилятор . Издательство Кембриджского университета. п. 8. ISBN  978-0521785433 .

Дальнейшее чтение [ править ]

  • Мартин Ричардс, Справочное руководство BCPL (Меморандум M-352, Проект MAC , Кембридж, Массачусетс, США, июль 1967 г.)
  • Мартин Ричардс, BCPL — инструмент для написания компиляторов и системного программирования ( Труды весенней совместной компьютерной конференции , том 34, стр. 557–566, 1969)
  • Мартин Ричардс, Артур Эванс, Роберт Ф. Мэби, Справочное руководство BCPL (MAC TR-141, Project MAC , Кембридж, Массачусетс, США, 1974)
  • Мартин Ричардс, Колин Уитби-Стивенс, BCPL, язык и его компилятор (Cambridge University Press, 1980) ISBN   0-521-28681-6

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 337cff6227ac2ab4d70233ed9a22a7f3__1715299020
URL1:https://arc.ask3.ru/arc/aa/33/f3/337cff6227ac2ab4d70233ed9a22a7f3.html
Заголовок, (Title) документа по адресу, URL1:
BCPL - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)