Fortran

lenguaje de programación

Fortran (previamente FORTRAN,[1]​ contracción del inglés The IBM Mathematical Formula Translating System) es un lenguaje de programación de alto nivel de propósito general,[2]procedural[3]​ e imperativo, que está especialmente adaptado al cálculo numérico y a la computación científica. Desarrollado originalmente por IBM en 1957 para el equipo IBM 704, y usado para aplicaciones científicas y de ingeniería, el FORTRAN vino a dominar esta área de la programación desde el principio y ha estado en uso continuo por más de medio siglo en áreas de cómputo intensivo tales como la predicción numérica del tiempo, análisis de elementos finitos, dinámica de fluidos computacional (CFD), física computacional y química computacional. Es uno de los lenguajes más populares en el área de la computación de alto rendimiento y es el lenguaje usado para programas que evalúan el desempeño (benchmark) y el ranking de los supercomputadores más rápidos del mundo.[4]

Fortran
IBM y John Backus
https://fortran-lang.org
Información general
Extensiones comunes f, for y f90
Apareció en 1957
Diseñado por John Backus
Influido por Speedcoding
Licencia Licencia MIT

El FORTRAN abarca un linaje de versiones, cada una de las cuales evolucionó para añadir extensiones al lenguaje mientras que usualmente retenía compatibilidad con las versiones previas. Versiones sucesivas han añadido soporte para procesamiento de datos basados en caracteres (FORTRAN 77), programación de matrices, programación modular y programación orientada a objetos (Fortran 90/95), y programación genérica (Fortran 2003).

Historia editar

 
Código FORTRAN en una tarjeta perforada, mostrando el uso especializado de las columnas 1-5, 6 y 73-80.

A finales de 1953, John W. Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar el computador central IBM 704..[5]: 69  El histórico equipo FORTRAN de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.[6]

A mediados de 1954 fue terminada una especificación del borrador para el IBM Mathematical Formula Translating System. El primer manual de FORTRAN apareció en octubre de 1956, porque los clientes eran reacios a usar un lenguaje de programación de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador.

Mientras que la comunidad era escéptica sobre este nuevo lenguaje, este redujo en 20 veces el número de sentencias de programación necesarias para operar una máquina, y rápidamente ganó aceptación. Durante una entrevista en 1979 con Think, la revista de los empleados de IBM, el creador John Backus, dijo: "Mucho de mi trabajo surgió por ser perezoso. No me gustaba escribir programas y por eso, cuando estaba trabajando en el IBM 701 escribiendo programas para computar trayectorias de misiles, comencé a trabajar en un sistema de programación para hacer más fácil escribir programas".[7]

El lenguaje fue ampliamente adoptado por los científicos para escribir programas numéricamente intensivos, que incentivó a los escritores de compiladores a producir compiladores que pudieran generar un código más rápido y más eficiente. La inclusión en el lenguaje de un tipo de datos y de la aritmética de números complejos amplió la gama de aplicaciones para las cuales el lenguaje se adaptaba especialmente e hizo al FORTRAN especialmente adecuado para aplicaciones técnicas tales como la ingeniería eléctrica.

Hacia 1960, las versiones de FORTRAN estaban disponibles para los computadores IBM 709, 650, 1620, y 7090. La cada vez mayor popularidad del FORTRAN estimuló significativamente a fabricantes de computadores de la competencia a proporcionar compiladores FORTRAN para sus máquinas, así que allá por 1963 existían más de 40 compiladores FORTRAN. Por estas razones, el FORTRAN es considerado el primer lenguaje de programación ampliamente usado soportado a través de una variedad de arquitecturas de computador.

El desarrollo del FORTRAN fue paralelo a la temprana evolución de la tecnología del compilador. De hecho, muchos avances en la teoría y el diseño de compiladores fueron motivados específicamente por la necesidad de generar código eficiente para los programas en FORTRAN.

Origen del nombre editar

El primer manual de FORTRAN lo describe como un Sistema Traductor de Fórmulas (Formula Translating System), y mostraba el nombre en versalita, FORTRAN.[8][5]​ Otras fuentes sugieren que el nombre significa Traductor de Fórmulas (Formula Translator),[9]​ o Traducción de Fórmulas (Formula Translation.[10]​ Los primeros ordenadores IBM no soportaban minúsculas y los nombres de las versiones del lenguaje hasta FORTRAN 77 se escribían normalmente en mayúsculas[11]​ (FORTRAN 77 fue la última versión en la que el juego de caracteres de Fortran incluía sólo mayúsculas[12]​). Desde Fortran 90, las normas oficiales del lenguaje Fortran lo denominan "Fortran" con mayúscula inicial.

Versiones editar

Algunas otras versiones subsiguientes fueron:

  • FORTRAN I
  • FORTRAN II
  • FORTRAN IV
  • FORTRAN 66
  • FORTRAN 77
  • Fortran 90
  • Fortran 95
  • Fortran 2003
  • Fortran 2008
  • Fortran 2018

Principales características editar

El lenguaje fue diseñado teniendo en cuenta que los programas serían escritos en tarjetas perforadas de 80 columnas. Así por ejemplo, las líneas debían ser numeradas y la única alteración posible en el orden de ejecución era producida con la instrucción goto. Estas características han evolucionado de versión en versión. Las actuales contienen subprogramas, recursión y una variada gama de estructuras de control.

Ventajas e inconvenientes de su sintaxis editar

Como fue una primera tentativa de creación de un lenguaje de programación de alto nivel, tiene una sintaxis considerada arcaica por muchos programadores que aprenden lenguajes más modernos. Es difícil escribir un bucle "for", y errores en la escritura de un solo carácter pueden llevar a errores durante el tiempo de ejecución en vez de errores de compilación, en el caso de que no se usen las construcciones más frecuentes. Algunas de las primeras versiones no poseían facilidades que son consideradas muy útiles, tal como la asignación dinámica de memoria.

Se debe tener en cuenta que la sintaxis de Fortran fue orientada para el uso en trabajos numéricos y científicos. Muchas de sus deficiencias han sido abordadas en revisiones recientes del lenguaje. Por ejemplo, Fortran 95 posee comandos mucho más breves para efectuar operaciones matemáticas con matrices y dispone de tipos. Esto no solo mejora mucho la lectura del programa sino que además aporta información útil al compilador.

Por estas razones Fortran prácticamente no se usa fuera de los campos científicos y del análisis numérico, pero permanece como el lenguaje preferido para desarrollar aplicaciones de computación numérica de alto rendimiento.

Especificaciones editar

Existen dos versiones normalizadas del lenguaje.

  • ANSI X3.198-1992 (R1997). Título: Programming Language "Fortran" Extended. Conocida como Fortran 90. Se trata de un estándar publicado por ANSI.
  • ISO/IEC 1539-1:1997. Title: Information technology - Programming languages - Fortran - Part 1: Base language. Conocida como Fortran 95. también adoptada por ANSI.

A continuación se muestra el código fuente en lenguaje Fortran de un programa que permite realizar un ajuste o regresión lineal de una serie de datos:

REGRESION LINEAL.FORTRANS
APLICACION
     DIMENSION TIEMPO(1000),PROD(1000)
        OPEN(1,FILE='HISTORIA.txt')
        I=0
 10     READ(1,*,END=80)T,P
        I=I+1
        TIEMPO(.l.)=T
        PROD(I)=P
        GO TO 10
 80     NDATOS=I
        CALL AJULIN(TIEMPO,PROD,NDATOS,A,B)
        WRITE(*,90)A,B
 90     FORMAT('LA ECUACION ES:Y=',F10.2,'+',F10.2,'X')
 20     FORMAT(20F10.0)
        END

        SUBROUTINE AJULIN(X,Y,N,A,B)
         DIMENSION X(1),Y(1)
          SUMX=0.
          SUMY=0.
          SUMX2=0.
          SUMY2=0
          SUMXY=0
        DO 20 I=1,N
         SUMX=SUMX+X(.l.)
         SUMY=SUMY+Y(.l.)
         SUMX2=SUMX2+(X(I)*X(.l.))
         SUMY2=SUMY2+Y(I)**2
         SUMXY=SUMXY+(X(I)*Y(I))
 20    CONTINUE
        PROD=SUMX*SUMY
        B=(SUMXY-PROD/N)/(SUMX2-SUMX**2/N)
        A=(SUMY/N-B*SUMX/N)
       RETURN
       END

Básicamente, en el programa se lee desde un archivo ASCII cierta cantidad de pares ordenados, se convoca a una rutina que calcula la recta de ajuste correspondiente, usando el método de mínimos cuadrados, para luego retornar aportando los coeficientes o parámetros de la recta en cuestión.

Portabilidad editar

La portabilidad era un problema en los primeros tiempos porque no había un estándar acordado -ni siquiera el manual de referencia de IBM- y las empresas informáticas competían por diferenciar sus ofertas de las de los demás ofreciendo características incompatibles. Los estándares han mejorado la portabilidad. El estándar de 1966 proporcionaba una sintaxis y una semántica de referencia, pero los vendedores seguían proporcionando extensiones incompatibles. Aunque los programadores cuidadosos se daban cuenta de que el uso de extensiones incompatibles causaba costosos problemas de portabilidad, y por ello utilizaban programas como The PFORT Verifier,[13][14]​ no fue hasta después de la norma de 1977, cuando la Oficina Nacional de Estándares (ahora NIST) publicó FIPS PUB 69, que los procesadores comprados por el Gobierno de Estados Unidos debían diagnosticar las extensiones de la norma. En lugar de ofrecer dos procesadores, esencialmente cada compilador finalmente tenía al menos una opción para diagnosticar extensiones.[15][16]

Las extensiones incompatibles no eran el único problema de portabilidad. Para los cálculos numéricos, es importante tener en cuenta las características de la aritmética. Esto fue abordado por Fox et al. en el contexto del estándar de 1966 por la biblioteca PORT.[14]​ Las ideas en ella se utilizaron ampliamente, y finalmente se incorporaron en el estándar de 1990 por medio de funciones intrínsecas de consulta. La adopción generalizada (ahora casi universal) del estándar IEEE 754 para la aritmética binaria de punto flotante ha eliminado esencialmente este problema.

El acceso al entorno informático (por ejemplo, la línea de comandos del programa, las variables de entorno, la explicación textual de las condiciones de error) siguió siendo un problema hasta que fue abordado por la norma de 2003.

Grandes colecciones de software de biblioteca que podrían describirse como vagamente relacionadas con la ingeniería y los cálculos científicos, como las bibliotecas de gráficos, se han escrito en C, y por lo tanto el acceso a ellas presentaba un problema de portabilidad. Esto se ha solucionado con la incorporación de la interoperabilidad de C en la norma de 2003.

Ahora es posible (y relativamente fácil) escribir un programa totalmente portable en Fortran, incluso sin recurrir a un preprocesador.

Referencias editar

  1. Los nombres de las versiones anteriores a FORTRAN 77 son convencionalmente escritas con todas las letras en mayúsculas (FORTRAN 77 was the version in which the use of lowercase letters in keywords was strictly nonstandard). The capitalization has been dropped in referring to newer versions beginning with Fortran 90. The official language standards now refer to the language as "Fortran." Because the capitalisation (or lack thereof) of the word FORTRAN was never 100% consistent in actual usage, and because many hold impassioned beliefs on the issue, this article, rather than attempt to be normative, adopts the convention of using the all-caps FORTRAN in referring to versions of FORTRAN through FORTRAN 77 and the title-caps Fortran in referring to versions of Fortran from Fortran 90 onward. This convention is reflected in the capitalization of FORTRAN in the ANSI X3.9-1966 (FORTRAN 66) and ANSI X3.9-1978 (FORTRAN 77) standards and the title caps Fortran in the ANSI X3.198-1992 (Fortran 90), ISO/IEC 1539-1:1997 (Fortran 95) and ISO/IEC 1539-1:2004 (Fortran 2003) standards.
  2. Since FORTRAN 77, which introduced the CHARACTER data type.
  3. Since FORTRAN II (1958).
  4. http://www.top500.org/project/linpack
  5. a b Backus, John (October–December 1998). «The History of Fortran I, II, and III». IEEE Annals of the History of Computing (en inglés) 20 (4): 68-78. doi:10.1109/85.728232. Archivado desde el original el 3 de marzo de 2016. Consultado el 17 de junio de 2020.  [1][2]
  6. http://www.softwarepreservation.org/projects/FORTRAN/index.html#By_FORTRAN_project_members
  7. Fortran creator John Backus dies - Gadgets - MSNBC.com
  8. Backus, John Warner; Beeber, R. J.; Best, Sheldon F.; Goldberg, Richard; Herrick, Harlan L.; Hughes, R. A.; Mitchell, L. B.; Nelson, Robert A.; Nutt, Roy; Sayre, David; Sheridan, Peter B.; Stern, Harold; Ziller, Irving (15 de octubre de 1956). Sayre, David, ed. The FORTRAN Automatic Coding System for the IBM 704 EDPM: Programmer's Reference Manual. New York, USA: Applied Science Division and Programming Research Department, International Business Machines Corporation. pp. 2, 19-20. Archivado desde el original el 4 de julio de 2022. Consultado el 4 de julio de 2022.  (2+51+1 pages)
  9. «FORTRAN: The Pioneering Programming Language». IBM. 7 de marzo de 2012. Consultado el 19 de julio de 2017. 
  10. «FORTRAN». Encyclopedia Britannica. 14 de junio de 2021. Consultado el 19 de julio de 2021. 
  11. Chapman, Stephen J. (2018). Fortran for Scientists and Engineers (Fourth edición). New York: McGraw-Hill Education. p. 13. ISBN 978-0-07-338589-1. 
  12. El "juego de caracteres Fortran" definido por el estándar FORTRAN 77 era el juego de caracteres mínimo que los compiladores compatibles con el estándar debían soportar; en la práctica, muchos compiladores FORTRAN 77 soportaban el juego de caracteres completo ASCII.
  13. Gaffney, P W; Wooten, J W (1 de mayo de 1980), Methods to ensure the standardization of FORTRAN software, Oak Ridge National Laboratory, OSTI 5361454, «PFORT ... Library ... » .
  14. a b P. A. Fox (1977). «Port - Una biblioteca portátil de subrutinas matemáticas». Una biblioteca portátil de subrutinas matemáticas. Notas de clase en Ciencias de la Computación 57. pp. 165-177. ISBN 978-3-540-08446-4. doi:10.1007/3-540-08446-0_42. «PORT ... escrito en (PFORT) .. ANS Fortran ». 
  15. Whitten, Douglas E.; Demaine, Paul A. D. (1975). «Un Fortran independiente de la máquina y la configuración: Portable Fortran {PFortran}». IEEE Transactions on Software Engineering (Institute of Electrical and Electronics Engineers (IEEE)). SE-1 (1): 111-124. ISSN 0098-5589. S2CID 16485156. doi:10.1109/tse.1975.6312825. 
  16. «Cuestiones de portabilidad». «.. discute la portabilidad de .. Fortran ». 

Enlaces externos editar

Recursos de programación editar