Llenguatge B

Infotaula de llenguatge de programacióB
Tipusllenguatge de programació i llenguatge de programació procedural Modifica el valor a Wikidata
Data de creació~1969
DissenyKen Thompson Modifica el valor a Wikidata
DesenvolupadorKenneth L. Thompson, Dennis M. Ritchie
Paradigma de programacióprogramació procedimental Modifica el valor a Wikidata
Tipus de dadessense tipus (tot és considerat una paraula)
Majors implementacionsmúltiples
Influenciat perBCPL, PL/I
Ha influenciatC
Sistema operatiumultiplataforma
Extensió dels fitxers.b

B és el nom d'un llenguatge de programació desenvolupat als Laboratoris Bell l'any 1969 i es considera el predecessor del llenguatge de programació C. Fou majoritàriament desenvolupat per Ken Thompson amb contribucions de Dennis Ritchie.[1]

Història

El llenguatge B és essencialment una simplificació del llenguatge BCPL, eliminant qualsevol component que Thompson considerés prescindible per tal de fer-lo caber en la memòria de les minicomputadores de l'època. El llenguatge també va incloure alguns canvis d'acord amb les preferències de Thompson (la majoria per a reduir el nombre de caràcters d'un programa típic).

Igual que BCPL, B només tenia un tipus de dades, que corresponia amb una paraula de màquina. La majoria d'operadors ho consideraven com un enter; per exemple + (suma), - (resta), * (multiplicació) o / (divisió). Altres operadors tractaven la paraula de màquina com una adreça de memòria a la qual fer referència: un punter. B oferia operadors que permetien obtenir la direcció d'una determinada variable, o escriure en la direcció apuntada per una variable punter.

Les primeres implementacions foren per a les minicomputadores PDP-7 i PDP-11 executant versions antigues de UNIX; i per als mainframes de 36 bits Honeywell Bull executant el sistema GCOS.

Evolució

La naturalesa sense tipus de B tenia sentit en el Honeywell, en la PDP-7 i molts altres ordenadors antics, però fou un problema en la PDP-11 perquè era difícil accedir a tipus de caràcters de dades que la PDP-11 i la majoria d'ordinadors moderns suportaven. A principi del 1971, Ritchie va fer canvis al llenguatge al mateix temps que convertia el seu compilador per a produir llenguatge màquina nadiu. El més notable d'aquests canvis fou l'addicció de tipus de dades diferents per a les variables.

Durant el 1971 i 1972 el llenguatge B evolucionà primer en «Nou B» (New B, NB) i després en C. Més tard, a principi de 1973, va ser afegit un preprocessador a petició d'Alan Snyder. L'esforç va ser suficientement complet en aquest any com perquè durant l'estiu el nucli del sistema UNIX per a la PDP-11 fos reescrit en C.

Durant el període 1972-1973 va haver la necessitat de portar-lo al Honeywell 635 i a l'IBM 360/370, de manera que Mike Lesk va escriure el "paquet d'E/S portable" que es convertiria en l'"E/S estàndard" (standard I/O o stdio) del llenguatge C.

El llenguatge B es va continuar utilitzant fins als anys 90 en els mainframes Honeywell i en altres sistemes per una varietat de raons, incloent-hi l'ús de maquinari limitat en aquests sistemes; llibreries extensives, eines; o simplement perquè era prou bo com per a fer el treball.

L'enormement influent AberMUD fou escrit en B.

Nom

B fou enormement influenciat per BCPL, i el seu nom fou probablement una contracció de "BCPL". Encara que és possible que el seu nom s'hagués basat en el llenguatge de programació Bon, un llenguatge més antic i no relacionat amb B, dissenyat per Thompson per al seu ús en Multics.

Exemples

La següent funció d'exemple està presa de l'Users' Reference to B per Ken Thompson:

/* La següent funció imprimeix un número no-negatiu, n, en
 base b, on 2<=b<=10. Aquesta rutina utilitza el fet
 que en el joc de caràcters ANSCII, els digits 0 a 9
 tenen valors de codi sequencials.
 */

printn(n,b) {
 extrn putchar;
 auto a;

 if(a=n/b) /* assignació, no comprovació d'igualtat */
 printn(a, b); /* recursiu */
 putchar(n%b + '0');
}

Aquest programa d'exemple en B utilitza la funció anterior per a sumar tres números imprimint per pantalla el resultat.

main() {
 extrn printn;
 auto a, b, c, sum;

 a = 1; b = 2; c = 3;
 sum = a+b+c;
 printn(sum,10);
}

Referències

  1. Ritchie, Dennis M. «The Development of the C Language». ACM SIGPLAN Notices, 28, 3, 3-1993, pàg. 201–208. Arxivat de l'original el 2013-06-22. DOI: 10.1145/155360.155580 [Consulta: 17 novembre 2006]. Arxivat 2015-03-28 a Wayback Machine.

Enllaços externs