B - это язык программирования, разработанный в Bell Labs примерно в 1969 году. Он был разработан Кеном Томпсоном и Деннисом Ричи .
Разработано | Кен Томпсон |
---|---|
Разработчик | Кен Томпсон , Деннис Ричи |
Впервые появился | 1969 [1] |
Печатная дисциплина | бестиповый (все - слово ) |
Расширения имени файла | .b |
Под влиянием | |
BCPL , PL / I , TMG | |
Под влиянием | |
C |
B был производным от BCPL , и его название может быть сокращением от BCPL. Коллега Томпсона Деннис Ричи предположил, что название могло быть основано на Bon, более раннем, но не связанном с ним языке программирования, который Томпсон разработал для использования в Multics . [примечание 1]
B был разработан для рекурсивных, нечисловых, машинно-независимых приложений, таких как системное и языковое программное обеспечение. [3] Это был бестиповый язык, с единственным типом данных, который являлся естественным форматом слова памяти базовой машины , каким бы он ни был. В зависимости от контекста слово трактовалось либо как целое число, либо как адрес памяти .
По мере того, как машины с обработкой ASCII стали обычным явлением, особенно DEC PDP-11 , прибывшая в Bell, поддержка символьных данных, вставленных в слова памяти, стала важной. Бестиповое природа языка рассматривается как недостаток, который привел Томпсон и Ритчи разработать расширенную версию языка , поддерживающей новые внутренние и определяемые пользователем типы, который стал язык программирования Си .
История
Примерно в 1969 году Кен Томпсон [2], а позже Деннис Ричи [3] разработали B, основываясь в основном на языке BCPL, который Томпсон использовал в проекте Multics . По сути, B была системой BCPL, лишенной каких-либо компонентов, без которых, по мнению Томпсона, он мог обойтись, чтобы она соответствовала объему памяти мини-компьютеров того времени. Переход от BCPL к B также включал изменения, сделанные в соответствии с предпочтениями Томпсона (в основном, в направлении уменьшения количества непробельных символов в типичной программе). [2] Большая часть типичного АЛГОЛ- подобного синтаксиса BCPL была довольно сильно изменена в этом процессе. Оператор присваивания :=
изменен на, =
а оператор равенства =
заменен на ==
.
Томпсон добавил «двухадресные операторы присваивания», используя x =+ y
синтаксис для добавления y к x (в C оператор написан +=
). Этот синтаксис пришел из Дуглас Макилра «s реализации в TMG , в котором компилятор B был первым реализован (и он пришел к TMG из Алгола 68 » s x +:= y
синтаксис). [2] [4] Томпсон пошел дальше, изобретя операторы инкремента и декремента ( ++
и --
). Их положение префикса или постфикса определяет, будет ли значение принято до или после изменения операнда. Этого нововведения не было в самых ранних версиях B. По словам Денниса Ричи, люди часто предполагали, что они были созданы для режимов автоинкремента и автоматического уменьшения адреса DEC PDP-11, но это исторически невозможно, поскольку машина этого не делала. не существовало, когда B был впервые разработан. [2]
Версия цикла for с точкой с запятой была позаимствована Кеном Томпсоном из работы Стивена Джонсона . [5]
B не имеет типа, или, точнее, имеет один тип данных: компьютерное слово. Большинство операторов (например +
, -
, *
, /
) обрабатывают это как целое число, но другие относились к нему , как адрес памяти , чтобы быть разыменовываются . Во многих других отношениях это очень похоже на раннюю версию C. Есть несколько библиотечных функций, в том числе некоторые, которые отдаленно напоминают функции из стандартной библиотеки ввода-вывода в C. [3] По словам Томпсона: «B и старый старые C были очень похожими языками, за исключением всех типов [в C] ». [5]
Ранние реализации были для миникомпьютеров DEC PDP-7 и PDP-11, использующих раннюю версию Unix , и 36-битных мэйнфреймов Honeywell GE 645 [6], на которых работала операционная система GCOS . Самые ранние реализации PDP-7 компилировались в многопоточный код , и Ричи написал компилятор с использованием TMG, который создавал машинный код. [7] [8] [9] В 1970 году была приобретена PDP-11, и для порта использовался многопоточный код; ассемблер,Округ Колумбия, и сам язык B был написан на B для начальной загрузки компьютера. Ранняя версия yacc была произведена с этой конфигурацией PDP-11. В этот период Ричи взял на себя техническое обслуживание. [2] [9]
Бестиповая природа B имела смысл на Honeywell, PDP-7 и многих старых компьютерах, но была проблемой на PDP-11, потому что было трудно элегантно получить доступ к символьному типу данных, который полностью поддерживает PDP-11 и большинство современных компьютеров. . Начиная с 1971 года, Ритчи внес изменения в язык, преобразовывая свой компилятор для создания машинного кода, в первую очередь добавляя типизацию данных для переменных. В течение 1971 и 1972 годов B превратился в "New B" (NB), а затем в C. [2]
В почти исчезли, будучи заменены на языке Си . [10] Однако он продолжает использоваться на мэйнфреймах ГСНК (по состоянию на 2014 г.[Обновить]) [11] и на некоторых встроенных системах (по состоянию на 2000 г.[Обновить]) по целому ряду причин: ограниченное оборудование в небольших системах, обширные библиотеки, инструменты, проблемы с затратами на лицензирование и простое соответствие требованиям. [10] Очень влиятельный AberMUD изначально был написан на B.
Примеры
Следующие примеры взяты из ссылки пользователей на B Кена Томпсона: [3]
/ * Следующая функция выведет неотрицательное число n по основанию b, где 2 <= b <= 10. Эта процедура использует тот факт, что в наборе символов ASCII цифры от 0 до 9 имеют последовательные кодовые значения. * /printn ( п , б ) { 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,. . . * /Основной () { EXTRN putchar , п , v ; авто i , c , col , a ;я = столбец = 0 ; в то время как ( я < п ) v [ я ++ ] = 1 ; а ( столбец < 2 * п ) { а = п + 1 ; с = я = 0 ; в то время как ( я < п ) { с = + v [ я ] * 10 ; v [ i ++ ] = c % a ; с = / а - ; }путчар ( с + '0' ); если ( ! ( ++ col % 5 )) putchar ( col % 50 ? '' : ' * n ' ); } putchar ( ' * п * п ' ); } v [ 2000 ]; n 2000 ;
Смотрите также
Портал компьютерного программирования
Заметки
- ^ "Его название, скорее всего, представляет собой сокращение от BCPL, хотя альтернативная теория утверждает, что оно происходит от Бон [Томпсон 69], несвязанного языка, созданного Томпсоном во времена Multics. Бон, в свою очередь, был назван либо в честь его жены Бонни, либо ( согласно цитате из энциклопедии в ее руководстве), в честь религии , ритуалы которой включают в себя бормотание магических формул ». [2]
Рекомендации
- ^ «Б - язык программирования» .
- ^ Б с д е е г Ричи, Деннис М. (март 1993 г.). «Развитие языка Си» . Уведомления ACM SIGPLAN . 28 (3): 201–208. DOI : 10.1145 / 155360.155580 .
- ^ а б в г Томпсон, Кен (7 января 1972 г.). «Ссылка пользователей на B» (PDF) . Bell Laboratories. Архивировано 17 марта 2015 года из оригинального (PDF) . Проверено 21 марта 2014 года .
- ^ Майкл С. Махони (18 августа 1989 г.). «Интервью с доктором медицины Макилроем» . Princeton.edu . Мюррей Хилл.
- ^ а б Кен Томпсон. «VCF East 2019 - Брайан Керниган берет интервью у Кена Томпсона» . Проверено 16 ноября 2020 .
Я видел версию цикла for с точкой с запятой Джонсона и вставил ее в [B], я ее украл.
- ^ Ричи, Деннис М. (1984). «Эволюция системы разделения времени Unix» . Технический журнал AT&T Bell Laboratories . 63 (6, часть 2): 1577–1593. Архивировано из оригинала 11 июня 2015 года.
- ^ «TMG» . multicans.org.
- ^ Ричи, Деннис М. «Развитие языка Си» . Bell Labs / Lucent Technologies. Архивировано из оригинала 11 июня 2015 года.
- ^ а б Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (технический отчет). CSTR. Bell Labs. 139.
- ^ а б Джонсон и Керниган . «ЯЗЫК ПРОГРАММИРОВАНИЯ B» . Bell Laboratories. Архивировано из оригинала 11 июня 2015 года . Проверено 21 марта 2014 года .
- ^ «Пакет инструментов Thinkage UW» . Мыслить, ООО . Проверено 26 марта 2014 года .
Внешние ссылки
- Страница руководства для b (1) из Unix First Edition
- Развитие языка Си , Деннис М. Ричи . Оферты В в контексте BCPL и C .
- Ссылка пользователей на B , Ken Thompson. Описываетверсию PDP-11 .
- Язык программирования B , SC Johnson & BW Kernighan, Технический отчет CS TR 8, Bell Labs (январь 1973 г.). Версия GCOS наоборудовании Honeywell .
- B Справочное руководство по языку, Thinkage Ltd. Производственная версия языка, используемого в GCOS, включая язык и библиотеку времени выполнения.