BCPL (Basic Combined Programming Language) — процедурна, імперативна і структурна комп'ютерна мова програмування розроблена [en], вченим з Кембриджського університету в 1966.
BCPL | |
---|---|
Парадигма | Процедурне програмування, Імперативне програмування, Структурне програмування |
Дата появи | 1966 |
Творці | [en] |
Система типізації | typeless (everything is a Машинне слово) |
Під впливом від | [en] |
Вплинула на | B, C, Go |
Мова призначалася для написання компіляторів для інших мов, і зараз не використовується. Проте її вплив як і раніше відчувається, тому що усічена і синтаксично змінена версія BCPL, названа B, була мовою, на якій базувалася мова програмування C. Це змусило багатьох програмістів C дати BCPL гумористичний бекронім Before C Programming Language.
BCPL була першою мовою програмування з фігурними дужками. На практиці в коді часто використовують послідовності $(
та $)
замість символів {
і }
. Однорядковий символ //
, який використовується для коментарів у BCPL, не прижився в C, проте знову з'явився в , а пізніше і в C99.
Ця стаття містить правописні, лексичні, граматичні, стилістичні або інші мовні помилки, які треба виправити. (лютий 2019) |
Дизайн
BCPL була відповіддю на труднощі з попередньою [en] (CPL), яка була створена на початку 1960-х років. Річардс створив BCPL, «виключивши ті функції мови, які ускладнюють компіляцію». Перша реалізація компілятора для IBM 7090 під Compatible Time-Sharing System (CTSS) була написана в той час, як Річардс відвідував Project MAC Массачусетського технологічного інституту (MIT) навесні 1967 року. Мова була вперше описана в документі, представленому на Весняній Об'єднаній комп'ютерній конференції 1969 року.
Мова була розроблена таким чином, що для неї можна було створити малі і прості компілятори; відомо, що деякі компілятори можуть бути запущені на 16 кілобайтах. Крім того, компілятор Richards, сам написаний на BCPL, був легко портованим. Таким чином, BCPL була ідеальним вибором для розкрутки компілятора.
Одна з основних причин переносимості компілятору полягає в його структурі. Він був розділений на дві частини: фронтальна частина аналізувала джерело і генерувала O-код для віртуальної машини, а внутрішня частина приймала O-код і перекладала його в код для цільової машини. Тільки одна п'ята частина коду компілятора повинна була бути переписана для підтримки нової машини, це завдання, яке зазвичай займає від 2 до 5 людино-місяців. Цей підхід став загальноприйнятою практикою пізніше, наприклад, для 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. Перша MUD була також написана на BCPL.([en]). Кілька операційних систем були написані частково або повністю на BCPL (наприклад, [en] і ранні версії [en]). BCPL була також першоджерельною мовою, використовуваною в проекті PARC Alto, першого сучасного персонального комп'ютера. Серед інших проектів, система підготовки документів [en] була написана на BCPL.
Ранній компілятор, розроблений в 1969 році, починався з паперової стрічки O-коду, компілятора [en] Мартіна Річардса, плануючи [en] серію. Ці дві машини мали різні довжини слів (48 проти 24 біт), різні кодування символів і різні уявлення упакованих рядків, а успішне самоналаштування підвищило впевненість в практичності методу.
До кінця 1970 року були реалізовані: [en], (IBM System/360), PDP-10, [en], [en], [en], [en], the [en] і [en]. У 1974 році діалект BCPL був реалізований в [en] без використання проміжного O-коду. Первісна реалізація була крос-компілятором розміщеним на PDP-10 BBN TOPS-20, і безпосередньо націлена на PDP-11, що використовуються в реалізації BBN другого покоління [en], використовуваних в Arpanet.
Була також версія, випущена для [en] в середині 1980-х, компанією Richards Computer Products, створеною Джоном Річардсом, братом доктора Мартіна Річардса. Проект BBC Domesday використовував цю мову. Версії BCPL для комп'ютерів Amstrad CPC і [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 $)
Посилання
- Pike, Rob (24 квітня 2014). . Архів оригіналу за 10 жовтня 2016. Процитовано 11 березня 2016.
- Expert C Programming: Deep C Secrets by Peter Van Der Linden (Prentice Hall, 1994)
- BCPL [ 3 квітня 2018 у Wayback Machine.], Jargon File
Література
- Martin Richards, The BCPL Reference Manual [ 11 червня 2015 у Wayback Machine.] (Memorandum M-352, , 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 [ 5 березня 2016 у Wayback Machine.] (MAC TR-141, , Cambridge, MA, USA, 1974)
- Martin Richards, C. Whitby-Strevens, BCPL, the language and its compiler (Cambridge University Press, 1980)
Посилання
- Martin Richards' BCPL distribution [ 21 червня 2006 у Wayback Machine.]
- Martin Richards' BCPL Reference Manual [ 11 червня 2015 у Wayback Machine.] by Dennis M. Ritchie including his commentary about BCPL's influence on C
- BCPL entry [ 9 червня 2016 у Wayback Machine.] in the Jargon File
- Nordier & Associates' x86 port [ 11 листопада 2016 у Wayback Machine.]
- ArnorBCPL manual [ 4 березня 2016 у Wayback Machine.]
Ця стаття потребує додаткових для поліпшення її . (травень 2017) |
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya pro movu programuvannya Pro bibliotechnu sistemu div BCPL Basic Combined Programming Language procedurna imperativna i strukturna komp yuterna mova programuvannya rozroblena en vchenim z Kembridzhskogo universitetu v 1966 BCPLParadigmaProcedurne programuvannya Imperativne programuvannya Strukturne programuvannyaData poyavi1966 58 rokiv tomu 1966 Tvorci en Sistema tipizaciyitypeless everything is a Mashinne slovo Pid vplivom vid en Vplinula naB C Go Mova priznachalasya dlya napisannya kompilyatoriv dlya inshih mov i zaraz ne vikoristovuyetsya Prote yiyi vpliv yak i ranishe vidchuvayetsya tomu sho usichena i sintaksichno zminena versiya BCPL nazvana B bula movoyu na yakij bazuvalasya mova programuvannya C Ce zmusilo bagatoh programistiv C dati BCPL gumoristichnij bekronim Before C Programming Language BCPL bula pershoyu movoyu programuvannya z figurnimi duzhkami Na praktici v kodi chasto vikoristovuyut poslidovnosti ta zamist simvoliv i Odnoryadkovij simvol yakij vikoristovuyetsya dlya komentariv u BCPL ne prizhivsya v C prote znovu z yavivsya v C a piznishe i v C99 Cya stattya mistit pravopisni leksichni gramatichni stilistichni abo inshi movni pomilki yaki treba vipraviti Vi mozhete dopomogti vdoskonaliti cyu stattyu pogodivshi yiyi iz chinnimi movnimi standartami lyutij 2019 DizajnBCPL bula vidpoviddyu na trudnoshi z poperednoyu en CPL yaka bula stvorena na pochatku 1960 h rokiv Richards stvoriv BCPL viklyuchivshi ti funkciyi movi yaki uskladnyuyut kompilyaciyu Persha realizaciya kompilyatora dlya IBM 7090 pid Compatible Time Sharing System CTSS bula napisana v toj chas yak Richards vidviduvav Project MAC Massachusetskogo tehnologichnogo institutu MIT navesni 1967 roku Mova bula vpershe opisana v dokumenti predstavlenomu na Vesnyanij Ob yednanij komp yuternij konferenciyi 1969 roku Mova bula rozroblena takim chinom sho dlya neyi mozhna bulo stvoriti mali i prosti kompilyatori vidomo sho deyaki kompilyatori mozhut buti zapusheni na 16 kilobajtah Krim togo kompilyator Richards sam napisanij na BCPL buv legko portovanim Takim chinom BCPL bula idealnim viborom dlya rozkrutki kompilyatora Odna z osnovnih prichin perenosimosti kompilyatoru polyagaye v jogo strukturi Vin buv rozdilenij na dvi chastini frontalna chastina analizuvala dzherelo i generuvala O kod dlya virtualnoyi mashini a vnutrishnya chastina prijmala O kod i perekladala jogo v kod dlya cilovoyi mashini Tilki odna p yata chastina kodu kompilyatora povinna bula buti perepisana dlya pidtrimki novoyi mashini ce zavdannya yake zazvichaj zajmaye vid 2 do 5 lyudino misyaciv Cej pidhid stav zagalnoprijnyatoyu praktikoyu piznishe napriklad dlya Pascal abo Java ale kompilyator Richards BCPL buv pershim sho viokremiv virtualnu mashinu dlya ciyeyi zadachi Mova nezvichajna tim sho u neyi ye tilki odin tip danih Mashinne slovo fiksovane chislo bit zazvichaj vibirayetsya dlya virivnyuvannya z mashinnim slovom arhitekturi ta dostatnoyi yemnosti dlya podannya bud yakoyi dijsnoyi adresi zberigannya Dlya bagatoh mashin togo chasu cej tip danih buv 16 bitovim Cej vibir piznishe viyavivsya serjoznoyu problemoyu koli BCPL vikoristovuvavsya na mashinah u yakih najmenshij adresovanij element buv ne slovom a bajtom abo na mashinah z velikimi rozmirami sliv z rozmirnistyu 32 bit abo 64 bit Interpretaciya bud yakogo znachennya viznachalasya operatorami vikoristovuvanimi dlya obrobki znachen Napriklad dodaye dva znachennya rozglyadayuchi yih yak cili chisla pobichno cherez znachennya efektivno rozglyadayuchi jogo yak pokazhchik Dlya togo shob ce pracyuvalo realizaciya ne nadala perevirki tipiv Ugorska notaciya bula rozroblena shob dopomogti programistam uniknuti vipadkovih pomilok tipu Nevidpovidnist mizh oriyentaciyeyu na slova i obladnannyam oriyentovanim na bajti bulo rozglyanuto dekilkoma sposobami Deyaki nadavali standartni bibliotechni proceduri dlya upakovki i rozpakovuvannya sliv v bajtovi ryadka Piznishe buli dodani dvi movni funkciyi operator viboru bitovogo polya i operator nepryamogo privlasnennya infiksnogo bajta poznachayetsya simvolom BCPL obroblyaye priv yazki sho ohoplyuyut okremi odinici kompilyaciyi unikalnim sposobom Globalnih zminnih yaki deklaruyutsya koristuvachem nemaye Zamist cogo ye globalnij vektor yakij shozhij na porozhnyu zagalnu v Fortran Vsi dani sho rozdilyayutsya mizh riznimi odinicyami kompilyaciyi mistyat skalyari i pokazhchiki na vektori sho zberigayutsya v zazdalegid viznachenomu misci v globalnomu vektori Takim chinom fajli zagolovkiv fajli vklyucheni pid chas kompilyaciyi za dopomogoyu direktivi GET stayut osnovnim zasobom sinhronizaciyi globalnih danih mizh modulyami kompilyaciyi sho mistyat direktivi GLOBAL yaki predstavlyayut spiski simvolichnih imen kozhen z yakih z yednanij z nomerom yakij pov yazuye ce im ya z vidpovidnoyu chislovoyu adresoyu slova v globalnomu vektori Yak i zminni globalnij vektor takozh mistit priv yazki dlya zovnishnih procedur Ce robit dinamichne zavantazhennya blokiv kompilyaciyi duzhe prostoyu Zamist togo shob pokladatisya na zavantazhuvach posilan bazovoyi realizaciyi BCPL daye programistu kontrol nad procesom zv yazuvannya Globalnij vektor takozh sprostiv zaminu abo rozshirennya standartnih bibliotechnih procedur Programa mogla b zberegti pokazhchik vid globalnogo vektora do vihidnoyi pidprogrami i zaminiti jogo pokazhchikom na alternativnu versiyu Alternativa mogla b nazvati original yak chastinu jogo obrobki Ce mozhna vikoristovuvati yak shvidke specialne nalashtuvannya Kniga BCPL Mova i jogo kompilyator opisuye filosofiyu BCPL nastupnim chinom Filosofiya BCPL ne odin z tiraniv yakij dumaye sho vin znaye krashe za vse i vstanovlyuye zakon pro te sho dozvoleno i ne dozvoleno Shvidshe BCPL diye skorishe yak sluga sho proponuye svoyi poslugi v miru svoyih zdibnostej bez pretenzij navit koli stikayetsya z bezperechnoyu nisenitniceyu Programist zavzhdi peredbachaye sho vin znaye sho robit i ne obmezhenij dribnimi obmezhennyami I dizajn i filosofiya BCPL silno vplinuli na B yaka v svoyu chergu vplinula na C Programisti v toj chas obgovoryuvali chi bude mozhlivij nastupnik C nazivatisya D nastupna bukva v alfaviti abo P nastupna bukva v imeni batkivskoyi movi Yak viyavilosya faktichne im ya viyavilosya C operator inkrementu movi C Z chutok BCPL spochatku stoyav za nazvu Bootstrap Cambridge Programming Language ale CPL nikoli ne onovlyuvavsya z tih pir yak rozvitok zupinivsya v BCPL a akronim buv piznishe pereosmislenij dlya knigi BCPL Vikoristannya i realizaciyaBCPL ce mova na yakij bula napisana originalna programa hello world Persha MUD bula takozh napisana na BCPL en Kilka operacijnih sistem buli napisani chastkovo abo povnistyu na BCPL napriklad en i ranni versiyi en BCPL bula takozh pershodzherelnoyu movoyu vikoristovuvanoyu v proekti PARC Alto pershogo suchasnogo personalnogo komp yutera Sered inshih proektiv sistema pidgotovki dokumentiv en bula napisana na BCPL Rannij kompilyator rozroblenij v 1969 roci pochinavsya z paperovoyi strichki O kodu kompilyatora en Martina Richardsa planuyuchi en seriyu Ci dvi mashini mali rizni dovzhini sliv 48 proti 24 bit rizni koduvannya simvoliv i rizni uyavlennya upakovanih ryadkiv a uspishne samonalashtuvannya pidvishilo vpevnenist v praktichnosti metodu Do kincya 1970 roku buli realizovani en IBM System 360 PDP 10 en en en en the en i en U 1974 roci dialekt BCPL buv realizovanij v en bez vikoristannya promizhnogo O kodu Pervisna realizaciya bula kros kompilyatorom rozmishenim na PDP 10 BBN TOPS 20 i bezposeredno nacilena na PDP 11 sho vikoristovuyutsya v realizaciyi BBN drugogo pokolinnya en vikoristovuvanih v Arpanet Bula takozh versiya vipushena dlya en v seredini 1980 h kompaniyeyu Richards Computer Products stvorenoyu Dzhonom Richardsom bratom doktora Martina Richardsa Proekt BBC Domesday vikoristovuvav cyu movu Versiyi BCPL dlya komp yuteriv Amstrad CPC i en buli takozh vipusheni v 1986 roci britanskim programnim budinkom Arnor Ltd MacBCPL buv vipushenij dlya Apple Macintosh v 1985 roci kompaniyeyu Top Express Ltd Kensington Angliya U 1979 roci isnuvalo shonajmenshe 25 arhitektur dlya realizaciyi BCPL Mova postupovo vijshla z modi tak yak C stav populyarnim v sistemah vidminnih vid Unix PrikladiCi povni i vidkompilovani prikladi vzyati z distributivu BCPL Martina Richardsa Druk faktorialiv 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 Rishennya zadachi pro N ferziv 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 PosilannyaPike Rob 24 kvitnya 2014 Arhiv originalu za 10 zhovtnya 2016 Procitovano 11 bereznya 2016 Expert C Programming Deep C Secrets by Peter Van Der Linden Prentice Hall 1994 BCPL 3 kvitnya 2018 u Wayback Machine Jargon FileLiteraturaMartin Richards The BCPL Reference Manual 11 chervnya 2015 u Wayback Machine Memorandum M 352 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 5 bereznya 2016 u Wayback Machine MAC TR 141 Cambridge MA USA 1974 Martin Richards C Whitby Strevens BCPL the language and its compiler Cambridge University Press 1980 ISBN 0 521 28681 6PosilannyaMartin Richards BCPL distribution 21 chervnya 2006 u Wayback Machine Martin Richards BCPL Reference Manual 11 chervnya 2015 u Wayback Machine by Dennis M Ritchie including his commentary about BCPL s influence on C BCPL entry 9 chervnya 2016 u Wayback Machine in the Jargon File Nordier amp Associates x86 port 11 listopada 2016 u Wayback Machine ArnorBCPL manual 4 bereznya 2016 u Wayback Machine Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno traven 2017 Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi