B (linguagem de programação)
B é uma linguagem de programação desenvolvida no Bell Labs por volta de 1969 por Ken Thompson e Dennis Ritchie.
B foi derivado de BCPL, e seu nome pode possivelmente ser uma contração de BCPL. O colega de trabalho de Thompson, Dennis Ritchie, especulou que o nome pode ser baseado em Bon, uma linguagem de programação anterior, mas não relacionada, que Thompson projetou para uso em Multics.
B foi projetado para aplicativos recursivos, não numéricos e independentes de máquina, como software de sistema e linguagem. Era uma linguagem sem tipo, com o único tipo de dados sendo o formato de palavra de memória natural da máquina subjacente, qualquer que seja. Dependendo do contexto, a palavra era tratada como um número inteiro ou um endereço de memória.
À medida que as máquinas com processamento ASCII se tornaram comuns, principalmente o DEC PDP-11 que chegou à Bell, o suporte para dados de caracteres inseridos em palavras de memória tornou-se importante. A natureza sem tipo da linguagem foi vista como uma desvantagem, o que levou Thompson e Ritchie a desenvolver uma versão expandida da linguagem suportando novos tipos internos e definidos pelo usuário, que se tornou a linguagem de programação C.
História
semântica BCPL com muita sintaxe SMALGOL
—Ken Thompson.
Por volta de 1969, Ken Thompson e mais tarde Dennis Ritchie desenvolveram o B baseando-se principalmente na linguagem BCPL que Thompson usou no projeto Multics. B era essencialmente o sistema BCPL despojado de qualquer componente que Thompson achava que poderia prescindir para caber na capacidade de memória dos minicomputadores da época. A transição de BCPL para B também incluiu alterações feitas para atender às preferências de Thompson (principalmente na linha de redução do número de caracteres que não são espaços em branco em um programa típico). Grande parte da sintaxe típica do tipo ALGOL do BCPL foi bastante alterada nesse processo. O operador de atribuição :=
reverteu para o =
do Superplan de Rutishauser e o operador de igualdade =
foi substituído por = =
.
Thompson adicionou "operadores de atribuição de dois endereços" usando a sintaxe x =+ y
para adicionar y a x (em C o operador é escrito +=
). Essa sintaxe veio da implementação de TMG de Douglas McIlroy, na qual o compilador de B foi implementado pela primeira vez (e veio para TMG de x +:= y
de ALGOL 68 sintaxe). Thompson foi além ao inventar os operadores de incremento e decremento (++
e --
). Sua posição de prefixo ou pós-fixo determina se o valor é obtido antes ou depois da alteração do operando. Essa inovação não estava nas primeiras versões do B. De acordo com Dennis Ritchie, as pessoas frequentemente presumiam que eles foram criados para os modos de endereço de incremento e decremento automáticos do DEC PDP-11, mas isso é historicamente impossível, pois a máquina não funcionava. #39;t existiam quando B foi desenvolvido pela primeira vez.
A versão de ponto e vírgula do loop for foi emprestada por Ken Thompson do trabalho de Stephen Johnson.
B não tem tipo, ou mais precisamente tem um tipo de dados: a palavra do computador. A maioria dos operadores (por exemplo, +
, -
, *
, /
) tratou isso como um número inteiro, mas outros o trataram como um endereço de memória a ser desreferenciado. De muitas outras maneiras, parecia muito com uma versão inicial de C. Existem algumas funções de biblioteca, incluindo algumas que se assemelham vagamente a funções da biblioteca de E/S padrão em C.
Nas palavras de Thompson: "B e o antigo C eram linguagens muito semelhantes, exceto para todos os tipos [em C]".
As primeiras implementações foram para minicomputadores DEC PDP-7 e PDP-11 usando Unix antigo e mainframes Honeywell GE 645 de 36 bits executando o sistema operacional GCOS. As primeiras implementações do PDP-7 compiladas em código encadeado, e Ritchie escreveu um compilador usando TMG que produzia código de máquina. Em 1970, um PDP-11 foi adquirido e o código encadeado foi usado para a porta; um montador, dc, e a própria linguagem B foram escritos em B para inicializar o computador. Uma versão inicial do yacc foi produzida com esta configuração PDP-11. Ritchie assumiu a manutenção durante este período.
A natureza sem tipo de B fazia sentido no Honeywell, PDP-7 e em muitos computadores mais antigos, mas era um problema no PDP-11 porque era difícil acessar elegantemente o tipo de dados de caractere que o PDP-11 e os mais modernos os computadores suportam totalmente. A partir de 1971, Ritchie fez alterações na linguagem enquanto convertia seu compilador para produzir código de máquina, principalmente adicionando tipos de dados para variáveis. Durante 1971 e 1972 B evoluiu para "New B" (NB) e depois C.
A linguagem B está quase extinta, tendo sido substituída pela linguagem C. No entanto, continua a ser usado em mainframes GCOS (a partir de 2014) e em certos sistemas embarcados (a partir de 2000) por vários motivos: hardware limitado em sistemas pequenos, bibliotecas extensas, ferramentas, questões de custo de licenciamento e simplesmente ser bom o suficiente para o trabalho. O altamente influente AberMUD foi originalmente escrito em B.
Exemplos
Os exemplos a seguir são da seção Usuários' Referência a B de Ken Thompson:
Não. A seguinte função imprimirá um número não negativo, n, a base b, onde 2<=b<=10. Esta rotina usa o fato de que no conjunto de caracteres ASCII, os dígitos 0 a 9 têm sequencial valores de código. *Impressão(n, b)) ( extinto pousar; auto auto um; /* Nota da Wikipédia: a palavra-chave auto declara uma variável com armazenamento automático (o tempo de vida é o escopo da função), não "Tipo automático" como em C++11. * se (um = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = n / b)) /* atribuição, não teste para a igualdade */ Impressão(um, b)); /* recursivo */ pousar(n % b) + '0');?
Não. O seguinte programa irá calcular a constante e-2 para cerca 4000 dígitos decimais, e imprimi-lo 50 caracteres para a linha em grupos de 5 caracteres. O método é conversão de saída simples da expansão 1/2! + 1/3! +... =.111.... onde as bases dos dígitos são 2, 3, 4,... */principal() (extinto pousar, n, v;auto auto Eu..., c, Col., um;Eu... = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Col. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 0;enquanto(Eu...<n)vNão.Eu...++] = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 1;enquanto(Col.<2*n) (um = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = n+1;c = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Eu... = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 0;enquanto (Eu...<n) (c - Sim. vNão.Eu...] *10.;vNão.Eu...++] = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = c%um;c = um-...;?pousar(c+'0');se(!(++Col.%5)pousar(Col.%50?': '*n');?pousar('*n*n');?vNão.2000]n 2000;
Contenido relacionado
Ada (linguagem de programação)
Computador Atanasoff-Berry
Sistema de nomes de domínio