Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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 действует больше как слуга, предлагающий свои услуги в меру своих возможностей без жалоб, даже когда сталкивается с очевидной ерундой. Предполагается, что программист всегда знает, что делает, и не скован мелкими ограничениями. [4]

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

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

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

BCPL - это язык, на котором была написана исходная программа hello world . [5] Первый 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, компанией, основанной Джоном Ричардсом, братом доктора Мартина Ричардса. [6] Проект BBC Domesday использовал этот язык. Версии BCPL для компьютеров Amstrad CPC и Amstrad PCW также были выпущены в 1986 году британской компанией по разработке программного обеспечения Arnor Ltd. MacBCPL был выпущен для Apple Macintosh в 1985 году компанией Topexpress Ltd из Кенсингтона, Англия.

И дизайн и философию BCPL под сильным влиянием B , который в свою очередь , под влиянием C . [7] Программисты в то время обсуждали, будет ли возможный преемник C называться «D», следующей буквой в алфавите, или «P», следующей буквой в имени родительского языка. Наиболее широко принятым в качестве преемника C является C ++ ( ++который является оператором приращения C ) [8], хотя тем временем язык программирования 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"ДАВАЙТЕ НАЧАТЬ () = VALOF $ (ДЛЯ I = 1 ДО 5 ДОWRITEF ("% N! =% I4 * N"; I; ФАКТ (I))РЕЗУЛЬТАТ 0$)И ФАКТ (N) = N = 0 -> 1, N * ФАКТ (N - 1)

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

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

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

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

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

  • Мартин Ричардс, Справочное руководство 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 

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

  • Распределение BCPL Мартина Ричардса
  • Справочное руководство Мартина Ричардса BCPL, 1967 , Деннис М. Ричи
  • Запись BCPL в файле жаргона
  • Nordier & Associates' x86 порт
  • Руководство ArnorBCPL
  • В книге Ричи « Развитие языка Си» есть комментарии о влиянии BCPL на язык Си.
  • Руководство пользователя BCPL Cintsys и Cintpos