B (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.
Saltar para a navegação Saltar para a pesquisa
B
Paradigma imperativo
Surgido em 1969
Criado por Ken Thompson[1] e Dennis Ritchie[1]
Influenciada por BCPL
Influenciou C

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.

A linguagem foi projetada para ser recursiva, não-numérica e de aplicação independente da máquina.[2]

História[editar | editar código-fonte]

Ken Thompson e Dennis M. Ritchie, criadores da linguagem B

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 bits Honeywell executando o sistema GCOS.

Evolução[editar | editar código-fonte]

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.

O AberMUD, de muita influência, foi escrito em B.

Nome[editar | editar código-fonte]

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]

Exemplos[editar | editar código-fonte]

Um 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~cA+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[editar | editar código-fonte]

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.

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[editar | editar código-fonte]

Referências

  1. 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. 
  2. Thompson, Ken (7 de janeiro de 1972). «Users' Reference to B». Bell Laboratories. Consultado em 26 de junho de 2014 

Ligações externas[editar | editar código-fonte]

Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.