# Fortran

Fortran (previamente FORTRAN, contracción del inglés Formula Translating, «traducción de fórmulas») es un lenguaje de programación de alto nivel de propósito general, procedural 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.
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

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.$^{: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.
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 calcular trayectorias de misiles, comencé a trabajar en un sistema de programación para hacer más fácil escribir programas».
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 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

El primer manual de FORTRAN lo describe como un Sistema Traductor de Fórmulas (Formula Translating System), y mostraba el nombre en versalita, FORTRAN. Otras fuentes sugieren que el nombre significa Traductor de Fórmulas (Formula Translator), o Traducción de Fórmulas (Formula Translation. 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 (FORTRAN 77 fue la última versión en la que el juego de caracteres de Fortran incluía sólo mayúsculas). Desde Fortran 90, las normas oficiales del lenguaje Fortran lo denominan «Fortran» con mayúscula inicial.

## Versiones

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

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

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

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

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