BCPL

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

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

Содержание

  • 1 Дизайн
  • 2 История
  • 3 Примеры
  • 4 Ссылки
  • 5 Дополнительная литература
  • 6 Внешние ссылки

Дизайн

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

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

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

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

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

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

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

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

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

История

BCPL был впервые реализован Мартином Ричардсом из Университета Cambridge в 1967 году. BCPL был ответом на трудности с его предшественником, Cambridge Programming Language, позже переименованным в Combined Programming Language (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 году, начав с бумажной ленты O-кода компилятора Atlas 2 Мартина Ричардса, нацелился на ICT 1900 series. Две машины имели разную длину слова (48 против 24 бит), разные кодировки символов и разные представления упакованных строк, а успешная самонастройка повысила уверенность в практичности метода.

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

. Была также версия, выпущенная для BBC Micro в середине 1980-х годов компанией Richards Computer Products, a компанию основал Джон Ричардс, брат доктора Мартина Ричардса. Проект 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 должны быть изменены на нижний регистр, чтобы избежать ошибок.

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

ПОЛУЧИТЬ «LIBHDR» LET START () = VALOF $ (FOR I = 1–5 DO WRITEF («% N! =% I4 * N», I, FACT (I)) РЕЗУЛЬТАТ 0 $) И ФАКТ (N) = N = 0 ->1, N * ФАКТ (N - 1)

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

GET " LIBHDR "GLOBAL $ (COUNT: 200 ALL: 201 $) ПОПРОБУЙТЕ (LD, ROW, RD) БУДЕТ ТЕСТОВОЙ СТРОКОЙ = ВСЕ ТОГДА COUNT: = COUNT + 1 ELSE $ (LET POSS = ALL ~ (LD | ROW | RD) ДО ПОГОДА = 0 ДО $ (ПОЗВОЛЯТЬ P = ПОЛОЖЕНИЕ -ПОЛОЖЕНИЕ ПОЛОЖЕНИЯ: = ПОПРОБОВАТЬ - ПОПРОБОВАТЬ (LD + P << 1, ROW + P, RD + P>>1) $) $) НАЧАТЬ () = VALOF $ (ВСЕ: = 1 ДЛЯ I = От 1 до 12 DO $ (COUNT: = 0 TRY (0, 0, 0) WRITEF ("ПРОБЛЕМА% I2-QUEENS ИМЕЕТ% I5 РЕШЕНИЙ * N", I, COUNT) ВСЕ: = 2 * ВСЕ + 1 $) РЕЗУЛЬТАТ 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

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

Последняя правка сделана 2021-05-11 03:08:29
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте