Б (язык программирования)
Разработано | Кен Томпсон |
---|---|
Разработчик | Кен Томпсон , Деннис Ритчи |
Впервые появился | 1969 год [1] |
Дисциплина набора текста | бестиповый (все есть слово ) |
Расширения имен файлов | .б |
Под влиянием | |
БКПЛ , ПЛ/И , ТМГ | |
Под влиянием | |
С |
B — язык программирования , разработанный в Bell Labs примерно в 1969 году Кеном Томпсоном и Деннисом Ритчи .
B произошел от BCPL , и его название, возможно, является сокращением BCPL. Коллега Томпсона Деннис Ритчи предположил, что название может быть основано на Bon, более раннем, но не связанном с ним языке программирования, который Томпсон разработал для использования в Multics . [примечание 1]
B был разработан для рекурсивных, нечисловых, машинно-независимых приложений, таких как системное и языковое программное обеспечение. [3] Это был бестиповый язык, в котором единственным типом данных был естественный формат слов памяти базовой машины , каким бы он ни был. В зависимости от контекста слово трактовалось либо как целое число , либо как адрес памяти .
Когда машины с ASCII обработкой стали обычным явлением, особенно DEC PDP-11 , поступившая в Bell Labs, поддержка символьных данных, помещенных в слова памяти, стала важной. Бестиповая природа языка рассматривалась как недостаток, что побудило Томпсона и Ритчи разработать расширенную версию языка, поддерживающую новые внутренние и определяемые пользователем типы, которая стала языком программирования C.
История
[ редактировать ]Семантика BCPL с большим количеством синтаксиса SMALGOL.
— Кен Томпсон, [4]
Около 1969 года, Кен Томпсон. [2] и позже Деннис Ричи [3] разработал B, основываясь главным образом на языке BCPL, который Томпсон использовал в проекте Multics . По сути, B представляла собой систему BCPL, лишенную всех компонентов, без которых, по мнению Томпсона, он мог обойтись, чтобы она соответствовала объему памяти миникомпьютеров того времени. Переход BCPL на B также включал изменения, внесенные в соответствии с предпочтениями Томпсона (в основном в направлении уменьшения количества символов без пробелов в типичной программе). [2] Большая часть типичного АЛГОЛ -подобного синтаксиса BCPL в этом процессе была довольно сильно изменена. Оператор присваивания :=
вернулся к =
Рутисхаузера суперплана оператор и равенства =
был заменен на ==
.
Томпсон добавил «операторы присваивания двух адресов», используя x =+ y
синтаксис для добавления y к x (в C оператор записывается +=
). Этот синтаксис пришел из Дугласа Макилроя реализации TMG , в которой впервые был реализован компилятор B (а в TMG он пришел из ALGOL 68 ). x +:= y
синтаксис). [2] [5] Томпсон пошел дальше, изобретя операторы увеличения и уменьшения ( ++
и --
). Их префиксная или постфиксная позиция определяет, будет ли значение взято до или после изменения операнда. Этого нововведения не было в самых ранних версиях B. По словам Денниса Ритчи, люди часто предполагали, что они были созданы для режимов автоинкремента и автодекремента адреса DEC PDP-11, но это исторически невозможно, поскольку машина не не существовало, когда B был впервые разработан. [2]
Версия цикла for с точкой с запятой была заимствована Кеном Томпсоном из работы Стивена Джонсона . [6]
B не имеет типа или, точнее, имеет один тип данных: компьютерное слово. Большинство операторов (например +
, -
, *
, /
) рассматривали это как целое число, но другие рассматривали это как адрес памяти, который нужно разыменовать . Во многих других отношениях он очень напоминал раннюю версию C. Существует несколько библиотечных функций, в том числе отдаленно напоминающих функции из стандартной библиотеки ввода-вывода в C. [3]
По словам Томпсона: «B и старый старый C были очень похожими языками, за исключением всех типов [в C]». [6]
Ранние реализации предназначались для миникомпьютеров DEC PDP-7 и PDP-11, использующих ранние версии Unix и Honeywell GE 645. [7] 36-битные мейнфреймы под управлением операционной системы GCOS . Самые ранние реализации PDP-7 компилировались в многопоточный код компилятор , и Ритчи написал с использованием TMG , который создавал машинный код. [8] [9] [10] В 1970 году был приобретен PDP-11, и для порта использовался многопоточный код; ассемблер, округ Колумбия , и сам язык B был написан на B для начальной загрузки компьютера. Ранняя версия yacc была выпущена с этой конфигурацией PDP-11. В этот период Ричи взял на себя техническое обслуживание. [2] [10]
Бестиповая природа B имела смысл на Honeywell, PDP-7 и многих старых компьютерах, но была проблемой на PDP-11, поскольку было трудно элегантно получить доступ к символьному типу данных, который PDP-11 и большинство современных компьютеров полностью поддерживают. . Начиная с 1971 года Ричи внес изменения в язык, преобразовав его компилятор для создания машинного кода, в первую очередь добавив типизацию данных для переменных. В 1971 и 1972 годах B превратился в «New B» (NB), а затем в C. [2]
почти вымер, его вытеснил язык C. Язык B [11] Однако его продолжают использовать на мэйнфреймах ГСНК (по состоянию на 2014 г. [update]) [12] и в некоторых встроенных системах (по состоянию на 2000 г. [update]) по разным причинам: ограниченное аппаратное обеспечение в небольших системах, обширные библиотеки, инструменты, проблемы со стоимостью лицензирования и просто достаточная пригодность для работы. [11] Очень влиятельный AberMUD был первоначально написан на языке Б.
Примеры
[ редактировать ]Следующие примеры взяты из «Справочника пользователей по B» Кена Томпсона: [3]
/* The following function will print a non-negative number, n, to
the base b, where 2<=b<=10. This routine uses the fact that
in the ASCII character set, the digits 0 to 9 have sequential
code values. */
printn(n, b) {
extrn putchar;
auto a;
/* Wikipedia note: the auto keyword declares a variable with
automatic storage (lifetime is function scope), not
"automatic typing" as in C++11. */
if (a = n / b) /* assignment, not test for equality */
printn(a, b); /* recursive */
putchar(n % b + '0');
}
/* The following program will calculate the constant e-2 to about
4000 decimal digits, and print it 50 characters to the line in
groups of 5 characters. The method is simple output conversion
of the expansion
1/2! + 1/3! + ... = .111....
where the bases of the digits are 2, 3, 4, . . . */
main() {
extrn putchar, n, v;
auto i, c, col, a;
i = col = 0;
while(i<n)
v[i++] = 1;
while(col<2*n) {
a = n+1;
c = i = 0;
while (i<n) {
c =+ v[i] *10;
v[i++] = c%a;
c =/ a--;
}
putchar(c+'0');
if(!(++col%5))
putchar(col%50?' ': '*n');
}
putchar('*n*n');
}
v[2000];
n 2000;
Примечания
[ редактировать ]- ^ "Его название, скорее всего, представляет собой сокращение BCPL, хотя альтернативная теория утверждает, что оно происходит от Бона [Томпсон 69], несвязанного языка, созданного Томпсоном во времена Multics. Бон, в свою очередь, был назван либо в честь его жены Бонни, либо ( согласно цитате из энциклопедии в руководстве), в честь религии , ритуалы которой включают в себя бормотание магических формул». [2]
Ссылки
[ редактировать ]- ^ «Б – язык программирования» .
- ^ Перейти обратно: а б с д и ж г Ричи, Деннис М. (март 1993 г.). «Развитие языка Си» . Уведомления ACM SIGPLAN . 28 (3): 201–208. дои : 10.1145/155360.155580 .
- ^ Перейти обратно: а б с д Томпсон, Кен (7 января 1972 г.). «Справочник пользователей по B» (PDF) . Лаборатории Белла. Архивировано из оригинала (PDF) 17 марта 2015 года . Проверено 21 марта 2014 г.
- ^ Дженсен, Ричард (9 декабря 2020 г.). « Чертовски глупый поступок» — происхождение C» . Арс Техника . Проверено 28 марта 2022 г.
- ^ Майкл С. Махони (18 августа 1989 г.). «Интервью с доктором медицины Макилроем» . Princeton.edu . Мюррей Хилл.
- ^ Перейти обратно: а б Кен Томпсон. «VCF East 2019 — Брайан Керниган берет интервью у Кена Томпсона» . Ютуб . Архивировано из оригинала 23 ноября 2021 г. Проверено 16 ноября 2020 г.
Я видел версию цикла for с точкой с запятой Джонсона и поместил ее в [B], я украл ее.
- ^ Ричи, Деннис М. (1984). «Эволюция системы разделения времени Unix» . Технический журнал AT&T Bell Laboratories . 63 (6 Часть 2): 1577–1593. дои : 10.1002/j.1538-7305.1984.tb00054.x . Архивировано из оригинала 11 июня 2015 года.
- ^ «ТМГ» . multicians.org.
- ^ Ричи, Деннис М. «Развитие языка C» . Bell Labs/Lucent Technologies. Архивировано из оригинала 11 июня 2015 года.
- ^ Перейти обратно: а б Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139. Архивировано (PDF) из оригинала 9 октября 2022 г.
- ^ Перейти обратно: а б Джонсон и Керниган . «ЯЗЫК ПРОГРАММИРОВАНИЯ Б» . Лаборатории Белла. Архивировано из оригинала 11 июня 2015 года . Проверено 21 марта 2014 г.
- ^ «Пакет инструментов Thinkage UW» . Мыслейдж, ООО Проверено 26 марта 2014 г.
Внешние ссылки
[ редактировать ]- Страница руководства для b(1) из Unix First Edition
- Развитие языка Си , Деннис М. Ритчи . в контекст BCPL и C. Помещает B
- Ссылка пользователей на Б. , Кен Томпсон. Описывает версию PDP-11 .
- Язык программирования B , SC Johnson и BW Kernighan, Технический отчет CS TR 8, Bell Labs (январь 1973 г.). Версия GCOS на оборудовании Honeywell .
- B Справочное руководство по языку , Thinkage Ltd. Производственная версия языка, используемая в GCOS, включая язык и библиотеку времени выполнения.