BCPL

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
BCPL
мультипарадигмальна мова програмування і процедурна мова програмування[d]
Парадигма: Процедурне програмування, Імперативне програмування, Структурне програмування
Дата появи: 17 серпня 1966; 18628 днів тому
Творці: Мартін Річардс[en]
Система типізації: typeless (everything is a Машинне слово)
Під впливом від: CPL[en]
Вплинула на: B, C, Go[1]
формат файлу, Just Solve the File Format Problem BCPL

BCPL (Basic Combined Programming Language) це процедурна, імперативна і структурна комп'ютерна мова програмування розроблена Мартіном Річардсоном[en], вченим з Кембриджського університету в 1966.

Спочатку призначений для написання компіляторів для інших мов, BCPL більше не є загальною мовою. Проте його вплив як і раніше відчувається, тому що усічена і синтаксично змінена версія BCPL, звана як B, була мовою, на якій базувалася мова програмування C. Це змусило багатьох програмістів C дати BCPL гумористичний бекронім Before C Programming Language.[2]

BCPL була першою мовою програмування з фігурними дужками. Використання фігурних дужок пережили синтаксичні зміни і стали загальним засобом позначення програмних вихідних кодів. На практиці, у вихідних програмах часто використовуються послідовності $( and $) замість символів { і }. Однорядковий символ // використовується для коментарів у BCPL, не прижились в C, проте знову з'явились в C++, а пізніше і в C99[en].

Дизайн[ред.ред. код]

BCPL була відповіддю на труднощі з попередньою Combined Programming Language[en] (CPL), яка була створена на початку 1960-х років. Річардс створив BCPL, «виключивши ті функції мови, які ускладнюють компіляцію». Перша реалізація компілятора для IBM 7090 під Compatible Time-Sharing System (CTSS), була написана в той час як Річардс відвідував Project MAC Массачусетського технологічного інституту (MIT) навесні 1967 року. Мова була вперше описана в документі, представленому на Весняній Об'єднаній комп'ютерній конференції 1969 року.

Мова була розроблена таким чином, що для неї можна було створити малі і прості компілятори; відомо, що деякі компілятори можуть бути запущені на 16 кілобайтах. Крім того, компілятор Richards, сам написаний на BCPL, був легко портованим. Таким чином, BCPL була ідеальним вибором для початкового завантаження системи[en].

Одна з основних причин переносимості компілятору полягає в його структурі. Він був розділений на дві частини: фронтальна частина аналізувала джерело і генерувала O-код[en] для віртуальної машина, а внутрішня частина приймала O-код і перекладала його в код для цільової машини. Тільки одна п'ята частина коду компілятора повинна була бути переписана для підтримки нової машини, це завдання, яке зазвичай займає від 2 до 5 людино-місяців[en]. Цей підхід став загальноприйнятою практикою пізніше, наприклад, для Pascal або Java, але компілятор Richards BCPL був першим, що виокремив віртуальну машину для цієї задачи.

Мова незвичайна тим, що у неї є тільки один тип даних: Машинне слово, фіксоване число біт, зазвичай вибирається для вирівнювання з машинним словом архітектури та достатньої ємності, для подання будь-якої дійсної адреси зберігання. Для багатьох машин того часу цей тип даних був 16-бітовим. Цей вибір пізніше виявився серйозною проблемою, коли BCPL використовувався на машинах, у яких найменший адресований елемент був не словом, а байтом, або на машинах з великими розмірами слів, з розмірністю 32-біт або 64-біт.

Інтерпретація будь-якого значення визначалася операторами, використовуваними для обробки значень. (Наприклад, + додає два значення, розглядаючи їх як цілі числа; ! побічно через значення, ефективно розглядаючи його як покажчик.) Для того, щоб це працювало, реалізація не надала перевірки типів. Угорська нотація була розроблена, щоб допомогти програмістам уникнути випадкових помилок типу.

Невідповідність між орієнтацією на слова і і обладнанням, орієнтованим на байти, було розглянуто декількома способами. Деякі надавали стандартні бібліотечні процедури для упаковки і розпаковування слів в байтові рядка. Пізніше були додані дві мовні функції: оператор вибору бітового поля і оператор непрямого привласнення інфіксного байта (позначається символом '%').

BCPL обробляє прив'язки, що охоплюють окремі одиниці компіляції унікальним способом. Глобальних змінних, які декларуються користувачем, немає; Замість цього є глобальний вектор, який схожий на «порожню загальну» в Fortran. Всі дані, що розділяються між різними одиницями компіляції, містять скаляри і покажчики на вектори, що зберігаються в заздалегідь визначеному місці в глобальному векторі. Таким чином, файли заголовків (файли, включені під час компіляції за допомогою директиви GET) стають основним засобом синхронізації глобальних даних між модулями компіляції, що містять директиви «GLOBAL», які представляють списки символічних імен, кожен з яких з'єднаний з номером, який пов'язує це ім'я з відповідною числовою адресою слова в глобальному векторі. Як і змінні, глобальний вектор також містить прив'язки для зовнішніх процедур. Це робить динамічне завантаження блоків компіляції дуже простою. Замість того, щоб покладатися на завантажувач посилань базової реалізації, BCPL дає програмісту контроль над процесом зв'язування.

Глобальний вектор також спростив заміну або розширення стандартних бібліотечних процедур. Програма могла б зберегти покажчик від глобального вектора до вихідної підпрограми і замінити його покажчиком на альтернативну версію. Альтернатива могла б назвати оригінал, як частину його обробки. Це можна використовувати, як швидке спеціальне налаштування.

Книга BCPL: Мова і його компілятор описує філософію BCPL наступним чином:

«Філософія BCPL — не один з тиранів, який думає, що він знає краще за все, і встановлює закон про те, що дозволено і не дозволено; Швидше, BCPL діє скоріше як слуга, що пропонує свої послуги в міру своїх здібностей, без претензій, навіть коли стикається з безперечною нісенітницею. Програміст завжди передбачає, що він знає, що робить, і не обмежений дрібними обмеженнями.»

І дизайн і філософія BCPL сильно вплинули на B, яка, в свою чергу вплинула на C. Програмісти в той час обговорювали, чи буде можливий наступник C називатися D (наступна буква в алфавіті) або «P» (наступна буква в імені батьківської мови). Як виявилося, фактичне ім'я виявилося «C++» (оператор інкременту мови C).

З чуток, BCPL спочатку стояв за назву «Bootstrap Cambridge Programming Language», але CPL ніколи не оновлювався з тих пір, як розвиток зупинився в BCPL, а акронім був пізніше переосмислений для книги BCPL.

Використання і реалізація[ред.ред. код]

BCPL — це мова, на якій була написана оригінальна програма hello world.[3] Перша MUD була також написана на BCPL.(MUD1[en]) (наприклад, TRIPOS і самі ранні версії AmigaDOS). Кілька операційних систем були написані частково або повністю на BCPL ((наприклад, TRIPOS[en] і ранні версії AmigaDOS[en]). BCPL була також першоджерельною мовою, використовуваною в проекті PARC Alto, першого сучасного персонального комп'ютера; Серед інших проектів, система підготовки документів Bravo[en] була написана на BCPL.

Ранній компілятор, розроблений в 1969 році, починався з паперової стрічки O-код[en], компілятора Titan[en] Мартіна Річардса, плануючи ICT 1900[en] серію. Ці дві машини мали різні довжини слів (48 проти 24 біт), різні кодування символів і різні уявлення упакованих рядків, а успішне само-налаштування підвищило впевненість в практичності методу.

До кінця 1970 року були реалізовані: GE-600 series[en], IBM System/360, PDP-10, TX-2[en], CDC 6400[en], UNIVAC 1108[en], PDP-9[en], the KDF 9[en] і Titan[en]. У 1974 році діалект BCPL був реалізований в BBN[en] без використання проміжного O-коду. Первісна реалізація була крос-компілятором розміщеним на PDP-10 BBN TOPS-20, і безпосередньо націлена на PDP-11, що використовуються в реалізації BBN другого покоління IMP[en], використовуваних в Arpanet.

Була також версія, випущена для BBC Micro[en] в середині 1980-х, компанією Richards Computer Products, компанією, створеною Джоном Річардсом, братом доктора Мартіна Річардса. Проект BBC Domesday[en] використовував цю мову. Версії BCPL для комп'ютерів Amstrad CPC[en] і Amstrad PCW[en] були також випущені в 1986 році британським програмним будинком Arnor Ltd. MacBCPL був випущений для Apple Macintosh в 1985 році компанією Top Express Ltd, Кенсінгтон, Англія.

У 1979 році, існувало щонайменше 25 архітектур для реалізації BCPL; Мова поступово вийшла з моди, так як C став популярним в системах, відмінних від Unix.

Приклади[ред.ред. код]

Ці повні і відкомпільовані приклади взяті з дистрибутива BCPL Мартіна Річардса.

Друк факторіалів:

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. Pike, Rob (2014-04-24). Hello Gophers. Процитовано 2016-03-11. 
  2. Expert C Programming: Deep C Secrets by Peter Van Der Linden (Prentice Hall, 1994)
  3. BCPL, Jargon File

Література[ред.ред. код]

  • Martin Richards, The BCPL Reference Manual (Memorandum M-352, Project MAC, Cambridge, MA, USA, July, 1967)
  • Martin Richards, BCPL — a tool for compiler writing and systems programming (Proceedings of the Spring Joint Computer Conference, Vol 34, pp 557—566, 1969)
  • Martin Richards, Arthur Evans, Robert F. Mabee, The BCPL Reference Manual (MAC TR-141, Project MAC, Cambridge, MA, USA, 1974)
  • Martin Richards, C. Whitby-Strevens, BCPL, the language and its compiler (Cambridge University Press, 1980) ISBN 0-521-28681-6

Посилання[ред.ред. код]