B (язык программирования) - B (programming language)
Разработано | Кен Томпсон |
---|---|
Разработчик | Кен Томпсон , Деннис Ричи |
Впервые появился | 1969 |
Печатная дисциплина | безразличный (все - слово ) |
Расширения имени файла | .b |
Под влиянием | |
BCPL , PL / I , TMG | |
Под влиянием | |
C |
B - это язык программирования, разработанный в Bell Labs примерно в 1969 году. Он был разработан Кеном Томпсоном и Деннисом Ричи .
B был производным от BCPL , и его название может быть сокращением от BCPL. Коллега Томпсона Деннис Ричи предположил, что название могло быть основано на Bon, более раннем, но не связанном с ним языке программирования, который Томпсон разработал для использования в Multics .
B был разработан для рекурсивных, нечисловых, машинно-независимых приложений, таких как системное и языковое программное обеспечение. Это был безтиповый язык, с единственным типом данных, который являлся естественным форматом слова памяти базовой машины , каким бы он ни был. В зависимости от контекста слово трактовалось либо как целое число, либо как адрес памяти .
По мере того, как машины с обработкой ASCII стали обычным явлением, в частности, DEC PDP-11, который прибыл в Bell, поддержка символьных данных, вставленных в слова памяти, стала важной. Бестиповое природа языка рассматривается как недостаток, который привел Томпсон и Ритчи разработать расширенную версию языка , поддерживающей новые внутренние и определяемые пользователем типы, который стал язык программирования Си .
История
Приблизительно в 1969 году Кен Томпсон, а позже Деннис Ричи разработали B, основываясь в основном на языке BCPL, который Томпсон использовал в проекте Multics . По сути, B была системой BCPL, лишенной каких-либо компонентов, без которых, по мнению Томпсона, он мог обойтись, чтобы она соответствовала объему памяти миникомпьютеров того времени. Переход с BCPL на B также включал изменения, сделанные в соответствии с предпочтениями Томпсона (в основном, в направлении уменьшения количества непробельных символов в типичной программе). Большая часть типичного АЛГОЛ- подобного синтаксиса BCPL была довольно сильно изменена в этом процессе. Оператор присваивания :=
возвращён к =
из Rutishauser «s SUPERPLAN , а оператор равенства =
был заменен ==
.
Томпсон добавил «двухадресные операторы присваивания», используя x =+ y
синтаксис для добавления y к x (в C оператор написан +=
). Этот синтаксис пришел из Дуглас Макилра «s реализации в TMG , в котором компилятор B был первым реализован (и он пришел к TMG из Алгола 68 » s x +:= y
синтаксис). Томпсон пошел дальше, изобретя операторы инкремента и декремента ( ++
и --
). Их положение префикса или постфикса определяет, будет ли значение принято до или после изменения операнда. Этого нововведения не было в самых ранних версиях B. По словам Денниса Ричи, люди часто предполагали, что они были созданы для режимов автоматического увеличения и автоматического уменьшения адреса DEC PDP-11, но это исторически невозможно, поскольку машина этого не делала. не существовало, когда B был впервые разработан.
Версия цикла for с точкой с запятой была позаимствована Кеном Томпсоном из работы Стивена Джонсона .
B не имеет типа, или, точнее, имеет один тип данных: компьютерное слово. Большинство операторов (например +
, -
, *
, /
) обрабатывают это как целое число, но другие относились к нему , как адрес памяти , чтобы быть разыменовываются . Во многих других отношениях это было очень похоже на раннюю версию C. Есть несколько библиотечных функций, в том числе некоторые, которые отдаленно напоминают функции из стандартной библиотеки ввода-вывода в C. По словам Томпсона: «B и старый старый C были очень похожие языки, за исключением всех типов [в C] ».
Ранние реализации были для миникомпьютеров DEC PDP-7 и PDP-11, использующих раннюю версию Unix , и 36-битных мэйнфреймов Honeywell GE 645 с операционной системой GCOS . Самые ранние реализации PDP-7 компилировались в многопоточный код , и Ричи написал компилятор с использованием TMG, который создавал машинный код. В 1970 году была приобретена PDP-11, и для порта использовался многопоточный код; ассемблер,Округ Колумбия, и сам язык B был написан на B для начальной загрузки компьютера. Ранняя версия yacc была произведена с этой конфигурацией PDP-11. В этот период Ричи взял на себя техническое обслуживание.
Бестиповая природа B имела смысл на Honeywell, PDP-7 и многих старых компьютерах, но была проблемой на PDP-11, потому что было трудно элегантно получить доступ к символьному типу данных, который полностью поддерживает PDP-11 и большинство современных компьютеров. . Начиная с 1971 года, Ритчи внес изменения в язык, преобразовывая свой компилятор для создания машинного кода, в первую очередь добавляя типизацию данных для переменных. В течение 1971 и 1972 годов B превратился в "New B" (NB), а затем в C.
В почти исчезли, будучи заменены на языке Си . Однако он по-прежнему используется на мэйнфреймах ГСНК (по состоянию на 2014 г.) и в некоторых встроенных системах (по состоянию на 2000 г.) по ряду причин: ограниченное оборудование в небольших системах, обширные библиотеки, инструменты, проблемы с затратами на лицензирование и просто хорошее качество. достаточно для работы. Очень влиятельный AberMUD изначально был написан на B.
Примеры
Следующие примеры взяты из ссылки пользователей на B Кена Томпсона:
/* 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;
Смотрите также
Портал компьютерного программирования
Примечания
использованная литература
внешние ссылки
- Страница руководства для b (1) из Unix First Edition
- Развитие языка C , Деннис М. Ричи . Оферты В в контексте BCPL и C .
- Ссылка пользователей на B , Ken Thompson. Описываетверсию PDP-11 .
- Язык программирования B , SC Johnson & BW Kernighan, Технический отчет CS TR 8, Bell Labs (январь 1973 г.). Версия GCOS наоборудовании Honeywell .
- B Справочное руководство по языку, Thinkage Ltd. Производственная версия языка, используемого в GCOS, включая язык и библиотеку времени выполнения.