Jerarqu�a del lenguaje de computaci�n

Para salvar la brecha que separa a sus dos lectores, o sea a la m�quina y al programador, el lenguaje de computaci�n est� ideado jer�rquicamente. Recu�rdese que la unidad procesadora central de una computadora responde a un conjunto de varios cientos de instrucciones, a las que se llama con toda propiedad lenguaje de la m�quina. En lo fundamental �ste es el �nico c�digo de mando que la computadora entiende, un c�digo que m�s o menos est� dentro de su equipo. Compuestos de unos y ceros como todo lo dem�s de la computadora, el lenguaje de la m�quina es extremadamente dificultoso. Si un programador quiere escribir una instrucci�n que agregue el contenido de una palabra de memoria a una segunda, debe entender, por ejemplo, al s�mbolo de ocho d�gitos de esta instrucci�n de adici�n en una tabla, as� como las direcciones de las dos palabras. El resultado ser� una hilera de tal vez 32 d�gitos, que el programador puede equivocar a la hora de copiar. Por ello, un programa que contenga varias docenas de estas instrucciones ser� una pesadilla en cuanto a su escritura, a su cotejo y a su correcci�n. A pesar de ello en los primeros a�os de la computaci�n los ingenieros trabajaron directamente en el lenguaje de la m�quina. Luego empezaron a desarrollar c�digos m�s legibles, aprovech�ndose de recursos mnemot�cnicos. A estos nuevos c�digos se les dio el nombre de lenguajes en conjunto (assembly languages) y todav�a se usan.

El fundamento de los lenguajes en conjunto es que los programadores humanos recuerdan los nombres m�s f�cilmente que los n�meros. Nombres cortos y fijos (tales como AD, SUBS, MUL) se presentan en todas las instrucciones de la m�quina, am�n de que los programadores pueden componer sus propios nombres para indicar sitios de almacenamiento, es decir, variables en el sentido matem�tico (nombres AL, RAPID,SUM). Aunque la computadora ejecuta instrucciones s�lo en lenguaje de la m�quina, con ayuda de un programa escrito con anterioridad, traduce autom�ticamente del lenguaje del conjunto al lenguaje de la m�quina, y enseguida ejecuta. Es decir, transforma el programa escrito con nombres en una larga hilera de d�gitos binarios que el procesador entiende. Este programa de traducci�n (llamado conjuntador —assembler—) evita al programador el trabajo de buscar c�digos binarios en una tabla y de escribirlos �l mismo. En general, los programadores siguen escribiendo un enunciado en lenguaje de conjunto para cada instrucci�n que quieran que ejecute la m�quina. Sigue estando muy atado a la estructura l�gica de la m�quina que usa, aunque ahora escribe en un lenguaje que no es el lenguaje de la m�quina.

El paso siguiente fue crear c�digos que alejaron todav�a m�s al programador de su m�quina, pues le permitieron escribir en un lenguaje m�s matem�tico. A estos c�digos se les llaman lenguajes de alto nivel (high-level languages) y son traducidos en instrucciones a la m�quina no por medio de programas conjuntadores relativamente simples, sino por medio de programas complejos llamados compiladores (compilers). El primero de tales lenguajes que se us� de un modo general (a fines de los a�os 1950) fue el FORTRAN. A partir de entonces ha habido docenas de ellos. En FORTRAN, el programador escribe instrucciones que se parecen mucho al �lgebra: por ejemplo, C=A+B. En otros lenguajes los enunciados pueden parecerse m�s a la l�gica simb�lica o inclusive al idioma natural simple. Cada enunciado FORTRAN pide a la CPU que realice algunas operaciones elementales, por lo cual todos ellos deben ser convertidos en un n�mero de instrucciones dadas en el lenguaje de la m�quina. Un programa compilador tiene precisamente esta tarea; acepta enunciados FORTRAN como su input, los analiza en sus partes constitutivas y genera enunciados de la m�quina como output. Como cualquier traductor humano, el compilador escucha en un idioma y habla del otro. Pero a diferencia del humano, que aporta al trabajo de traducci�n sus conocimientos sobre el significado de las palabras y sobre las probables intenciones del hablante o escritor, el compilador no sabe nada del prop�sito general del programa FORTRAN y mucho menos de las intenciones del programador. Nadie afirmar�a que entiende franc�s si todo lo que hace es identificar al sujeto y al predicado en una frase en franc�s, en tanto que un compilador entiende FORTRAN justamente en ese sentido, porque puede analizar la sintaxis de enunciados en FORTRAN o cualquier otro lenguaje de alto nivel deben ser en lo estructural no ambiguas. El compilador no puede elegir entre an�lisis alternos; por definici�n carece de aptitud de interpretaci�n del traductor humano.

GRÁFICA VIII.1. Jerarquía de lenguajes de computadodas


Lenguaje de alto nivel (FORTRAN)
Lenguaje conjuntador (hipotético)
Lenguaje de la máquina (16 bits hipotéticos)
VEL = 10 LDI 10
STA VEL

0000110000001010

000100010001000

POS=VEL*(TIME+INC) LDA TIME
ADA INC
MUL VEL
STA POS

0000100100010010

0010000100010100

0011100100010000

0001000100010110


Aqu� se muestran tres niveles del lenguaje electr�nico. Una orden en un lenguaje de alto nivel podr�a convertirse en dos o tres (�o muchas!) en el lenguaje conjuntador. El lenguaje conjuntador permite adem�s el uso de nombres (VEL, POS, TIME, INC) y el uso de mnemotecnias en instrucciones (LDI, LDA, ADA, MUL y ETA son todos opcodes, es decir, c�digos de instrucci�n o nombres de operaciones de la m�quina). En el lenguaje de la m�quina, inclusive �stas deben ser sustituidas por hileras de n�meros binarios.

He aqu�, pues, una cualidad del lenguaje de la computaci�n: su estructura jer�rquica o en capas. Los c�digos de computaci�n se clasifican en t�rminos de su distancia respecto a su lenguaje binario de las instrucciones de la m�quina y de su proximidad a los lenguajes tradicionales de las matem�ticas y de la l�gica. En el nivel m�s elevado est�n lenguajes compiladores de la talla de FORTRAN; abajo se hallan lenguajes de conjunto; abajo de �stos est�n las instrucciones de la m�quina (gr�fica VIII.1). Lo cierto es que en realidad son posibles niveles a�n m�s altos. Por ejemplo, un programa escrito en PASCAL puede aceptar m�s expresiones en el idioma hablado natural, como "multiplique distancia por velocidad", y convertirlas en operaciones de la m�quina. En este caso, el programa PASCAL es en s� un compilador del lenguaje natural para cuyo procesamiento est� equipado. Un compilador ocupa una posici�n intermedia entre un nivel alto y uno bajo. Las palabras "alto" y "bajo" tal vez parezcan indicar prejuicio: el lenguaje de alto nivel est� un poco m�s cerca del usuario que habla el lenguaje natural, aun cuando nuestro lenguaje exceda en complejidad y riqueza a cualquier cosa que la computadora pueda procesar hoy d�a. Por otra parte, el lenguaje de la computaci�n cobra significado �nicamente por medio de su ejecuci�n. Ejecutar una orden FORTRAN le permite realizar su significado en el campo de la acci�n. Como ocurre en cualquier jerarqu�a, las unidades situadas en la cima dan las �rdenes, las intermedias las pasan y las unidades situadas en el fondo las ejecutan. Las humildes instrucciones de la m�quina son las �nicas que en realidad realizan computaci�n.

Los programas de compilaci�n y de conjunto son programas de traducci�n: aceptan como input enunciados en clave en un nivel de la jerarqu�a electr�nica y producen instrucciones de output en un nivel inferior. el proceso de traducci�n, aunque terriblemente complejo, no tiene nada de misterioso. Se lleva acabo de un algoritmo; no intervienen intuiciones. Para que el compilador "entienda" un enunciado en FORTRAN s�lo necesita procesarlo paso a paso y convertirlo en una forma ejecutable. Una vez ejecutado, el enunciado no ejerce influencia alguna sobre el resto del programa. en el idioma hablado el significado de una frase puede cambiar radicalmente debido a la frase que le sigue, porque la frase permanece activa y resonante en la memoria mucho despu�s de haber sido le�da o pronunciada. Todo enunciado escrito en lenguaje de computaci�n exige, sin embargo, la total atenci�n de la m�quina a lo largo del fugaz momento de su ejecuci�n; en seguida deja de tener significado a menos que (en el caso de programas looping) se vuelva a presentar nuevamente para su ejecuci�n.

Adem�s, como el lenguaje de la computaci�n s�lo tiene significado en la acci�n, no se puede tolerar la menor ambig�edad. Si una orden de FORTRAN tiene dos interpretaciones posibles, el compilador deber� generar dos conjuntos de instrucciones a la m�quina. Sin embargo, el procesador central s�lo puede ejecutar una instrucci�n a la vez; no puede escoger libremente entre los dos conjuntos de instrucciones. Por esta raz�n el lenguaje de la computaci�n es un�voco en todos los niveles: cada enunciado o es por completo claro o est� equivocado para garantizar su calidad el lenguaje cuenta con una sintaxis r�gida de expresiones permisibles. Esta rigidez significa que los programadores que por naturaleza no piensan de un modo tan consistente, cometen con frecuencia errores tan peque�os, al dejar fuera puntuaci�n , par�ntesis, o bien deletreando mal. Cuando el compilador se encuentra con un enunciado que no es conforme, tal vez trate de adivinar que fue lo que el programador quiso escribir; �omiti� una coma o punto y coma? Esta adivinaci�n es de alcance limitado por que el compilador nunca quiere escoger entre significados operacionalmente diferentes. A final de cuentas, tal vez el compilador pase por alto el mal enunciado y omita totalmente las instrucciones a la m�quina que pudo generar. Por lo com�n el resultado es que el programa no se puede ejecutar. En pocas palabras, la ambig�edad que tan importante es a la comunicaci�n humana resulta fatal a la computadora.

En el lenguaje hablado la ambig�edad significa en muchos casos la diferencia entre lenguaje e intenci�n, ya que respecto a una frase sencilla caben presentarse muchos significados. En t�rminos l�gicos nuestro lenguaje escrito y hablado suele fallarnos, porque no revela con claridad nuestras intenciones. Por otra parte, esta falla es una de las cualidades del lenguaje que hacen posible a la poes�a y que, en general, nos permite grandes econom�as en cuanto a comunicaci�n. Hay ocasiones en que la ambig�edad comunica exactamente el sentido correcto. Sin embargo, es frecuente que el mensaje se refiera a emociones o intuiciones que los lenguajes de las computadoras no pueden representar. La representaci�n electr�nica como una serie de s�mbolos en una tarjeta perforada, en cinta magn�tica o en disco magn�tico, es una representaci�n sin tacha (dentro de la tolerancia de error del sistema particular). Sucede que un enunciado FORTRAN no es otra cosa que estos s�mbolos. En el lenguaje natural la expresi�n escrita es s�lo una parte de todo el lenguaje, no siempre la m�s importante. Cualquier frase escrita en un papel se puede decir de varios modos, lo cual traduce otros tantos matices de significado que dan colorido al contexto en que se presentan. En cambio, en una variable FORTRAN no hay connotaciones, no hay significados sobreentendidos. La imprecisi�n en un lenguaje de computaci�n no producir� poes�a, ni expresar� emoci�n, ni agregar� colorido, ni har� nada de aquello en que el lenguaje natural sobresale. S�lo producir� un error, en cuyo caso el programa deber� ser rehecho.

Los lenguajes electr�nicos han sido ideados por matem�ticos y l�gicos como instrumentos para resolver problemas t�cnicos. Estas personas quiz� no aprecien siempre las ambig�edades matices del idioma literario hablado. Pero en caso de que s� las aprecien, no pueden incorporar esos matices en sus compiladores porque la naturaleza l�gica de los circuitos y de los registros de almacenamiento no permite ambig�edades. Los �nicos lenguajes apropiados para los sistemas electr�nicos son aquellos que sean precisos y tan estructuralmente simples como FORTRAN y LISP. La �nica definici�n que tiene sentido es la definici�n operacional: trad�zcase el enunciado en lenguaje de la m�quina, ejec�tese y exam�nese el resultado. Finalmente en FORTRAN no hay nada parecido al pensamiento que no se pueda expresar en un enunciado FORTRAN ; en el reino de la computadora, coinciden pensamiento y lenguaje.

Fondo 2000 �ndice Anterior Nivel anterior Siguiente