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

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:49, 22 мая 2016.
B
Парадигма процедурный
Спроектировано Кен Томпсон, Денис Ритчи: 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');
}

Ссылки

  1. http://man.cat-v.org/unix-1st/1/b
  2. https://www.bell-labs.com/usr/dmr/www/chist.html
  3. https://www.bell-labs.com/usr/dmr/www/kbman.html
  4. https://www.bell-labs.com/usr/dmr/www/bintro.html