BCPL

редактировать
(Перенаправлено с O-кода ) Эта статья о языке программирования. Для библиотечной системы см. Публичную библиотеку округа Балтимор.
BCPL
Парадигма процедурный, императивный, структурированный
Разработано Мартин Ричардс
Впервые появился 1967 ; 53 года назад ( 1967)
Печатная дисциплина бестиповый (все - слово )
Под влиянием
CPL
Под влиянием
B, C, Вперед

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

Содержание
  • 1 дизайн
  • 2 История
  • 3 Примеры
  • 4 Ссылки
  • 5 дальнейшее чтение
  • 6 внешние ссылки
дизайн

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

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

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

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

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

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

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

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

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

История

Впервые BCPL был реализован Мартином Ричардсом из Кембриджского университета в 1967 году. BCPL был ответом на трудности с его предшественником, Кембриджским языком программирования, позже переименованным в Комбинированный язык программирования (CPL), который был разработан в начале 1960-х годов. Ричардс создал BCPL, «удалив те особенности полного языка, которые затрудняют компиляцию». Первая реализация компилятора для IBM 7094 в рамках Совместимой системы разделения времени (CTSS) была написана, когда Ричардс посещал Project MAC в Массачусетском технологическом институте (MIT) весной 1967 года. Язык был впервые описан в статье представлен на Весенней совместной компьютерной конференции 1969 года.

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

BCPL - это язык, на котором была написана исходная программа hello world. Первый MUD также был написан на BCPL ( MUD1 ).

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

Ранний компилятор, начатый в 1969 году с бумажной ленты с О-кодом компилятора 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 г. на BBN был реализован диалект BCPL без использования промежуточного O-кода. Первоначальная реализация представляла собой кросс-компилятор, размещенный на BBN TENEX PDP-10, и непосредственно нацелен на PDP-11, которые использовались BBN в реализации IMP второго поколения, используемых в Arpanet.

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

И дизайн и философию BCPL под сильным влиянием B, который в свою очередь, под влиянием C. Программисты в то время обсуждали, будет ли возможный преемник C называться "D", следующей буквой в алфавите, или "P", следующей буквой в имени родительского языка. Язык, наиболее приемлемый в качестве преемника C, - это C ++ ( ++который является оператором приращения C), хотя между тем существует также язык программирования D.

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

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

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

Примеры

Если эти программы запускаются с использованием текущей версии 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 -gt; 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 amp; ~(LD | ROW | RD) UNTIL POSS = 0 DO $( LET P = POSS amp; -POSS POSS := POSS - P TRY(LD + P lt;lt; 1, ROW + P, RD + P gt;gt; 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 $)
Ссылки
дальнейшее чтение
  • Мартин Ричардс, Справочное руководство BCPL (Меморандум M-352, Project MAC, Кембридж, Массачусетс, США, июль 1967 г.)
  • Мартин Ричардс, BCPL - инструмент для написания компиляторов и системного программирования ( Proceedings of the Spring Joint Computer Conference, Vol 34, pp 557–566, 1969)
  • Мартин Ричардс, Артур Эванс, Роберт Ф. Маби, Справочное руководство BCPL (MAC TR-141, Project MAC, Кембридж, Массачусетс, США, 1974)
  • Мартин Ричардс, Колин Уитби-Стревенс, BCPL, язык и его компилятор (Cambridge University Press, 1980) ISBN   0-521-28681-6
внешние ссылки
Последняя правка сделана 2023-04-21 05:31:03
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте