WikiDer > B (язык программирования)
Разработано | Кен Томпсон |
---|---|
Разработчик | Кен Томпсон, Деннис Ричи |
Впервые появился | 1969[1] |
Печатная дисциплина | бестиповый (все слово) |
Расширения имени файла | .b |
Под влиянием | |
BCPL, PL / I, TMG | |
Под влиянием | |
C |
B это язык программирования, разработанный в Bell Labs около 1969 года. Это работа Кен Томпсон с Деннис Ричи.
B был получен из BCPL, и его название может быть сокращением от BCPL. Коллега Томпсона Деннис Ричи предположил, что имя могло быть основано на Bon, более раннем, но не связанном с ним языке программирования, который Томпсон разработал для использования на Мультики.[примечание 1]
B был разработан для рекурсивных, нечисловых, машинно-независимых приложений, таких как системное и языковое программное обеспечение.[3] Это был безтиповый язык, с единственным типом данных, естественным слово памяти формат, каким бы он ни был. В зависимости от контекста слово трактовалось либо как целое число или адрес памяти.
Поскольку машины с ASCII обработка стала обычным явлением, особенно DEC PDP-11 с появлением в Bell поддержки символьных данных, содержащихся в словах памяти, стало важным. Бестиповая природа языка рассматривалась как недостаток, что побудило Томпсона и Ричи разработать расширенную версию языка, поддерживающую новые внутренние и определяемые пользователем типы, которые стали Язык программирования C.
История
Около 1969, Кен Томпсон[2] а позже Деннис Ричи[3] разработал B, основываясь в основном на BCPL язык, который Томпсон использовал в Мультики проект. По сути, B была системой BCPL, лишенной каких-либо компонентов, без которых, по мнению Томпсона, он мог обойтись, чтобы она соответствовала объему памяти мини-компьютеров того времени. Переход с BCPL на B также включал изменения, сделанные в соответствии с предпочтениями Томпсона (в основном, в направлении уменьшения количества непробельных символов в типичной программе).[2] Многое из типичного АЛГОЛ-подобный синтаксис BCPL был довольно сильно изменен в этом процессе. Оператор присваивания :=
изменился на =
и оператор равенства =
был заменен ==
.
Томпсон добавил «операторы двухадресного присваивания», используя х = + у
синтаксис для добавления y к x (в C оператор написан +=
). Этот синтаксис пришел из Дуглас Макилройреализация TMG, в котором впервые был реализован компилятор B (а в TMG он появился из АЛГОЛ 68с х +: = у
синтаксис).[2][4] Томпсон пошел дальше, изобретя операторы инкремента и декремента (++
и --
). Их положение префикса или постфикса определяет, будет ли значение принято до или после изменения операнда. Этого нововведения не было в самых ранних версиях B. По словам Денниса Ричи, люди часто предполагали, что они были созданы для режимов автоматического увеличения и автоматического уменьшения адреса DEC PDP-11, но это исторически невозможно, поскольку машина этого не делала. не существовало, когда B был впервые разработан.[2]
Версия с точкой с запятой для цикла был заимствован Кеном Томпсоном из работы Стивен Джонсон.[5]
B не имеет типа или, точнее, имеет один тип данных: компьютерное слово. Большинство операторов (например, +
, -
, *
, /
) рассматривали это как целое число, но другие рассматривали его как адрес памяти, который разыменованный. Во многих других отношениях он очень напоминал раннюю версию C. Есть несколько библиотечных функций, в том числе некоторые, которые отдаленно напоминают функции из стандартная библиотека ввода / вывода в C.[3] По словам Томпсона: «B и старый старый C были очень похожими языками, за исключением всех типов [в C]».[5]
Ранние реализации были для DEC PDP-7 и PDP-11 миникомпьютеры, использующие ранние Unix, и Honeywell GE 645[6] 36-битные мэйнфреймы под управлением операционной системы ГСНК. Самые ранние реализации 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]
B почти вымер, будучи вытеснен Язык C.[10] Тем не менее, он продолжает использоваться на ГСНК мэйнфреймы (по состоянию на 2014 г.[Обновить])[11] и на некоторых встроенные системы (по состоянию на 2000 г.[Обновить]) по целому ряду причин: ограниченное оборудование в небольших системах, обширные библиотеки, инструменты, проблемы с затратами на лицензирование и простое соответствие требованиям.[10] Очень влиятельный АберМУД изначально был написан в Б.
Примеры
Следующие примеры взяты из Ссылка пользователей на B Кен Томпсон:[3]
/ * Следующая функция напечатает неотрицательное число n, чтобы база b, где 2 <= b <= 10. Эта процедура использует тот факт, что в наборе символов ASCII цифры от 0 до 9 имеют последовательные кодовые значения. * /printn(п, б) { внешний путчар; авто а; / * Примечание из Википедии: auto объявляет переменную с автоматическим хранилище (время жизни - это объем функции), а не «автоматический ввод» как в C ++. * / если (а = п / б) / * присваивание, а не проверка на равенство * / printn(а, б); / * рекурсивный * / путчар(п % б + '0');}
/ * Следующая программа вычислит константу e-2 примерно до 4000 десятичных цифр и выведите 50 символов в строку в группы по 5 знаков. Метод простого преобразования вывода расширения 1/2! + 1/3! + ... = .111.... где основания цифр 2, 3, 4,. . . * /главный() { внешний путчар, п, v; авто я, c, Col, а; я = Col = 0; пока(я<п) v[я++] = 1; пока(Col<2*п) { а = п+1 ; c = я = 0; пока (я<п) { c =+ v[я] *10; v[я++] = c%а; c =/ а--; } путчар(c+'0'); если(!(++Col%5)) путчар(Col%50?' ': '*п'); } путчар('*п*п');}v[2000];п 2000;
Смотрите также
Портал компьютерного программирования
Примечания
- ^ «Его название, скорее всего, представляет собой сокращение от BCPL, хотя альтернативная теория утверждает, что оно происходит от Bon [Thompson 69], несвязанного языка, созданного Томпсоном во времена Multics. Бон, в свою очередь, был назван либо в честь его жены Бонни, либо (согласно к цитате из энциклопедии в ее руководстве), после религия чьи ритуалы включают в себя бормотание магических формул ".[2]
Рекомендации
- ^ «Б - язык программирования».
- ^ а б c d е ж грамм Ричи, Деннис М. (Март 1993 г.). «Развитие языка Си». Уведомления ACM SIGPLAN. 28 (3): 201–208. Дои:10.1145/155360.155580.
- ^ а б c d Томпсон, Кен (7 января 1972 г.). «Ссылка пользователей на B» (PDF). Bell Laboratories. Архивировано из оригинал (PDF) 17 марта 2015 г.. Получено 21 марта 2014.
- ^ Майкл С. Махони (18 августа 1989 г.). "Интервью с М.Д. Макилроем". Princeton.edu. Мюррей Хилл.
- ^ а б Кен Томпсон. «VCF East 2019 - Брайан Керниган берет интервью у Кена Томпсона». Получено 2020-11-16.
Я видел версию цикла for с точкой с запятой Джонсона и вставил ее в [B], я ее украл.
- ^ Ричи, Деннис М. (1984). «Эволюция системы разделения времени Unix». Технический журнал AT&T Bell Laboratories. 63 (6 часть 2): 1577–1593. Архивировано из оригинал 11 июня 2015 г.
- ^ «TMG». multician.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
- Развитие языка C, Деннис М. Ричи. Помещает B в контекст BCPL и C.
- Ссылка пользователей на B, Кен Томпсон. Описывает PDP-11 версия.
- Язык программирования B, С. К. Джонсон и Б. В. Керниган, Технический отчет CS TR 8, Bell Labs (Январь 1973 г.). В ГСНК версия на Honeywell оборудование.
- Справочное руководство по языку B, Thinkage Ltd. Производственная версия языка, используемого в GCOS, включая язык и библиотеку времени выполнения.