B (язык программирования)
Последнее изменение этой страницы: 02:49, 22 мая 2016.
Парадигма | процедурный |
---|---|
Спроектировано | Кен Томпсон, Денис Ритчи: Bell Labs |
Первый появившийся | 1969 |
Печать дисциплины | статическая |
Под влиянием | |
BCPL | |
Влияние | |
C |
B - язык программирования, разработанный в Bell Labs около 1969 Кеном Томпсоном с Деннисом Ритчи. B получен из BCPL, и его имя является сокращением BCPL. Коллега Томпсона Деннис Ритчи предположил, что название может быть основано на Bon, более ранний, но не связаный с ним, язык программирования, предназначенный Томпсоном для использования на Multics. B был разработан для рекурсивных, нечисловых, машинно-независимых приложений, таких как системы и языки программного обеспечения.
История
Первоначально Кен Томпсон , а затем Деннис Ритчи разрабатывали B, основываясь в основном на языке BCPL, используемого Томпсонрм в проекте Multics. Большая часть типичного синтаксиса BCPL был довольно сильно изменено в процессе разработки. Например, такие операторы, как : =
и =
,были заменены на =
для присваивания и ==
для теста равенства. Оператор присваивания вернулся к "=" из языка программирования Rutishauser в Superplan, который был под влиянием ALGOL 58 , который добавил двоеточие.
Томпсон изобрел арифметические операторы присваивания для B, используя х = + у
, чтобы добавить у к х (на языке программирования C оператор пишется, как + =
).В В также введены операторы инкремента и декремента ( ++
и --
); Их префикс или постфикс позиция определяет, принимается ли значение до или после изменения операнда. Эти нововведения не были в самых ранних версиях B.Предполагается, что они были созданы для автоматического увеличения и режимов автоматического декремента адрес DEC PDP-11. Но это исторически невозможно, так как не было никакого PDP-11 в то время, когда B был разработан.
B является бестиповым, точнее имеет один тип данных: компьютерное слово. Большинство операторов (например, +, -, *, /
) обрабатываются как целое число, но другие относились к нему, как к адресу памяти для разыменовывания. Во многих других отношениях это выглядело очень похоже на ранней версии C. Есть несколько библиотечных функций, в том числе те, которые отдаленно напоминают функции стандартного ввода / вывода библиотеки в С.
Бестиповой характер B имел смысл на Honeywell, PDP-7 и многих старых компьютерах, но была проблема на PDP-11, потому что было трудно элегантно получать доступ к типам символьных данных, которые PDP-11 и большинство современных компьютеров полностью поддерживали. Начиная с 1971 года Ритчи внес изменения в языке, которые преобразовали его в компилятор для создания машинного кода, в первую очередь, добавив ввод данных для переменных. В течение 1971 и 1972 B превратилась в "Новый B" (NB), а затем С.
B почти исчез, будучи вытеснен языком C. Тем не менее, он продолжает использоваться (по состоянию на 2014 г.) в мэйнфреймах GCOS, и на некоторых встраиваемых системах (по состоянию на 2000 г.) по целому ряду причин , в том числе ограниченных аппаратных средствах в небольших системах; обширные библиотеки, инструменты, вопросы, касающиеся затрат лицензирования; и просто быть достаточно хорош для работы. Очень влиятельный AberMUD был изначально написан на B.
Примеры
Ниже приведены два примера программ написанных на языке B.
main()
{
auto a, b, c, sum;
a = 1; b = 2; c = 3;
sum = a+b+c;
putnumb(sum);
}
main() {
auto c;
auto d;
d=0;
while(1) {
c=getchar();
d=d+c;
putchar(c);
}
}
Программа, которая печатает первые N совершенные числа, где N является пользовательский ввод:
main()
{
auto n,num,soma,cont; num = 0;
cont = 0;
printf( "Enter a value for N: *n*n");
n=getchar(); printf( "\nThe first perfect numbers are: \n");
while (cont != n);
{
num =num+1;
soma = 0;
auto i=1;
while(i <= num-1)
{
if( (num % i) == 0 )
{
soma =soma+ i;
}
i=i+1;
}
if ( soma == num )
{
printf("%d*n",soma);
cont =cont+1;
}
}
}
Другой пример:
/* 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;
if (a = n / b) /* assignment, not test for equality */
printn(a, b); /* recursive */
putchar(n % b + '0');
}
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.