B
e uma
linguagem de programacao
que pertence ao
paradigma imperativo
e que foi desenvolvida no
Bell Laboratories
de
1969
. Apesar de ja ter se tornado obsoleta, foi a predecessora da
linguagem de programacao C
, que ate hoje e uma das mais populares. Foi majoritariamente um trabalho de
Ken Thompson
com contribuicoes de
Dennis Ritchie
, projetada e implementada na cidade de
Murray Hill
, nos
Estados Unidos
.
A linguagem foi projetada para ser
recursiva
, nao-numerica e de aplicacao independente da maquina.
[
2
]
B
foi essencialmente uma simplificacao da linguagem
BCPL
(
Basic Combined Programming Language)
, quitando qualquer componente que Thompson considerasse prescindivel de modo a caber na
memoria
dos
microcomputadores
da epoca. Tambem se realizaram algumas mudancas segundo as preferencias de Thompson (a maioria das quais eram para reduzir o numero de
caracteres
em um programa tipico).
Como BCPL, B so tinha um
tipo de dado
, que correspondia com uma
palavra de maquina
. A maioria dos
operadores
o manipulavam como um
inteiro
; por exemplo
+
(adicao),
-
(subtraccao),
*
(multiplicacao) ou
/
(divisao). O sistema de tipos empregado em B se caracteriza por tipagem fraca, dinamica e tambem implicita.
Outros operadores o manipulavam como um
endereco de memoria
ao qual faziam referencia: um
Ponteiro
. B oferecia operadores que permitiam obter o endereco duma determinada variavel, ou escrever no endereco apontado por uma variavel apontadora ou ponteiro.
As primeiras implementacoes foram para os minicomputadores
PDP-7
e
PDP-11
executando versoes antigas do
UNIX
; e para os
mainframes
de 36
bits
Honeywell
executando o sistema
GCOS
.
A natureza
sem tipos
? isto e, com um so tipo correspondente a palavra de maquina ? de B tinha sentido no Honeywell, no PDP-7 e noutros computadores antigos, mas foi um problema no PDP-11 ja que era dificil aceder a caracteres individuais, um novo tipo de dado que ofertava o PDP-11 assim como a maioria dos computadores modernos.
Comecando no
1971
, Ritchie fez mudancas a linguagem ao mesmo tempo que convertia o seu
compilador
para produzir
linguagem de maquina
de forma nativa. A mais notavel foi a adicao de tipos de dado diferentes para as variaveis. A linguagem B foi implementada no PDP-11, que foi uma maquina da DEC usada para fazer o primeiro arcade operado por moedas, com o Jogo Galaxy.
Predefinicao:Citacao requerida
Durante
1971
e
1972
, B evoluiu primeiro em
Novo B
(
New B
,
NB
) e depois em
C
. Mais tarde, comecando
1973
, foi adicionado um
pre-processador
, a pedido de
Alan Snyder
. O esforco foi o suficiente neste ano como para que durante o verao o
nucleo
do UNIX para o PDP-11 fosse reescrito em
C
.
Durante o periodo 1972-1973 foi preciso porta-lo ao
Honeywell 635
e ao
IBM 360
/370, razao pela qual
Mike Lesk
escreveu o
pacote de
entrada/saida
portavel
que se trocaria na conhecida
E/S padrao
(
standard I/O
ou
stdio
) da linguagem C.
B seguiu-se a utilizar ate os
anos 1990
nos mainframes Honeywell e em certos
sistemas embarcados
por uma variedade de razoes, 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 influencia, foi escrito em B.
B teve uma enorme influencia de BCPL, e o seu nome foi provavelmente uma contraccao de
BCPL
. Porem, e possivel que o seu nome baseara-se no da
linguagem de programacao Bon
, uma linguagem mais antiga e nao relacionada com B, desenhada por Thompson para usar-se no
MULTICS
.
[
1
]
Um exemplo simples, chamado de
programa Ola 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 numeros perfeitos, onde N e a entrada do usuario:
main
()
{
auto
n
,
num
,
soma
,
cont
;
num
=
0
;
cont
=
0
;
printf
(
"Digite um valor para N: *n*n"
);
n
=
getchar
();
printf
(
"
\n
Os 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
funcao
de exemplo foi extraida de
Users' Reference to B
, de Ken Thompson:
/* A seguinte funcao imprime um numero nao-negativo, n, na
base b, no qual 2<=b<=10. Esta rotina basea-se no facto
de que no jogo de caracteres ASCII, os digitos do 0 ao
9 tem valores de codigo sequenciais.
*/
printn
(
n
,
b
)
{
extrn
putchar
;
auto
a
;
if
(
a
=
n
/
b
)
/* atribuicao, nao comprovacao de igualdade */
printn
(
a
,
b
);
/* recursivo */
putchar
(
n
%
b
+
'0'
);
}
Funcao que substitui cada letra maiuscula de uma string de entrada s, por uma letra minuscula 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 funcao anterior para somar tres numeros imprimindo no ecra o resultado.
main
(
)
{
extrn
printn
;
auto
a
,
b
,
c
,
sum
;
a
=
1
;
b
=
2
;
c
=
3
;
sum
=
a
+
b
+
c
;
printn
(
sum
,
10
);
}
Algumas versoes do
Unix
possuem o compilador de B. Para compilar e executar um codigo 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
Referencias
- ↑
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
|
---|
Sistemas operacionais
| |
---|
Linguagens de programacao
| |
---|
Software
| |
---|
Outros
| |
---|