b'\n_START_ARTICLE_\nB (lenguaje de programaci\xc3\xb3n)\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\nB fue esencialmente una simplificaci\xc3\xb3n del lenguaje BCPL, eliminando cualquier componente que Thompson considerase prescindible de forma que cupiese en la memoria de las minicomputadoras de la \xc3\xa9poca._NEWLINE_El lenguaje tambi\xc3\xa9n incluy\xc3\xb3 algunos cambios de acuerdo con las preferencias de Thompson (la mayor\xc3\xada para reducir el n\xc3\xbamero de caracteres de un programa t\xc3\xadpico)._NEWLINE_Al igual que BCPL, y FORTH, B s\xc3\xb3lo ten\xc3\xada un tipo de datos, que correspond\xc3\xada con una palabra de m\xc3\xa1quina. La mayor\xc3\xada de operadores lo manejaban como un entero; por ejemplo + (suma), - (resta), * (multiplicaci\xc3\xb3n) o / (divisi\xc3\xb3n)._NEWLINE_Otros operadores lo trataban como una direcci\xc3\xb3n de memoria a la que hacer referencia: un puntero._NEWLINE_B ofrec\xc3\xada operadores que permit\xc3\xadan obtener la direcci\xc3\xb3n de una determinada variable, o escribir en la direcci\xc3\xb3n apuntada por una variable puntero._NEWLINE_Las primeras implementaciones fueron para las minicomputadoras PDP-7 y PDP-11 ejecutando versiones antiguas de UNIX; y para los mainframes de 36 bits Honeywell ejecutando el sistema GCOS.\n_START_SECTION_\nEvoluci\xc3\xb3n\n_START_PARAGRAPH_\nLa naturaleza sin tipos de B ten\xc3\xada sentido en el Honeywell, en la PDP-7 y muchas otras computadoras antiguas, pero fue un problema en la PDP-11 porque era dif\xc3\xadcil acceder a tipos de caracteres de datos que la PDP-11 y la mayor\xc3\xada de computadoras modernas soportaban. Comenzando en 1971, Ritchie hizo cambios al lenguaje al mismo tiempo que convert\xc3\xada su compilador para producir lenguaje de m\xc3\xa1quina nativo._NEWLINE_El m\xc3\xa1s notable fue la adici\xc3\xb3n de tipos de datos diferentes para las variables._NEWLINE_Durante 1971 y 1972 B evolucion\xc3\xb3 primero en "Nuevo B" (New B, NB) y despu\xc3\xa9s en C. M\xc3\xa1s tarde, a principios de 1973, fue a\xc3\xb1adido un preprocesador a petici\xc3\xb3n de Alan Snyder._NEWLINE_El esfuerzo fue lo suficientemente completo en este a\xc3\xb1o como para que durante el verano el n\xc3\xbacleo del sistema UNIX para la PDP-11 fuese reescrito en C._NEWLINE_Durante el periodo 1972-1973 hubo la necesidad de portarlo al Honeywell 635 y al IBM 360/370, por lo que Mike Lesk escribi\xc3\xb3 el "paquete de E/S portable" que se convertir\xc3\xada en la "E/S est\xc3\xa1ndar" (standard I/O o stdio) del lenguaje C._NEWLINE_B se continu\xc3\xb3 utilizando hasta los a\xc3\xb1os 90 en los mainframes Honeywell y en ciertos sistemas embebidos por una variedad de razones, incluyendo el uso de hardware limitado en estos sistemas; librer\xc3\xadas extensivas, herramientas; o simplemente porque era lo suficientemente bueno como para hacer el trabajo.\n_START_SECTION_\nNombre\n_START_PARAGRAPH_\nB fue enormemente influido por BCPL, y su nombre fue probablemente una contracci\xc3\xb3n de "BCPL"._NEWLINE_Sin embargo es posible que su nombre se hubiera basado en el lenguaje de programaci\xc3\xb3n Bon, un lenguaje m\xc3\xa1s antiguo y no relacionado con B, dise\xc3\xb1ado por Thompson para su uso en MULTICS.\n_START_SECTION_\nEjemplos\n_START_PARAGRAPH_\nLa siguiente funci\xc3\xb3n de ejemplo est\xc3\xa1 tomada del Users\' Reference to B por Ken Thompson:_NEWLINE_/* La siguiente funci\xc3\xb3n imprime un n\xc3\xbamero no negativo, n, en   base b, donde 2<=b<=10. Esta rutina utiliza el hecho de   que en el juego de caracteres ASCII, los digitos 0 a 9   tienen valores de c\xc3\xb3digo secuenciales. */printn(n,b) {_NEWLINE_        extern putchar;_NEWLINE_        auto a;_NEWLINE__NEWLINE_        if(a=n/b) /* asignaci\xc3\xb3n, no comprobaci\xc3\xb3n de igualdad */_NEWLINE_                printn(a, b); /* recursivo */_NEWLINE_        putchar(n%b + \'0\');}_NEWLINE_Este programa de ejemplo en B utiliza la funci\xc3\xb3n anterior para sumar tres n\xc3\xbameros imprimiendo por pantalla el resultado._NEWLINE_main( ) {_NEWLINE_  extern printn;_NEWLINE_  auto a, b, c, sum;_NEWLINE__NEWLINE_  a = 1; b = 2; c = 3;_NEWLINE_  sum = a+b+c;_NEWLINE_  printn(sum,10);}'