Б (язык программирования)
Разработано | Кен Томпсон |
---|---|
Разработчик | Кен Томпсон , Деннис Ритчи |
Впервые появился | 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]
Язык B почти вымер, его вытеснил C. язык [11] Однако его продолжают использовать на ГСНК (по состоянию на 2014 г. мейнфреймах [update]) [12] и в некоторых встроенных системах (по состоянию на 2000 г. [update]) по разным причинам: ограниченное аппаратное обеспечение в небольших системах, обширные библиотеки, инструменты, проблемы со стоимостью лицензирования и просто достаточная эффективность для работы. [11] Очень влиятельный AberMUD был первоначально написан на языке Б.
Примеры [ править ]
Следующие примеры взяты из «Справочника пользователей по B» Кена Томпсона: [3]
/* Следующая функция выведет неотрицательное число n по
основанию b, где 2<=b<=10. В этой процедуре используется тот факт, что
в наборе символов ASCII цифры от 0 до 9 имеют последовательные
кодовые значения. */
printn ( n , b ) {
extrn putchar ;
авто а ;
/* Примечание Википедии: ключевое слово auto объявляет переменную с
автоматическим хранением (время жизни — это область действия функции), а не с
«автоматической типизацией», как в C++11. */
if ( a = n / b ) /* присваивание, а не проверка на равенство */
printn ( a , b ); /* рекурсивно */
putchar ( n % b + '0' );
}
/* Следующая программа вычислит константу e-2 примерно до
4000 десятичных цифр и выведет ее по 50 символов в строку
группами по 5 символов. Метод заключается в простом преобразовании вывода
расширения
1/2! + 1/3! + ... = .111....
где основания цифр 2, 3, 4, . . . */
main () {
extrn putchar , n , v ;
авто я , с , столбец , а ;
я = столбец = 0 ;
в то время как ( я < п )
v [ я ++ ] знак равно 1 ;
в то время как ( col < 2 * n ) {
а знак равно п + 1 ;
с знак равно я знак равно 0 ;
в то время как ( я < п ) {
c =+ v [ я ] * 10 ;
v [ я ++ ] знак равно с % а ;
с =/ а -- ;
}
Путчар ( с + '0' );
if ( ! ( ++ col % 5 ))
putchar ( col % 50 ? ' ' : ' * n ' );
}
putchar ( ' * n * n ' );
}
v [ 2000 ];
н 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 — Брайан Керниган берет интервью у Кена Томпсона» . YouTube . Архивировано из оригинала 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, включая язык и библиотеку времени выполнения.