%   LA COMPUTACI\'ON EN EL INSTITUTO DE CIENCIAS DE LA UAP     

\chapter*{EL C\'ALCULO NUM\'ERICO Y EL LENGUAJE FORTRAN}
\setcounter{chapter}{6}
\setcounter{section}{0}



   ``Estudie programaci\'on Fortran en 3 semanas y entre al mundo de la
computaci\'on electr\'onica'' o bien ``Dedique un poco de su tiempo libre y
en tres semanas usted ser\'a un experto en computaci\'on''. Estos son algunos
de los slogans m\'as socorridos en la propaganda de las academias que ofrecen
capacitaci\'on t\'ecnica en temas relacionados con la computaci\'on.
\medskip
     
   Por su parte, la IBM y sus competidores tambi\'en utiliz\'o propaganda del
mismo g\'enero cuando, en la mitad de la d\'ecada de los 50's, promovi\'o y
difundi\'o el uso del lenguaje Fortran. Si bien agreg\'o el requisito de la
familiaridad con las notaciones algebraicas y matriciales, tambi\'en redujo
el tiempo de la capacitaci\'on a tres horas,
\medskip
  
  No resulta dif\'{\i}cil comprender lo exagerado de estas afirmaciones, varias 
generaciones de egresados de la licenciatura en Ciencias de la Computaci\'on 
que ofrece la UAP pueden constatarlo con su propia experiencia.
\medskip
     
   No basta con una computadora para resolver un problema espec\'{\i}fico,
adem\'as del equipo, se requiere de un programa que controle la actividad de
la computadora. El programa de control juega un papel muy importante, dado que
establece en cada momento las operaciones que la computadora debe realizar para
dar soluci\'on al problema.
\medskip
     
   Cada problema requiere de un programa de control diferente, que se conforma
con las instrucciones que en su nivel elemental dispone la computadora.
Como estas instrucciones son muy simples, la elaboraci\'on de los programas
resulta ser una labor de considerable complejidad que consume grandes
cantidades de recursos.
\medskip
  
   Por esta raz\'on se han desarrollado diversos accesorios que facilitan la 
elaboraci\'on de los programas, entre los que destacan, de manera se\~nalada
los lenguajes de programaci\'on. El primer lenguaje de programaci\'on que
goz\'o de amplia difusi\'on fue Fortran (Formula Translator). Su dise\~no se
orient\'o a las aplicaciones num\'ericas que plantearon la ingenier\'{\i}a y la
ciencia, en donde las soluciones se describen de manera natural con el empleo
de expresiones algebraicas y matrices.
\medskip

\noindent
El programa que realiza la traducci\'on del programa se designa compilador.
\medskip
     
   Fortran incorpor\'o en su inicio pocos elementos, adem\'as de las f\'ormulas
algebraicas y el empleo de matrices, integr\'o algunas instancias de control. 
Transferencias incondicionales, elecci\'on de opciones y la repetici\'on de
ciclos iterativos permitieron describir el control del flujo del lenguaje.
Para establecer comunicaci\'on con el mundo exterior, cont\'o con proposiciones,
sensiblemente influenciadas por las tarjetas perforadas y las cintas
magn\'eticas en virtud de que fueron los medios disponibles.
\medskip
     
   Incorpor\'o tambi\'en la posibilidad de definir y usar subrutinas. Con esto
el programador pudo organizar mejor su programa y definir sus propios
procedimientos compuestos asign\'andoles el nombre, con el cual les hac\'{\i}a
referencia cada que los deseaba utilizar. La definici\'on y uso de subrutinas
permiti\'o desde un principio el uso de argumentos lo cual plante\'o el problema del intercambio de datos.
\medskip
     
  Otros aspectos que determinaron las caracter\'{\i}sticas del lenguaje fueron 
las primeras aplicaciones, espec\'{\i}ficamente, a trav\'es de los
requerimientos que plantearon en  cuanto a la precisi\'on de los datos,
tama\~no del programa y la velocidad del proceso.
\medskip
     
   Fortran en sus inicios no incorpor\'o algunas facilidades como los \'{\i}ndices
flotantes y los incrementos flotantes o negativos, no tanto porque no se hab\'{\i}an identificado, sino
porque expl\'{\i}citamente fueron exclu\'{\i}das en su definici\'on. Con la evoluci\'on 
de los equipos, el lenguaje posteriormente los incorpor\'o.
\medskip
   
   Se da el caso en que la versatilidad y abundancia de recursos en los
lenguajes se revierten en contra del usuario. No es este el caso de Fortran
porque continu\'o su evoluci\'on sin proponerse incorporar accesorios innecesarios. 
Otros lenguajes han integrado recursos que nunca se emplean; en estos casos no s\'olo existe desperdicio sino que \'este, introduce elementos de perturbaci\'on para el usuario.
\medskip
 
La presencia de Fortran facilit\'o el desarrollo de aplicaciones y potenci\'o el c\'alculo num\'erico en la ingenier\'{\i}a y  las ciencias. Con su utilizaci\'on se desarrollaron aplicaciones num\'ericas de gran escala. Su empleo redujo el tiempo en preparaci\'on del programa en al menos un orden de magnitud.
\medskip
 
\section{CULTURA GENERAL Y USO DEL LENGUAJE}

Un conocimiento superficial del lenguaje -saber qu\'e es y para qu\'e sirve- satisface las necesidades culturales de un gran n\'umero de personas. Pero los usuarios de las computadoras, aquellos que las emplean en la soluci\'on de problemas, requieren conocer con mayor detalle y profundidad las caracter\'{\i}sticas y ventajas que ofrecen los lenguajes de programaci\'on.
\medskip
 
Para este prop\'osito se cuenta con una amplia bibliograf\'{\i}a que describe con cierto detalle los aspectos generales. Las caracter\'{\i}sticas particulares de cada compilador -que en una buena medida depende del equipo- se describen en los manuales que preparan los proveedores.
 
\medskip
A pesar de que estos manuales representan un apoyo significativo, usualmente resultan incompletos, en vista de abordar de manera superficial algunas caracter\'{\i}sticas del compilador y en otros casos las omiten o eluden su descripci\'on. Algunas de las veces, las omisiones son deliberadas, ya que los proveedores desean mantener algunas de sus caracter\'{\i}sticas como secretos comerciales.
 
\begin{figure}[th] 
\centering 
\begin{picture}(270,205)
\put(0,0){\epsfxsize=270pt \epsffile{foto19.eps}}
\end{picture}
\end{figure} 



Por lo regular, para el usuario el conocimiento del lenguaje es parcial e inexacto, por m\'eritos propios y ajenos. Los vendedores, instructores y maestros adolecen de la  misma deficiencia, toda vez que est\'an imposibilitados para subsanar las deficiencias de los manuales e instructivos. 
\medskip
 
A manera de ejemplo, los libros que describen los movimientos de las piezas del ajedrez son \'utiles para comprender el juego.
Tambi\'en son \'utiles las cr\'onicas y an\'alisis de las partidas m\'as notorias de los grandes maestros, pero son insuficientes ya que ning\'un
tratado puede contemplar y analizar todas las posibilidades que ofrece este juego.
\medskip
 
Para un mismo lenguaje hay una gran variedad de compiladores originada por las dife\-rencias en los equipos de las diferentes compa\~n\'{\i}as. Es tambi\'en notable la gran diversidad en las calidades de los compiladores. Estas diferencias impiden en buena medida producir aplicaciones independientes del equipo y versiones del lenguaje.
Para mitigar esto, algunos lenguajes -Fortran inclu\'{\i}do- est\'an definidos a trav\'es de normas y est\'andares, elaborados por comit\'es de proveedores y usuarios que desafortunadamente no resuelven el problema ya que en ellos no est\'an
previstas todas las posibilidades que se pueden presentar. Los compiladores son 
elaboraciones demasiado complejas como para que se puedan describir con
fidelidad todas sus caracter\'{\i}sticas.
\medskip
 
 Adicionalmente, los compiladores pueden contener errores o presentar interpretaciones equivocadas -accidentales o deliberadas- de los est\'andares.
\medskip
    
  Por otra parte, los est\'andares est\'an descritos en t\'erminos m\'as propios de
los abogados que de especialistas en computaci\'on o matem\'aticos.
Llevando las cosas al extremo, les podr\'{\i}amos describir como acuerdos entre 
piratas y bandoleros, dispuestos a suscribirlos pero no a cumplirlos y a
regirse por ellos.
\medskip
     
   La mejor referencia para el compilador, la m\'as fiel, la que no omite
descripci\'on de las caracter\'{\i}sticas, ni permite interpretaciones
equivocadas, es el listado del programa fuente del compilador.
\medskip
     
   Como en los ambientes jur\'{\i}dicos, aqu\'{\i} tambi\'en priva la regla de 
la mejor evidencia: no se admite el testimonio de un testigo o un duplicado
como sustituto del contrato o prueba original.
\medskip
     
   Desafortunadamente, es pol\'{\i}tica de uso corriente de los proveedores de   
equipos y programas el ofrecer los programas en binario y nunca los programas
fuente. Estos \'ultimos algunas veces tambi\'en se pueden adquirir, pero su
precio los hace prohibitivos, en ocasiones equivalentes al del equipo completo.
\medskip
  
Las empresas que los producen, cotizan a los programas fuente de un compilador
o de un sistema operativo en varias decenas de miles de d\'olares como una
medida de evitar la competencia desleal  de sus clientes.
\medskip
     
   Por esta raz\'on, el Instituto de Ciencias de la UAP ha promovido a trav\'es
de su participaci\'on en la Escuela de Ciencias F\'{\i}sico Matem\'aticas, que los  
usuarios -en este caso los estudiantes universitarios- conozcan todos los
aspectos relacionados con los lenguajes, de manera \'{\i}ntima y profunda y no
exclusivamente con su uso. Aunque es justo decir que en este empe\~no se ha  
obtenido un \'exito relativamente parcial. De acuerdo con esta intenci\'on, en
el Instituto se han analizado los compiladores de los equipos disponibles,   
entre otros, el F80 (Fortran para la  8080), FTN (Fortran para la PDP-8),
Fortran de la IBM-1130, el compilador para ``C'' de BDS, y Alpha-Basic (Basic
para la Alpha-Micro).
\medskip
  
\section{EL PUNTO DE VISTA DE LOS PROGRAMA\-DORES DEL SISTEMA}
 
   Todos los conceptos que son visibles y accesibles al programador de
Fortran tienen su representaci\'on y contraparte en t\'erminos de instrucciones
de m\'aquina y c\'odigos en el programa que resulta de la traducci\'on.
\medskip
     
   Algunos de ellos resultan familiares, m\'as como producto del
condicionamiento que aporta la educaci\'on elemental que por el conocimiento
de los mecanismos de la traducci\'on. Algunos otros conceptos -posiblemente los
m\'as relevantes- resultan desconocidos, no obs\-tante que inciden con mayor
intensidad en la eficiencia del programa de aplicaci\'on.
\medskip
     
   Para garantizar su prop\'osito, los compiladores aplican procedimientos 
sistem\'aticos y generales para tratar cada aspecto del programa; lo mismo para
los casos m\'as complejos y elaborados que para los m\'as simples. Como
resultado, en los programas que genera, el compilador incluye muchas
computaciones redundantes de las que el usuario no tiene la menor sospecha.
\medskip
     
   Estas situaciones se presentan lo  mismo con el uso de matrices que con 
el intercambio de datos entre subrutinas o en los elementos del control del
flujo del programa. Pero esto no es privativo de Fortran, tambi\'en se presenta
en otros lenguajes como Algol, ``C'' y Pascal. Lo anterior tiene como
consecuencia que los programas producidos por los compiladores son muy
grandes y tambi\'en lentos, aunque la calidad del compilador puede agudizar
el problema.
\medskip
     
   Por eso, los compiladores producen programas que realizan muchos c\'alculos
redundantes, que efectuan  un excesivo movimiento de datos entre las
diferentes instancias de almacenamiento y que emplean estructuras de control
complejas, que en los casos simples -que son la mayor\'{\i}a- producen c\'odigos ineficientes, sin que el usuario tenga conciencia de ello.
\medskip
     
\section{LA NECESIDAD DE FORMAR UN MODELO DE LOS COMPILADORES}
 
   El cient\'{\i}fico no puede pretender que comprende algo, en tanto no se haya
formado un modelo de su objeto de estudio, Seymour Papert, creador de LOGO, 
expone en sus trabajos una filosof\'{\i}a educativa que, al parecer, adquiri\'o en
su ni\~nez gracias a la familiaridad que tuvo con el funcionamiento de los
relojes. Su inter\'es le llev\'o a destripar varios de ellos, y el funcionamiento
de la maquinaria del reloj fue un problema que para Papert qued\'o resuelto 
hasta que concibi\'o un modelo para el mecanismo, que le permit\'{\i}a en su
imaginaci\'on, jugar personalmente el papel de cada uno de los componentes. 
\medskip
     
   La elaboraci\'on de un modelo de esta naturaleza para un compilador,
constituye una base s\'olida cuya utilidad se proyecta hacia trabajos futuros.
A partir del modelo, se puede producir un producto de mejor calidad, con un
mayor nivel de organizaci\'on, m\'as libre de errores y m\'as eficiente en el
desempe\~no de sus prop\'ositos. Analizar un programa con el af\'an de mejorarlo
sustancialmente en efecto corresponde con la idea de hacer ingenier\'{\i}a al
rev\'es. 
\medskip
     
   Los altos costos, la necesidad de una referencia fiel para el lenguaje y
el atractivo de disponer de una base adecuada para el desarrollo de nuevos
trabajos, fueron motivos suficientes para realizar esfuerzos orientados a
obtener un programa fuente para el compilador a partir de su binario. Y 
mediante su an\'alisis, formular un modelo para la operaci\'on del programa,
siempre con la perspectiva de producir un producto mejorado.
\medskip
     
   El problema de la originalidad del trabajo cient\'{\i}fico tiene su historia.
Uno de los casos m\'as sonados, surgi\'o en torno a la soluci\'on de la
ecuaci\'on c\'ubica. El conflicto se di\'o entre un profesor y sus alumnos.
   Uno de los alumnos reuni\'o todos los elementos del problema que se
encontraban aislados y aport\'o algunos de ellos, public\'o el trabajo sin dar al
profesor ni a los dem\'as participantes los cr\'editos que esperaban. La molestia,
tanto del profesor como de los dem\'as involucrados, fue manifiesta. Al alumno
se le calific\'o de ingrato, \'el, por su parte, qued\'o convencido que hab\'{\i}a
salvado aquel valioso material para la posteridad. Sin su trabajo, muchos de
aquellos resultados posiblemente se habr\'{\i}an perdido.
\medskip
     
   El primer compilador de Fortran no se elabor\'o a partir de nada. En la
definici\'on del lenguaje y en la elaboraci\'on del compilador se aprovech\'o
la experiencia acumulada por mucha gente en la traducci\'on de f\'ormulas 
algebraicas, el indexamiento de elementos de vectores y matrices, en la
aritm\'etica de punto flotante y en la conversi\'on de valores y edici\'on de
resultados.
\medskip
     
   Por otro lado, el obtener el programa fuente de un programa complicado
-a partir del binario-, analizarlo y documentarlo, puede involucrar tanto o
m\'as trabajo del que fue necesario para producirlo. Para realizar el
desensamble y el an\'alisis de un programa de la complejidad de un compilador,
es necesario el desarollo de muchos y muy variados accesorios. A la vez que
se resuelve el problema de obtener una referencia fiel del lenguaje, se
produce tambi\'en, una infraestructura de programas accesorios abundante y
variada y se adquiere una considerable experiencia.
\medskip
     
   Para realizar un trabajo de esta naturaleza es necesaria una mezcla de
capacidad, experiencia, entusiasmo y por encima de todo, un af\'an por
involucrarse y participar del problema.
\medskip
     
   El resultado puede ser una copia o un original, depende del criterio. No
hay muchas cosas nuevas en el mundo, pero algunas son m\'as nuevas que otras.
Un ejemplo de esto lo observamos cuando alguien estudia c\'alculo; comprende
el material y produce su propio libro con su interpretaci\'on del tema. El
contenido no es original, no puede serlo, los teoremas son los mismos que se
describen en todos los dem\'as libros, pero su valor se encuentra en el
esfuerzo intelectual y en la interpretaci\'on que se aporta del tema.
     
\section{RELACI\'ON DEL COMPILADOR CON EL $\qquad$ HARDWARE.}
 
   Las microcomputadoras ofrecieron una opci\'on econ\'omica para el c\'alculo
num\'erico, pero adolecieron de la falta de aritm\'etica de punto flotante
adecuada.

   La evoluci\'on del software para estos equipos, espec\'{\i}ficamente la aparici\'on
de F80 -un compilador para Fortran en el 8080- y de las versiones de Basic 
que incorporaron aritm\'etica de punto flotante parcialmente subsanaron esta
deficiencia, aunque su aritm\'etica de punto flotante result\'o lenta.


\begin{figure}[th] 
\centering 
\begin{picture}(270,170)
\put(0,0){\epsfxsize=270pt \epsffile{foto16.eps}}
\end{picture} \\
La elaboraci\'on de gr\'aficas requiere de una cantidad considerable de
aritm\'etica.
\end{figure} 


   Esta lentitud fue relativa, notoria en contraste con la velocidad de la
aritm\'etica de otros equipos. Recordemos que la mayor\'{\i}a de las computadoras
actuales incluyen operaciones aritm\'eticas de punto flotante en su repertorio 
de instrucciones, inclusive algunas de ellas -como la VAX 11/780- ofrecen
elementos aritm\'eticos -aceleradores de punto flotante- para mejorar su
rendimiento en el aspecto num\'erico.
\medskip
     
   Las microcomputadoras carec\'{\i}an de instrucciones para aritm\'etica de punto
flotante en sus repertorios de instrucciones, la aritm\'etica de que dispon\'{\i}an se
realizaba a partir de sus operaciones elementales, que consist\'{\i}an en sumas y
restas de n\'umeros de 8 d\'{\i}gitos binarios. Por ello, a pesar de contar con
este tipo de aritm\'etica, su aprovechamiento en el aspecto num\'erico fue
muy limitado.
\medskip
     
   En estas circunstancias surgieron en el mercado circuitos con el
prop\'osito espec\'{\i}fico de realizar la aritm\'etica de punto flotante. De entre
ellos, se destac\'o el circuito 9511 producido por Advanced Micro Devices,
posteriormente Intel puso en el mercado su 8231, un circuito equivalente.

     
   Con este tipo de circuitos, fue posible construir elementos para las
microcomputadoras que se encargaron de la aritm\'etica de punto flotante,
con ellos se increment\'o el rendimiento de las microcomputadoras. Estos m\'odulos
operaron en forma perif\'erica y su capacidad real se aprovech\'o cuando los
compiladores de los lenguajes num\'ericos se transformaron para producir
programas que utilizar\'an las ventajas de los elementos aritm\'eticos.


\begin{figure}[th] 
\centering 
\begin{picture}(200,150)
\put(0,0){\epsfxsize=200pt \epsffile{foto18.eps}}
\end{picture} \\
Elemento aritm\'etico elaborado en la Universidad Aut\'onoma de Puebla.
\end{figure} 


     
   En el Departamento de Aplicaci\'on de Microcomputadoras del Instituto de 
Ciencias de la Universidad se dise\~naron y contruyeron varios elementos
aritm\'eticos. El pleno aprovechamiento de sus capacidades de c\'alculo fue
posible gracias a la disponibilidad de los programas fuentes para el compilador
de Fortran. Las modificaciones de estos programas -generados en el propio
Instituto- y el concurso de los elementos aritm\'eticos mejoraron sensiblemente
los tiempos de algunas de las aplicaciones. Es el caso del paquete PLOT, que
para la preparaci\'on de gr\'aficas tridimensionales opacas y mapas de contornos,
emplea una cantidad considerable de aritm\'etica de punto flotante.


\begin{figure}[bh] 
\centering 
\begin{picture}(210,145)
\put(0,0){\epsfxsize=210pt \epsffile{foto17.eps}}
\end{picture} \\
Parte posterior del elemento aritm\'etico.
\end{figure} 

     
   Los elementos aritm\'eticos se prepararon en forma modular para que su
integraci\'on en las microcomputadoras de la Universidad fuera m\'as simple.
Se elaboraron elementos para acoplarse tanto en el bus STD como en el S-100 y
varios de ellos se encuentran en operaci\'on para el servicio de la
Universidad desde hace varios a\~nos.
\medskip
     
   Algunos de los elementos aritm\'eticos que se han dise\~nado en la
Universidad no tienen equivalente en el mercado. Es el caso de los dise\~nos
del procesador aritm\'etico que desarrollo el alumno Daniel Angel Tenorio
T\'ellez como tema para su servicio social y trabajo de t\'esis profesional.
   Este elemento aritm\'etico incorpora dos circuitos aritm\'eticos 9511 y
puede realizar operaciones de punto flotante con n\'umeros complejos. El
dise\~no del elemento aritm\'etico de referencia incluye un procesador de
control que le permite utilizar los dos circuitos 9511 para calcular
simult\'aneamente las componentes real e imaginaria de las operaciones
aritm\'eticas complejas. 
\medskip
     
   Con este tipo de elementos aritm\'eticos, la velocidad de la aritm\'etica
de punto flotante de las microcomputadoras se ha incrementado en 4 y hasta en 
12 veces (cuando se trata de aritm\'etica compleja).
\medskip
     
   Con el trabajo realizado, la experiencia que se adquiri\'o y a la luz de los
resultados obtenidos, se abren amplias perspectivas para el desarrollo de
nuevos proyectos, en la direcci\'on de mejores compiladores, ahora tambi\'en
apoyados por los resultados y experiencias obtenidos en el desarrollo de otros 
proyectos y tambi\'en en la direcci\'on del dise\~no de nuevos elementos
aritm\'eticos, con los nuevos circuitos m\'as veloces que ya han aparecido en
el mercado.
