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

Из Википедии, бесплатной энциклопедии
Б
Разработано Кен Томпсон
Разработчик Кен Томпсон , Деннис Ритчи
Впервые появился 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]

Язык B почти вымер, его вытеснил C. язык [11] Однако его продолжают использовать на ГСНК (по состоянию на 2014 г. мейнфреймах ) [12] и в некоторых встроенных системах (по состоянию на 2000 г. ) по разным причинам: ограниченное аппаратное обеспечение в небольших системах, обширные библиотеки, инструменты, проблемы со стоимостью лицензирования и просто достаточная эффективность для работы. [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 г  .; 

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

  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 — Брайан Керниган берет интервью у Кена Томпсона» . YouTube . Архивировано из оригинала 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 г.

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