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.
|
||
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.