B (linguagem de programação)
B é uma linguagem de programação que pertence ao paradigma imperativo e que foi desenvolvida no Bell Laboratories de 1969. Apesar de já ter se tornado obsoleta, foi a predecessora da linguagem de programação C, que até hoje é uma das mais populares. Foi majoritariamente um trabalho de Ken Thompson com contribuições de Dennis Ritchie, projetada e implementada na cidade de Murray Hill, nos Estados Unidos.
B | |
---|---|
Paradigma | imperativo |
Surgido em | 1969 |
Criado por | Ken Thompson[1] e Dennis Ritchie[1] |
Influenciada por | BCPL |
Influenciou | C |
A linguagem foi projetada para ser recursiva, não-numérica e de aplicação independente da máquina.[2]
História
editarB 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 bits Honeywell executando o sistema GCOS.
Evolução
editarA 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.
O AberMUD, de muita influência, foi escrito em B.
Nome
editarB 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]
Exemplos
editarUm exemplo simples, chamado de programa Olá Mundo.
main( ) {
extrn a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
Ou, equivalente:
main() {
putchar('Hello, world!*n');
}
Programa que imprime os N primeiros números perfeitos, onde N é a entrada do usuário:
main()
{
auto n,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;
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;
}
}
}
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) {
extrn putchar;
auto a;
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.
lower(s) {
auto c,i;
i = 1;
while( (c=char(s,++i)) != ’*e’ )
if( c >= ’A’ & c <= ’Z’ ) lchar(s~i~c’A’+’a’);
}
Este programa de exemplo em B emprega a função anterior para somar três números imprimindo no ecrã o resultado.
main( ) {
extrn printn;
auto a, b, c, sum;
a = 1; b = 2; c = 3;
sum = a+b+c;
printn(sum,10);
}
Compilando
editarAlgumas 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.
SYSTEM? filsys cf bsource,b/1,100/ SYSTEM? filsys cf bhs,b/6,6/,m/r/ SYSTEM? ./bj (w) bsource bhs SYSTEM? /bhs
Ver também
editarReferências
- ↑ a b c Ritchie, 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.
- ↑ Thompson, Ken (7 de janeiro de 1972). «Users' Reference to B». Bell Laboratories. Consultado em 26 de junho de 2014
Ligações externas
editar- The Development of the C Language, Dennis M. Ritchie. Põe B no contexto de BCPL e C.
- Users' Reference to B, Ken Thompson. Descreve a versão para o PDP-11.
- The Programming Language B, S. C. Johnson & B. W. Kernighan, Technical Report CS TR 8, Bell Labs (Enero 1973). Descreve a versão para o GCOS.
- The A Tutorial Introduction to The Language B, B. W. Kernighan. Um ótimo tutorial feito por Kernighan.