Б (язык программирования)

Б
Разработано Кен Томпсон
Разработчик Кен Томпсон , Деннис Ритчи
Впервые появился 1969 год ; 55 лет назад ( 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 г. ) [12] и в некоторых встроенных системах (по состоянию на 2000 г. ) по разным причинам: ограниченное аппаратное обеспечение в небольших системах, обширные библиотеки, инструменты, проблемы со стоимостью лицензирования и просто достаточная пригодность для работы. [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;

Примечания [ править ]

  1. ^ "Его название, скорее всего, представляет собой сокращение BCPL, хотя альтернативная теория утверждает, что оно происходит от Бона [Томпсон 69], несвязанного языка, созданного Томпсоном во времена Multics. Бон, в свою очередь, был назван либо в честь его жены Бонни, либо ( согласно цитате из энциклопедии в руководстве), в честь религии , ритуалы которой включают в себя бормотание магических формул». [2]

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

  1. ^ «Б – язык программирования» .
  2. ^ Jump up to: Перейти обратно: а б с д и ж г Ричи, Деннис М. (март 1993 г.). «Развитие языка Си» . Уведомления ACM SIGPLAN . 28 (3): 201–208. дои : 10.1145/155360.155580 .
  3. ^ Jump up to: Перейти обратно: а б с д Томпсон, Кен (7 января 1972 г.). «Справочник пользователей по B» (PDF) . Лаборатории Белла. Архивировано из оригинала (PDF) 17 марта 2015 года . Проверено 21 марта 2014 г.
  4. ^ Дженсен, Ричард (9 декабря 2020 г.). « Чертовски глупый поступок» — происхождение C» . Арс Техника . Проверено 28 марта 2022 г.
  5. ^ Майкл С. Махони (18 августа 1989 г.). «Интервью с доктором медицины Макилроем» . Princeton.edu . Мюррей Хилл.
  6. ^ Jump up to: Перейти обратно: а б Кен Томпсон. «VCF East 2019 — Брайан Керниган берет интервью у Кена Томпсона» . Ютуб . Архивировано из оригинала 23 ноября 2021 г. Проверено 16 ноября 2020 г. Я видел версию цикла for с точкой с запятой Джонсона и поместил ее в [B], я украл ее.
  7. ^ Ричи, Деннис М. (1984). «Эволюция системы разделения времени Unix» . Технический журнал AT&T Bell Laboratories . 63 (6 Часть 2): 1577–1593. дои : 10.1002/j.1538-7305.1984.tb00054.x . Архивировано из оригинала 11 июня 2015 года.
  8. ^ «ТМГ» . multicians.org.
  9. ^ Ричи, Деннис М. «Развитие языка C» . Bell Labs/Lucent Technologies. Архивировано из оригинала 11 июня 2015 года.
  10. ^ Jump up to: Перейти обратно: а б Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139. Архивировано (PDF) из оригинала 9 октября 2022 г.
  11. ^ Jump up to: Перейти обратно: а б Джонсон и Керниган . «ЯЗЫК ПРОГРАММИРОВАНИЯ Б» . Лаборатории Белла. Архивировано из оригинала 11 июня 2015 года . Проверено 21 марта 2014 г.
  12. ^ «Пакет инструментов Thinkage UW» . Мыслейдж, ООО Проверено 26 марта 2014 г.

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