Jump to content

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

(Перенаправлено с языка программирования B )
Б
Разработано Кен Томпсон
Разработчик Кен Томпсон , Деннис Ритчи
Впервые появился 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. ^ Перейти обратно: а б с д и ж г Ричи, Деннис М. (март 1993 г.). «Развитие языка Си» . Уведомления ACM SIGPLAN . 28 (3): 201–208. дои : 10.1145/155360.155580 .
  3. ^ Перейти обратно: а б с д Томпсон, Кен (7 января 1972 г.). «Справочник пользователей по B» (PDF) . Лаборатории Белла. Архивировано из оригинала (PDF) 17 марта 2015 года . Проверено 21 марта 2014 г.
  4. ^ Дженсен, Ричард (9 декабря 2020 г.). « Чертовски глупый поступок» — происхождение C» . Арс Техника . Проверено 28 марта 2022 г.
  5. ^ Майкл С. Махони (18 августа 1989 г.). «Интервью с доктором медицины Макилроем» . Princeton.edu . Мюррей Хилл.
  6. ^ Перейти обратно: а б Кен Томпсон. «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. ^ Перейти обратно: а б Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139. Архивировано (PDF) из оригинала 9 октября 2022 г.
  11. ^ Перейти обратно: а б Джонсон и Керниган . «ЯЗЫК ПРОГРАММИРОВАНИЯ Б» . Лаборатории Белла. Архивировано из оригинала 11 июня 2015 года . Проверено 21 марта 2014 г.
  12. ^ «Пакет инструментов Thinkage UW» . Мыслейдж, ООО Проверено 26 марта 2014 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 023f135121050e1e2762229e5d2cdfc4__1718339580
URL1:https://arc.ask3.ru/arc/aa/02/c4/023f135121050e1e2762229e5d2cdfc4.html
Заголовок, (Title) документа по адресу, URL1:
B (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)