A linguagem foi projetada para ser recursiva, não-numérica e de aplicação independente da máquina.[2]
História
B foi essencialmente uma simplificação da linguagem BCPL (Basic Combined Programming Language), quitando qualquer componente que Thompson considerasse prescindível de modo a caber na memória dos microcomputadores da época. Também se realizaram algumas mudanças segundo as preferências de Thompson (a maioria das quais eram para reduzir o número de caracteres em um programa típico).
Como BCPL, B só tinha um tipo de dado, que correspondia com uma palavra de máquina. A maioria dos operadores o manipulavam como um inteiro; por exemplo + (adição), - (subtracção), * (multiplicação) ou / (divisão). O sistema de tipos empregado em B se caracteriza por tipagem fraca, dinâmica e também implícita.
Outros operadores o manipulavam como um endereço de memória ao qual faziam referência: um Ponteiro. B oferecia operadores que permitiam obter o endereço duma determinada variável, ou escrever no endereço apontado por uma variável apontadora ou ponteiro.
As primeiras implementações foram para os minicomputadores PDP-7 e PDP-11 executando versões antigas do UNIX; e para os mainframes de 36 bitsHoneywell executando o sistema GCOS.
Evolução
A natureza sem tipos — isto é, com um só tipo correspondente à palavra de máquina — de B tinha sentido no Honeywell, no PDP-7 e noutros computadores antigos, mas foi um problema no PDP-11 já que era difícil aceder a caracteres individuais, um novo tipo de dado que ofertava o PDP-11 assim como a maioria dos computadores modernos.
Começando no 1971, Ritchie fez mudanças à linguagem ao mesmo tempo que convertia o seu compilador para produzir linguagem de máquina de forma nativa. A mais notável foi a adição de tipos de dado diferentes para as variáveis. A linguagem B foi implementada no PDP-11, que foi uma máquina da DEC usada para fazer o primeiro arcade operado por moedas, com o Jogo Galaxy.Predefinição:Citação requerida
Durante 1971 e 1972, B evoluiu primeiro em Novo B (New B, NB) e depois em C. Mais tarde, começando 1973, foi adicionado um pré-processador, a pedido de Alan Snyder. O esforço foi o suficiente neste ano como para que durante o verão o núcleo do UNIX para o PDP-11 fosse reescrito em C.
Durante o período 1972-1973 foi preciso portá-lo ao Honeywell 635 e ao IBM 360/370, razão pela qual Mike Lesk escreveu o pacote de entrada/saída portável que se trocaria na conhecida E/S padrão (standard I/O ou stdio) da linguagem C.
B seguiu-se a utilizar até os anos 1990 nos mainframes Honeywell e em certos sistemas embarcados por uma variedade de razões, incluindo o uso de hardware limitado nesses sistemas; bibliotecas, ferramentas, problemas de custos excessivos; ou simplesmente porque era o suficientemente bom como para fazer o trabalho.
B teve uma enorme influência de BCPL, e o seu nome foi provavelmente uma contracção de BCPL. Porém, é possível que o seu nome baseara-se no da linguagem de programação Bon, uma linguagem mais antiga e não relacionada com B, desenhada por Thompson para usar-se no Multics.[1]
Programa que imprime os N primeiros números perfeitos, onde N é a entrada do usuário:
main(){auton,num,soma,cont;num=0;cont=0;printf("Digite um valor para N: *n*n");n=getchar();printf("\nOs primeiros numeros perfeitos sao:\n");while(cont!=n);{num=num+1;soma=0;autoi=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;}}}
A seguinte função de exemplo foi extraída de Users' Reference to B, de Ken Thompson:
/* A seguinte função imprime um número não-negativo, n, na base b, no qual 2<=b<=10. Esta rotina basea-se no facto de que no jogo de caracteres ASCII, os dígitos do 0 ao 9 têm valores de código sequenciais. */printn(n,b){extrnputchar;autoa;if(a=n/b)/* atribuição, não comprovação de igualdade */printn(a,b);/* recursivo */putchar(n%b+'0');}
Função que substitui cada letra maiúscula de uma string de entrada s, por uma letra minúscula correspondente.
Algumas versões do Unix possuem o compilador de B. Para compilar e executar um código B, basta digitar estes comandos no shell, desde que, claro, seu sistema operacional possua o compilador.
↑ abcRitchie, Dennis M. (Maio de 1993). «The Development of the C Language». ACM SIGPLAN Notices. 28 (3): 201–208. doi:10.1145/155360.155580. Its name most probably represents a contraction of BCPL, though an alternate theory holds that it derives from Bon [Thompson 69], an unrelated language created by Thompson during the Multics days. Bon in turn was named either after his wife Bonnie, or (according to an encyclopedia quotation in its manual), after a religion whose rituals involve the murmuring of magic formulas.