Articulo de referencia

Fortran

Comprobado {{cite web|title=Chapel spec (Acknowledgements)|url=http://chapel.cray.com/spec/spec-0.98.pdf |archive-url=https://web.archive.org/web/20160205114946/http://chapel.cr...

Comprobado
Página protegida con cambios pendientes

Fortran ( / ˈ f ɔːr t r æ n / ; anteriormente FORTRAN ) es un lenguaje de programación imperativo , compilado y de tercera generación diseñado para la computación numérica y la computación científica .

Fortran fue desarrollado originalmente por IBM y se publicó un manual de referencia en 1956; [ 3 ] sin embargo, los primeros compiladores no comenzaron a producir código preciso hasta dos años después. [ 4 ] Se han escrito programas informáticos en Fortran para apoyar aplicaciones científicas y de ingeniería, como predicción numérica del tiempo , análisis de elementos finitos , dinámica de fluidos computacional , física de plasmas , geofísica , física computacional , cristalografía y química computacional . Es un lenguaje popular para la computación de alto rendimiento [ 5 ] y se utiliza para programas que evalúan y clasifican las supercomputadoras más rápidas del mundo . [ 6 ] [ 7 ]

Fortran ha evolucionado a través de numerosas versiones y dialectos. Las dos versiones iniciales más importantes fueron FORTRAN II y FORTRAN IV. [ 8 ] En 1966, el Instituto Nacional Estadounidense de Estándares (ANSI) desarrolló un estándar para Fortran para limitar la proliferación de compiladores que utilizaban una sintaxis ligeramente diferente. [ 9 ] Las versiones sucesivas han añadido soporte para un tipo de datos de caracteres, programación estructurada (Fortran 77), programación de matrices , programación modular , programación genérica (Fortran 90), computación paralela ( Fortran 95 ), programación orientada a objetos (Fortran 2003) y programación concurrente (Fortran 2008).

Árbol genealógico de FORTRAN y COBOL

Nomenclatura

El primer manual de FORTRAN lo describe como un Sistema de Traducción de Fórmulas , y el nombre impreso en minúsculas , Fortran . [ 10 ] : p.2 [ 11 ] Otras fuentes sugieren que el nombre significa Traductor de Fórmulas , [ 12 ] o, más comúnmente, Traducción de Fórmulas . [ 13 ] [ 14 ] [ 15 ]

Los primeros ordenadores IBM no admitían letras minúsculas , y los nombres de las versiones del lenguaje hasta FORTRAN  77 solían escribirse en mayúsculas . [ 16 ] FORTRAN 77  fue la última versión en la que el conjunto de caracteres de Fortran incluía solo letras mayúsculas. [ 17 ]

El estándar Fortran 90 cambió el nombre del lenguaje de "FORTRAN" con mayúsculas a "Fortran" con mayúsculas iniciales. [ 18 ]

Orígenes

John Backus (1924–2007) propuso el proyecto FORTRAN en diciembre de 1953 y recibió el premio AM Turing en 1977.

A finales de 1953, John W. Backus presentó una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar su computadora central IBM 704. [ 11 ] : 69 El histórico equipo FORTRAN de Backus estaba formado por los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt , Robert Nelson, Irving Ziller, Harold Stern, Lois Haibt y David Sayre . [ 19 ] Sus conceptos incluían una entrada más sencilla de ecuaciones en una computadora, una idea desarrollada por J. Halcombe Laning y demostrada en el sistema Laning y Zierler de 1952. [ 20 ] Como con otros desarrollos en los primeros días de la computación, hubo varios esfuerzos paralelos e independientes en estas líneas, con otros ejemplos de lenguajes proto-Fortran, incluido el Sistema A-0 para el UNIVAC I y su sucesor MATH-MATIC , bajo la dirección de Grace Murray Hopper ; el trabajo de lenguaje de alto nivel desarrollado por Heinz Rutishauser para la computadora Zuse 4 ; y el trabajo de Autocode Mark 1 realizado por RA Brooker para la Ferranti Mercury . [ 15 ]

El sistema de codificación automática Fortran para el IBM 704 (15 de octubre de 1956), el primer manual de referencia para programadores de Fortran [ 10 ]

Un borrador de especificación para el Sistema de Traducción de Fórmulas Matemáticas de IBM se completó en noviembre de 1954. [ 11 ] : 71 El primer manual de FORTRAN apareció en octubre de 1956, [ 10 ] [ 11 ] : 72 y el primer compilador de FORTRAN se entregó en abril de 1957. [ 11 ] : 75 Fortran produjo código lo suficientemente eficiente como para que los programadores de lenguaje ensamblador aceptaran un reemplazo de lenguaje de programación de alto nivel . [ 8 ]

John Backus dijo durante una entrevista de 1979 con Think , la revista para empleados de IBM: "Gran parte de mi trabajo ha surgido de la pereza. No me gustaba escribir programas, así que, cuando trabajaba en el IBM 701 , escribiendo programas para calcular trayectorias de misiles, comencé a trabajar en un sistema de programación para facilitar la escritura de programas". [ 21 ]

El lenguaje fue ampliamente adoptado por los científicos para escribir programas con gran cantidad de operaciones numéricas, lo que impulsó a los desarrolladores de compiladores a crear compiladores que pudieran generar código más rápido y eficiente. La inclusión de un tipo de dato de números complejos en el lenguaje hizo que Fortran fuera especialmente adecuado para aplicaciones técnicas como la ingeniería eléctrica. [ 22 ]

Para 1960, existían versiones de FORTRAN disponibles para las computadoras IBM 709 , 650 , 1620 y 7090. Cabe destacar que la creciente popularidad de FORTRAN impulsó a los fabricantes de computadoras de la competencia a ofrecer compiladores de FORTRAN para sus máquinas, de modo que para 1963 existían más de 40 compiladores de FORTRAN. El lenguaje estaba tan extendido en la industria informática que, para entonces, se habían distribuido más de 220 000 manuales de Fortran de todo tipo. [ 15 ]

FORTRAN se proporcionó para la computadora IBM 1401 mediante un innovador compilador de 63 fases que se ejecutaba completamente en su memoria principal de solo 8000 caracteres (de seis bits). El compilador podía ejecutarse desde cinta o desde un lector de tarjetas de 2200; no utilizaba almacenamiento adicional en cinta o disco. Mantenía el programa en memoria y cargaba superposiciones que lo transformaban gradualmente, en el mismo lugar, en forma ejecutable, como lo describió Haines. [ 23 ] Este artículo fue reimpreso, editado, en ambas ediciones de Anatomy of a Compiler [ 24 ] y en el manual de IBM "Fortran Specifications and Operating Procedures, IBM 1401". [ 25 ] La forma ejecutable no era completamente lenguaje máquina ; más bien, se interpretaban aritmética de punto flotante, subíndices, entrada/salida y referencias a funciones, precediendo al código P de UCSD Pascal en dos décadas. GOTRAN , una versión simplificada e interpretada de FORTRAN I (con solo 12 tipos de instrucciones en lugar de 32) para operaciones de "carga y ejecución", estaba disponible (al menos para la computadora IBM 1620 de principios de siglo ). [ 26 ] El Fortran moderno, y casi todas las versiones posteriores, están completamente compilados, como se hace con otros lenguajes de alto rendimiento.

El desarrollo de Fortran fue paralelo a la evolución inicial de la tecnología de compiladores , y 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 programas Fortran. [ 27 ] De hecho, el compilador de Fortran era uno de los programas más complejos de cualquier tipo que existían en ese momento, y fue utilizado por el grupo de pruebas de productos de IBM en Poughkeepsie, Nueva York , como parte de las pruebas de aceptación para las computadoras recién construidas. [ 15 ]

FORTRAN

La versión inicial de FORTRAN para el IBM 704 [ 10 ] contenía 32 tipos de sentencias , entre ellas:

  • DIMENSIONy EQUIVALENCEdeclaraciones
  • Declaraciones de asignación
  • Instrucción aritméticaIF de tres vías (ya obsoleta ), que transfería el control a una de tres ubicaciones en el programa dependiendo de si el resultado de la expresión aritmética era negativo, cero o positivo.
  • Instrucciones de control para comprobar excepciones ( IF ACCUMULATOR OVERFLOW, IF QUOTIENT OVERFLOW, y IF DIVIDE CHECK); e instrucciones de control para manipular interruptores de detección y luces de detección ( IF (SENSE SWITCH), IF (SENSE LIGHT), y SENSE LIGHT)
  • GO TO, calculado GO TO, ASSIGN, y asignadoGO TO
  • DObucles
  • E/S formateada: FORMAT, READ, READ INPUT TAPE, WRITE OUTPUT TAPE, PRINT, yPUNCH
  • E/S sin formato: READ TAPE, READ DRUM, WRITE TAPE, yWRITE DRUM
  • Otras E/S: END FILE, REWIND, yBACKSPACE
  • PAUSE, STOP, yCONTINUE
  • FREQUENCYinstrucción (para proporcionar sugerencias de optimización al compilador).

La IFinstrucción aritmética recordaba a (aunque no era fácilmente implementable mediante) una instrucción de comparación triple (CAS: Comparar Acumulador con Almacenamiento) disponible en el 704. Esta instrucción proporcionaba la única forma de comparar números: comprobando su diferencia, con el consiguiente riesgo de desbordamiento. Esta deficiencia se superó posteriormente con las funcionalidades lógicas introducidas en FORTRAN IV.

La FREQUENCYinstrucción se usaba originalmente (y de forma opcional) para proporcionar probabilidades de bifurcación para los tres casos de bifurcación de la IFinstrucción aritmética. También podía usarse para sugerir cuántas iteraciones DOpodría ejecutar un bucle. El primer compilador de FORTRAN usaba esta ponderación para realizar en tiempo de compilación una simulación de Monte Carlo del código generado, cuyos resultados se usaban para optimizar la ubicación de los bloques básicos en la memoria, una optimización muy sofisticada para su época. La técnica de Monte Carlo está documentada en el artículo de Backus et al. sobre esta implementación original, The FORTRAN Automatic Coding System .

La unidad fundamental del programa es el bloque básico; un bloque básico es un segmento de programa que tiene un punto de entrada y un punto de salida. El propósito de la sección 4 es preparar para la sección 5 una tabla de predecesores (tabla PRED) que enumera los bloques básicos y lista, para cada bloque básico, cada uno de los bloques básicos que pueden ser su predecesor inmediato en el flujo, junto con la frecuencia absoluta de cada enlace de bloque básico. Esta tabla se obtiene ejecutando el programa una vez de forma Montecarlo, en la que el resultado de las transferencias condicionales que surgen de las sentencias de tipo IF y las sentencias GO TO calculadas se determina mediante un generador de números aleatorios ponderado adecuadamente según las sentencias FREQUENCY que se hayan proporcionado. [ 19 ]

El primer compilador de FORTRAN informaba de información de diagnóstico deteniendo el programa cuando se encontraba un error y mostrando un código de error en su consola. El programador podía consultar ese código en una tabla de mensajes de error del manual del operador, que le proporcionaba una breve descripción del problema. [ 10 ] : págs. 19-20 [ 28 ] Posteriormente, se incorporó una subrutina de manejo de errores para gestionar errores del usuario, como la división por cero, desarrollada por la NASA, [ 29 ] que informaba a los usuarios de la línea de código que contenía el error.

Diseño fijo y tarjetas perforadas

Código FORTRAN en una tarjeta perforada , que muestra los usos especializados de las columnas 1–5, 6 y 73–80.
Un bloc de formularios de codificación FORTRAN, utilizado por los programadores para preparar programas que luego son perforados en tarjetas por operadores de perforadoras de tarjetas.
El conjunto de tarjetas para un programa completo en FORTRAN para la IBM 7090, creado en 1962.

Antes del desarrollo de los archivos de disco, los editores de texto y las terminales, los programas se introducían con mayor frecuencia en tarjetas perforadas de 80 columnas mediante un teclado perforador , una línea por tarjeta. El conjunto de tarjetas resultante se introducía en un lector de tarjetas para su compilación. Los códigos de las tarjetas perforadas no incluían letras minúsculas ni muchos caracteres especiales, y se ofrecían versiones especiales de la perforadora IBM 026 que imprimían correctamente los caracteres especiales adaptados que se utilizaban en FORTRAN.

Como reflejo de la práctica de entrada mediante tarjetas perforadas, los programas Fortran se escribieron originalmente en un formato de columna fija. Una letra "C" en la columna 1 hacía que toda la tarjeta se tratara como un comentario y el compilador la ignorara. En caso contrario, las columnas de la tarjeta se dividían en cuatro campos:

  • Los números del 1 al 5 constituían el campo de etiqueta: una secuencia de dígitos se utilizaba como etiqueta en instrucciones DO o de control como GO TO e IF, o para identificar una instrucción FORMAT a la que se hacía referencia en una instrucción WRITE o READ. Los ceros iniciales se ignoraban y el 0 no era un número de etiqueta válido.
  • El campo 6 era un campo de continuación: un carácter distinto de un espacio en blanco o un cero hacía que la tarjeta se interpretara como una continuación de la declaración de la tarjeta anterior. Las tarjetas de continuación solían estar numeradas del 1 al 2, etc. , por lo que la tarjeta inicial podía tener un cero en su columna de continuación, lo que no la convertía en una continuación de la tarjeta precedente.
  • Los campos del 7 al 72 contenían la declaración.
  • Se ignoraron los valores 73 a 80 (el lector de tarjetas del IBM 704, el ordenador en el que se desarrolló Fortran, solo podía leer 72 columnas, colocándolas en veinticuatro palabras de 36 bits). [ 30 ]

Las columnas 73 a 80 podían utilizarse, por lo tanto, para información de identificación, como perforar un número de secuencia o texto, que podía usarse para reordenar las tarjetas si se caía una pila; aunque en la práctica esto se reservaba para programas estables de producción. Un IBM 519 podía usarse para copiar un conjunto de programas y agregar números de secuencia. Algunos compiladores antiguos, por ejemplo, los IBM 650, tenían restricciones adicionales debido a las limitaciones de sus lectores de tarjetas. [ 31 ] Las perforadoras de tarjetas podían programarse para tabular hasta la columna 7 y saltar después de la columna 72. Los compiladores posteriores flexibilizaron la mayoría de las restricciones de formato fijo, y el requisito se eliminó en el estándar Fortran 90.

Dentro del campo de la declaración, los caracteres de espacio en blanco (espacios) se ignoraban fuera de un literal de texto. Esto permitía omitir espacios entre tokens para mayor brevedad o incluir espacios dentro de los identificadores para mayor claridad. Por ejemplo, AVG OF Xera un identificador válido, equivalente a AVGOFX, y era una declaración válida, equivalente a porque el cero en la columna 6 se trata como si fuera un espacio, mientras que era en cambio , la asignación de 1.101 a una variable llamada . Nótese la ligera diferencia visual entre una coma y un punto.101010DO101I=1,10110101DO 101I=1,101101010DO101I=1.10110101DO101I=1.101DO101I

Las cadenas de Hollerith , originalmente permitidas solo en las sentencias FORMAT y DATA, iban precedidas de un contador de caracteres y la letra H (por ejemplo, 26HTHIS IS ALPHANUMERIC DATA.), lo que permitía conservar espacios en blanco dentro de la cadena de caracteres. Los errores de conteo eran un problema.

Evolución

FORTRAN II

FORTRAN II de IBM apareció en 1958. La principal mejora fue admitir la programación procedimental al permitir subrutinas y funciones escritas por el usuario que devolvían valores con parámetros pasados ​​por referencia . La instrucción COMMON proporcionó una forma para que las subrutinas accedieran a variables comunes (o globales ). Se introdujeron seis nuevas instrucciones: [ 32 ]

  • SUBROUTINE, FUNCTION, yEND
  • CALLyRETURN
  • COMMON

En opinión del pionero de la informática Robert Bemer , la adición de subrutinas compiladas por separado al lenguaje fue "un desarrollo de importancia equivalente al FORTRAN original". [ 15 ]

En los años siguientes, FORTRAN II añadió soporte para los tipos de datos DOUBLE PRECISIONy COMPLEX.

Los primeros compiladores de FORTRAN no admitían la recursión en las subrutinas. Las primeras arquitecturas informáticas no admitían el concepto de pila, y cuando sí admitían directamente las llamadas a subrutinas, la dirección de retorno solía almacenarse en una ubicación fija adyacente al código de la subrutina (por ejemplo, el IBM 1130 ) o en un registro de máquina específico ( IBM 360 y siguientes ), lo que solo permitía la recursión si el software mantenía una pila y la dirección de retorno se almacenaba en la pila antes de la llamada y se restauraba después de su finalización. La falta de recursión suponía un inconveniente importante para el uso del lenguaje junto con ciertos algoritmos y aplicaciones, [ 33 ] y, de hecho, limitaba la forma en que los programadores podían abordar estos temas. [ 34 ] Aunque no se especificaba en FORTRAN 77, muchos compiladores de F77 admitían la recursión como opción, [ 35 ] y los mainframes Burroughs , diseñados con recursión integrada, lo hacían por defecto. Se convirtió en un estándar en Fortran 90 mediante la nueva palabra clave RECURSIVE. [ 36 ]

Programa sencillo en FORTRAN II

Este programa, para la fórmula de Herón , lee datos de una cinta que contiene tres enteros de 5 dígitos: A, B y C. No hay declaraciones de tipo disponibles: las variables cuyos nombres comienzan con I, J, K, L, M o N son de punto fijo (es decir, enteros); de lo contrario, son de punto flotante. Dado que en este ejemplo se procesarán enteros, los nombres de las variables comienzan con la letra "I". El nombre de una variable debe comenzar con una letra y puede continuar con letras y dígitos, hasta un límite de seis caracteres en FORTRAN II. Si A, B y C no pueden representar los lados de un triángulo en geometría plana, la ejecución del programa finalizará con el código de error "STOP 1". De lo contrario, se imprimirá una línea de salida que mostrará los valores de entrada para A, B y C, seguidos del ÁREA calculada del triángulo como un número de punto flotante que ocupa diez espacios a lo largo de la línea de salida y muestra 2 dígitos después del punto decimal, el .2 en F10.2 de la instrucción FORMAT con la etiqueta 601.

ÁREA DE UN TRIÁNGULO CON UNA FUNCIÓN DE RAÍZ CUADRADA ESTÁNDARENTRADA C - UNIDAD LECTORA DE CINTA 5, ENTRADA DE NÚMEROS ENTEROSSALIDA C - UNIDAD DE IMPRESORA DE LÍNEA 6, SALIDA REALC ERROR DE ENTRADA MOSTRAR ERROR SALIDA CÓDIGO 1 EN EL LISTADO DE CONTROL DE TRABAJOLECTURA DE LA CINTA DE ENTRADA 5 , 501 , IA , IB , ICFORMATO  501 ( 3 I5 )C IA, IB e IC NO PUEDEN SER NEGATIVOS NI CEROC ADEMÁS, LA SUMA DE DOS LADOS DE UN TRIÁNGULOC DEBE SER MAYOR QUE EL TERCER LADO, ASÍ QUE TAMBIÉN COMPROBAMOS ESO.SI ( IA ) 777 , 777 , 701 701 SI ( IB ) 777 , 777 , 702 702 IF ( IC ) 777 , 777 , 703 703 IF ( IA + IB - IC ) 777 , 777 , 704 704 IF ( IA + IC - IB ) 777 , 777 , 705 705 IF ( IB + IC - IA ) 777 , 777 , 799 777 PARADA 1C USANDO LA FÓRMULA DE HERON CALCULAMOS LAÁREA C DEL TRIÁNGULO 799 S = FLOATF ( IA + IB + IC ) / 2.0ÁREA = SQRTF ( S * ( S - FLOATF ( IA )) * ( S - FLOATF ( IB )) *+ ( S - FLOATF ( IC )))ESCRIBIR CINTA DE SALIDA 6 , 601 , IA , IB , IC , ÁREA 601 FORMATO ( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H ÁREA = , F10 . 2 ,+ 13 UNIDADES CUADRADAS H )DETENERFIN

FORTRAN III

IBM también desarrolló FORTRAN III en 1958, que permitía código ensamblador en línea , entre otras características; sin embargo, esta versión nunca se lanzó como producto. Al igual que FORTRAN 704 y FORTRAN II, FORTRAN III incluía características dependientes de la máquina que hacían que el código escrito en él no fuera portable de una máquina a otra, así como soporte para expresiones booleanas. [ 11 ] : 76 Las primeras versiones de FORTRAN proporcionadas por otros proveedores sufrían de la misma desventaja.

FORTRAN IV

IBM comenzó el desarrollo de FORTRAN IV en 1961 como resultado de las demandas de los clientes. FORTRAN IV eliminó las características dependientes de la máquina de FORTRAN II (como READ INPUT TAPE), al tiempo que agregó nuevas características como un LOGICALtipo de datos , expresiones booleanas lógicas y la instrucción lógica IF como alternativa a la instrucción aritmética IF. Se agregaron declaraciones de tipo, junto con una IMPLICITinstrucción para anular las convenciones anteriores de que las variables son INTEGERsi su nombre comienza con I, J, K, L, M, o N; y REALen caso contrario. [ 37 ] : pp.70, 71 [ 38 ] : pp.6–9

FORTRAN IV se lanzó finalmente en 1962, primero para la computadora IBM 7030 ("Stretch"), seguido de versiones para la IBM 7090/7094 en 1963 [ 39 ] y más tarde para la IBM 1401 en 1966. [ 40 ]

Para 1965, se suponía que FORTRAN IV cumpliría con el estándar que estaba desarrollando el Grupo de Trabajo FORTRAN X3.4.3 de la Asociación Estadounidense de Estándares . [ 14 ]

Entre 1966 y 1968, IBM ofreció varios compiladores FORTRAN IV para su System/360 , cada uno nombrado con letras que indicaban la cantidad mínima de memoria que el compilador necesitaba para ejecutarse. [ 41 ] Las letras (F, G, H) coincidían con los códigos utilizados con los números de modelo del System/360 para indicar el tamaño de la memoria, siendo cada incremento de letra un factor de dos mayor: [ 42 ] : pág. 5

  • 1966  : FORTRAN IV F para DOS/360 (64 KB)
  • 1966  : FORTRAN IV G para OS/360 (128 KB)
  • 1968  : FORTRAN IV H para OS/360 (256 KB)

En particular, el compilador FORTRAN H desempeñó un papel importante en el desarrollo de ciertos tipos de enfoques de optimización, como la asignación de un conjunto específico de registros para almacenar los valores de las variables dentro de un bucle. [ 43 ] En general, el compilador tenía tres niveles de optimización posibles, [ 43 ] ya que los desarrolladores del compilador Fortran habían aprendido desde el principio que la capacidad de desactivar la optimización era una necesidad, puesto que aumentaba considerablemente los tiempos de compilación para ejecuciones de programas que a menudo no iban a funcionar de todos modos. [ 15 ] Incluso con la mayor cantidad de memoria principal disponible, el compilador FORTRAN H seguía organizado mediante varias superposiciones. [ 43 ] En general, los compiladores Fortran fueron una fuente importante de ingresos para IBM, con ventas de unos 300  millones de dólares en 1966 (equivalente a 2977  millones de dólares en 2025 ). [ 15 ]

Digital Equipment Corporation mantuvo DECSYSTEM-10 Fortran IV (F40) para PDP-10 desde 1967 hasta 1975. [ 38 ] También había compiladores disponibles para la serie UNIVAC 1100 y los sistemas de las series Control Data 6000 y 7000. [ 44 ]

En el entorno de programación FORTRAN IV de la época, salvo en el utilizado en los sistemas de Control Data Corporation (CDC), solo se colocaba una instrucción por línea. La versión de CDC permitía varias instrucciones por línea separadas por el símbolo $ (dólar). La hoja de cálculo FORTRAN se dividía en cuatro campos, como se describió anteriormente.

Dos compiladores de la época, IBM "G" y UNIVAC, permitían escribir comentarios en la misma línea que las instrucciones, separados por un carácter especial: "espacio maestro": V (perforaciones 7 y 8) para UNIVAC y perforaciones 12/11/0/7/8/9 (FF hexadecimal) para IBM. Estos comentarios no debían insertarse en medio de las tarjetas de continuación. [ 38 ] [ 44 ]

FORTRAN 66

Quizás el desarrollo más significativo en la historia temprana de FORTRAN fue la decisión de la Asociación Estadounidense de Estándares (ahora Instituto Nacional Estadounidense de Estándares (ANSI)) de formar un comité patrocinado por la Asociación de Fabricantes de Equipos Comerciales (BEMA) para desarrollar un estándar estadounidense de FORTRAN . Los dos estándares resultantes, aprobados en marzo de 1966, definieron dos lenguajes: FORTRAN (basado en FORTRAN IV, que había servido como estándar de facto) y FORTRAN Básico (basado en FORTRAN II, pero desprovisto de sus características dependientes de la máquina). El FORTRAN definido por el primer estándar, denominado oficialmente X3.9-1966, se conoció como FORTRAN 66 (aunque muchos continuaron denominándolo FORTRAN IV, el lenguaje en el que se basaba en gran medida el estándar). FORTRAN 66 se convirtió efectivamente en la primera versión estándar de la industria de FORTRAN. FORTRAN 66 incluía:

  • Programa principal, SUBROUTINE, FUNCTION, y BLOCK DATAunidades del programa
  • INTEGER, REAL, DOUBLE PRECISION, COMPLEX, y LOGICALtipos de datos
  • COMMON, DIMENSION, y EQUIVALENCEdeclaraciones
  • DATAinstrucción para especificar valores iniciales
  • EXTERNALFunciones intrínsecas y (por ejemplo, de biblioteca)
  • Declaración de la tarea
  • GO TO, calculado GO TO, asignado GO TOy ASSIGNdeclaraciones
  • Enunciados lógicos IFy aritméticos (de tres vías)IF
  • DOinstrucción de bucle
  • READ, WRITE, BACKSPACE, REWIND, y ENDFILEdeclaraciones para E/S secuencial
  • FORMATdeclaración y formato asignado
  • CALL, RETURN, PAUSE, y STOPdeclaraciones
  • Constantes de Hollerith en enunciados DATAy FORMATcomo argumentos para procedimientos
  • Identificadores de hasta seis caracteres de longitud
  • Líneas de comentarios
  • ENDlínea

La versión de Fortran II del programa Heron mencionada anteriormente requiere varias modificaciones para compilarse como un programa de Fortran 66. Estas modificaciones incluyen el uso de versiones más independientes de la máquina de las sentencias READAND WRITEy la eliminación de las FLOATFfunciones de conversión de tipos innecesarias. Si bien no es obligatorio, las IFsentencias aritméticas pueden reescribirse para utilizar IFsentencias y expresiones lógicas de forma más estructurada.

ÁREA DE UN TRIÁNGULO CON UNA FUNCIÓN DE RAÍZ CUADRADA ESTÁNDARENTRADA C - UNIDAD LECTORA DE CINTA 5, ENTRADA DE NÚMEROS ENTEROSSALIDA C - UNIDAD DE IMPRESORA DE LÍNEA 6, SALIDA REALC ERROR DE ENTRADA MOSTRAR ERROR SALIDA CÓDIGO 1 EN EL LISTADO DE CONTROL DE TRABAJOLEER ( 5 , 501 ) IA , IB , ICFORMATO  501 ( 3 I5 )doC IA, IB e IC NO PUEDEN SER NEGATIVOS NI CEROC ADEMÁS, LA SUMA DE DOS LADOS DE UN TRIÁNGULOC DEBE SER MAYOR QUE EL TERCER LADO, ASÍ QUE TAMBIÉN COMPROBAMOS ESO.SI ( IA . GT . 0 . Y . IB . GT . 0 . Y . IC . GT . 0 ) IR A 10ESCRIBIR ( 6 , 602 )FORMATO  602 ( 42 H IA , IB e IC DEBEN SER MAYORES QUE CERO ) .PARADA 1 10 CONTINUARdoSI ( IA + IB - IC . GT . 0+ . Y . IA + IC - IB . GT . 0+ . Y . IB + IC - IA . GT . 0 ) IR A 20ESCRIBIR ( 6 , 603 )FORMATO  603 ( 50 H LA SUMA DE DOS LADOS DEBE SER MAYOR QUE EL TERCER LADO ).PARADA 1 20 CONTINUARdoC USANDO LA FÓRMULA DE HERON CALCULAMOS LAÁREA C DEL TRIÁNGULOS = ( IA + IB + IC ) / 2.0ÁREA = RAIZ CUADRADA ( S * ( S - IA ) * ( S - IB ) * ( S - IC ))ESCRIBIR ( 6 , 601 ) IA , IB , IC , ÁREA 601 FORMATO ( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H ÁREA = , F10 . 2 ,+ 13 UNIDADES CUADRADAS H )DETENERFIN

Aunque poco adecuado para la mayoría de las aplicaciones militares, Fortran fue, no obstante, uno de los pocos lenguajes de alto nivel aprobados para su uso por el Departamento de Defensa de los Estados Unidos en la década de 1970. [ 34 ] La intención era que todos estos fueran reemplazados por el lenguaje de programación Ada , patrocinado por el Departamento de Defensa , [ 34 ] pero eso no sucedió, y la justificación para la revisión Ada 9X del lenguaje indicó que, dado que aún existía mucho software matemático y aún se escribía en Fortran, era necesario que Ada tuviera soporte para la interfaz explícita con las rutinas de Fortran. [ 45 ]

FORTRAN 77

Programa FORTRAN-77 con salida del compilador, escrito en un CDC 175 en la Universidad RWTH Aachen , Alemania, en 1987.
4.3 BSD para Digital Equipment Corporation (DEC) VAX , mostrando el manual del compilador FORTRAN 77 (f77)

Tras la publicación del estándar FORTRAN 66, los proveedores de compiladores introdujeron varias extensiones a Standard Fortran , lo que llevó al comité X3J3 de ANSI a comenzar en 1969 a trabajar en la revisión del estándar de 1966, bajo el patrocinio de CBEMA , la Asociación de Fabricantes de Equipos Informáticos Empresariales (anteriormente BEMA). Los borradores finales de este estándar revisado circularon en 1977, lo que condujo a la aprobación formal del nuevo estándar FORTRAN en abril de 1978. El nuevo estándar, llamado FORTRAN 77 y oficialmente denominado X3.9-1978, añadió una serie de características importantes para abordar muchas de las deficiencias de FORTRAN 66:

  • Bloques IFy END IFsentencias, con cláusulas opcionales ELSE IF, ELSEpara proporcionar un soporte de lenguaje mejorado para la programación estructurada.
  • DOExtensiones de bucle, incluyendo expresiones de parámetros, incrementos negativos y recuentos de viajes cero.
  • OPENy declaraciones para mejorar la capacidad CLOSEde INQUIREE/S
  • Entrada/salida de archivos de acceso directo
  • CHARACTERtipo de datos, reemplazando las cadenas de Hollerith con instalaciones enormemente ampliadas para la entrada y salida de caracteres y el procesamiento de datos basados ​​en caracteres
  • PARAMETERinstrucción para especificar constantes
  • SAVEDeclaración para variables locales persistentes
  • Nombres genéricos para funciones intrínsecas (por ejemplo, SQRTtambién acepta argumentos de otros tipos, como COMPLEXo REAL*16).
  • Un conjunto de funciones intrínsecas ( LGE, LGT, LLE, LLT) para la comparación léxica de cadenas, basadas en la secuencia de intercalación ASCII . (Estas funciones ASCII fueron exigidas por el Departamento de Defensa de los Estados Unidos en su votación de aprobación condicional ) .
  • Un máximo de siete dimensiones en los arreglos, en lugar de tres. También se generalizaron las expresiones de subíndice permitidas.

En esta revisión del estándar, se eliminaron o modificaron varias características de manera que podrían invalidar programas que anteriormente cumplían con el estándar. (La eliminación era la única alternativa permitida a X3J3 en ese momento, ya que el concepto de " obsolescencia " aún no estaba disponible para los estándares ANSI). Si bien la mayoría de los 24 elementos de la lista de conflictos (véase el Apéndice A2 de X3.9-1978) abordaban lagunas o casos patológicos permitidos por el estándar anterior pero rara vez utilizados, se eliminaron deliberadamente algunas capacidades específicas, tales como:

  • Constantes de Hollerith y datos de Hollerith , como por ejemplo:GREET=12HHELLOTHERE!
  • Lectura de un descriptor H edit (campo Hollerith) en una especificación FORMAT.
  • Sobreindexación de los límites de la matriz mediante subíndices
    DIMENSIÓN A ( 10 , 5 ) Y = A ( 11 , 1 )
  • Transferencia de control fuera y dentro del rango de un bucle DO (también conocido como "Rango Extendido")

Una versión de Fortran 77 del programa Heron no requiere modificaciones a la versión de Fortran 66. Sin embargo, este ejemplo demuestra una limpieza adicional de las sentencias de E/S, incluyendo el uso de E/S dirigida por lista y la sustitución de los descriptores de edición de Hollerith en las FORMATsentencias por cadenas entre comillas. También utiliza sentencias estructuradas IF, END IFen lugar de GOTO/ CONTINUE.

PROGRAMA GARZAÁREA DE UN TRIÁNGULO CON UNA FUNCIÓN DE RAÍZ CUADRADA ESTÁNDARENTRADA C - UNIDAD DE ENTRADA ESTÁNDAR PREDETERMINADA, ENTRADA ENTERASALIDA C - UNIDAD DE SALIDA ESTÁNDAR PREDETERMINADA, SALIDA REALC ERROR DE ENTRADA MOSTRAR ERROR SALIDA CÓDIGO 1 EN EL LISTADO DE CONTROL DE TRABAJOLEER ( * , * ) IA , IB , ICdoC IA, IB e IC NO PUEDEN SER NEGATIVOS NI CEROC ADEMÁS, LA SUMA DE DOS LADOS DE UN TRIÁNGULOC DEBE SER MAYOR QUE EL TERCER LADO, ASÍ QUE TAMBIÉN COMPROBAMOS ESO.SI ( IA . LE . 0 . O . IB . LE . 0 . O . IC . LE . 0 ) ENTONCESESCRIBIR ( * , * ) 'IA, IB e IC deben ser mayores que cero.'PARADA 1FIN SIdoSI ( IA + IB - IC . LE . 0+ . O . IA + IC - IB . LE . 0+ . O . IB + IC - IA . LE . 0 ) ENTONCESESCRIBIR ( * , * ) 'La suma de dos lados debe ser mayor que el tercer lado.'PARADA 1FIN SIdoC USANDO LA FÓRMULA DE HERON CALCULAMOS LAÁREA C DEL TRIÁNGULOS = ( IA + IB + IC ) / 2.0ÁREA = RAIZ CUADRADA ( S * ( S - IA ) * ( S - IB ) * ( S - IC ))ESCRIBIR ( * , 601 ) IA , IB , IC , ÁREA 601 FORMATO ( 'A= ' , I5 , ' B= ' , I5 , ' C= ' , I5 , ' ÁREA= ' , F10 . 2 ,+ 'unidades cuadradas' )DETENERFIN

Transición al estándar ANSI Fortran

El desarrollo de un estándar revisado que sucediera a FORTRAN 77 se retrasaría repetidamente, ya que el proceso de estandarización tenía dificultades para adaptarse a los rápidos cambios en las prácticas de informática y programación. Mientras tanto, durante casi quince años, FORTRAN 77, considerado el "estándar FORTRAN", se convertiría en el dialecto más importante de la historia.

Una importante extensión práctica de FORTRAN 77 fue la publicación de MIL-STD-1753 en 1978. [ 46 ] Esta especificación, desarrollada por el Departamento de Defensa de los Estados Unidos , estandarizó varias características implementadas por la mayoría de los compiladores de FORTRAN 77, pero no incluidas en el estándar ANSI FORTRAN 77. Estas características se incorporarían posteriormente al estándar Fortran 90.

El estándar POSIX IEEE 1003.9 , publicado en 1991, proporcionó a los programadores de FORTRAN 77 un medio sencillo para realizar llamadas al sistema POSIX. [ 47 ] En el documento se definieron más de 100 llamadas , lo que permitió acceder de forma portátil al control de procesos, el manejo de señales, el control del sistema de archivos, el control de dispositivos, el apuntamiento a procedimientos y la E/S de flujo compatibles con POSIX. 

Fortran 90

El sucesor de FORTRAN 77, conocido informalmente como Fortran 90 (y antes como Fortran 8X ), que se había retrasado considerablemente, finalmente se publicó como norma ISO/IEC 1539:1991 en 1991 y como norma ANSI en 1992. Además de cambiar la ortografía oficial de FORTRAN a Fortran, esta importante revisión añadió muchas características nuevas para reflejar los cambios significativos en las prácticas de programación que habían evolucionado desde la norma de 1978.

  • La entrada de código fuente de formato libre elimina la necesidad de omitir las primeras seis posiciones de caracteres antes de introducir instrucciones. Las continuaciones de línea se especifican mediante el &carácter al final de la línea, en lugar de en la columna 6 de la siguiente línea. Los espacios en blanco también adquieren relevancia. Por lo general, los archivos cuyos nombres terminan en .f90indican código fuente de formato libre. El formato de código fuente de formato fijo anterior aún se define, pero se considera obsoleto.
  • Palabras clave de Fortran en minúsculas
  • Identificadores de hasta 31 caracteres de longitud (en el estándar anterior, solo se permitían seis caracteres).
  • Comentarios en línea
  • Capacidad para operar con matrices (o secciones de matrices) en su conjunto, lo que simplifica enormemente los cálculos matemáticos y de ingeniería.
    • Instrucciones de asignación de matrices completas, parciales y enmascaradas, y expresiones de matrices, tales como:X(1:N)=R(1:N)*COS(A(1:N))
    • WHEREinstrucción para la asignación selectiva de matriz
    • constantes y expresiones con valores de matriz,
    • Funciones y constructores de matrices definidos por el usuario.
  • RECURSIVEprocedimientos
  • Los módulos permiten agrupar procedimientos y datos relacionados y ponerlos a disposición de otras unidades del programa, incluyendo la posibilidad de limitar el acceso únicamente a partes específicas del módulo.
  • Un mecanismo de paso de argumentos enormemente mejorado, que permite comprobar las interfaces en tiempo de compilación.
  • Interfaces escritas por el usuario para procedimientos genéricos
  • Sobrecarga del operador
  • Tipos de datos derivados (estructurados)
  • Nueva sintaxis de declaración de tipos de datos, para especificar el tipo de datos y otros atributos de las variables.
  • Asignación dinámica de memoria mediante el ALLOCATABLEatributo y ALLOCATElas DEALLOCATEsentencias
  • POINTERatributo, asignación de puntero y NULLIFYdeclaración para facilitar la creación y manipulación de estructuras de datos dinámicas
  • Estructuras de bucle estructuradas, con una END DOinstrucción para la terminación del bucle y EXITotras CYCLEinstrucciones para terminar DOlas iteraciones normales del bucle de forma ordenada.
  • SELECT CASE, CASE, . . . CASE DEFAULT, END SELECTconstrucción para selección multidireccional
  • Especificación portátil de precisión numérica bajo el control del usuario
  • Nuevos y mejorados procedimientos intrínsecos.

Obsolescencia y eliminaciones

A diferencia de la revisión anterior, Fortran 90 no eliminó ninguna característica. [ 48 ] Cualquier programa FORTRAN 77 que cumpliera con el estándar también cumplía con el estándar bajo Fortran 90, y cualquiera de los dos estándares debería haber sido utilizable para definir su comportamiento.

Se identificó un pequeño conjunto de características como obsoletas y se preveía su eliminación en una futura versión estándar. Todas las funcionalidades de estas características de versiones anteriores pueden ser realizadas por las nuevas características de Fortran. Algunas se conservan para simplificar la adaptación de programas antiguos, pero muchas se eliminaron en Fortran 95.

Ejemplo de "¡Hola, mundo!"

programa holamundo imprimir * , "¡Hola, mundo!" fin programa holamundo

Fortran 95

Fortran 95 , publicado oficialmente como ISO/IEC 1539-1:1997, fue una revisión menor, principalmente para resolver algunos problemas pendientes del estándar Fortran 90. No obstante, Fortran 95 también añadió una serie de extensiones, en particular de la especificación High Performance Fortran :

  • FORALLy WHEREestructuras anidadas para facilitar la vectorización.
  • Procedimientos definidos por el usuarioPUREELEMENTAL
  • Inicialización predeterminada de componentes de tipo derivado, incluida la inicialización de punteros.
  • Se amplió la capacidad de usar expresiones de inicialización para objetos de datos.
  • Inicialización de punteros aNULL()
  • Queda claramente definido que ALLOCATABLElos arrays se desasignan automáticamente cuando salen del ámbito de aplicación.

Se ampliaron varias funciones intrínsecas (por ejemplo, dimse añadió un argumento a la maxlocfunción intrínseca).

Varias características que en Fortran 90 se consideraban "obsoletas" fueron eliminadas en Fortran 95:

  • DOsentencias que utilizan variables de índice REALy sentenciasDOUBLE PRECISION
  • Ramificarse a una END IFdeclaración desde fuera de su bloque
  • PAUSEdeclaración
  • ASSIGNy declaración asignada GO TO, y especificadores de formato asignados
  • HDescriptor de edición de Hollerith.

Un complemento importante para Fortran 95 fue el informe técnico ISO TR-15581: Enhanced Data Type Facilities , conocido informalmente como Allocatable TR. Esta especificación definió un uso mejorado de ALLOCATABLElos arreglos, antes de la disponibilidad de compiladores Fortran totalmente compatibles con Fortran 2003. Dichos usos incluyen ALLOCATABLEarreglos como componentes de tipos derivados, en listas de argumentos ficticios de procedimientos y como valores de retorno de funciones. ( ALLOCATABLELos arreglos son preferibles a POINTERlos arreglos basados ​​en punteros porque ALLOCATABLEFortran 95 garantiza que los arreglos se desasignen automáticamente cuando salen del ámbito, eliminando la posibilidad de fugas de memoria . Además, los elementos de los arreglos asignables son contiguos y el aliasing no es un problema para la optimización de referencias a arreglos, lo que permite a los compiladores generar código más rápido que en el caso de los punteros. [ 49 ] )

Otro complemento importante para Fortran 95 fue el informe técnico ISO TR-15580: Manejo de excepciones de punto flotante , conocido informalmente como IEEE TR. Esta especificación definió la compatibilidad con la aritmética de punto flotante IEEE y el manejo de excepciones de punto flotante .

Compilación condicional y cadenas de longitud variable

Además del "Lenguaje base" obligatorio (definido en ISO/IEC 1539-1  :1997), el lenguaje Fortran 95 también incluía dos módulos opcionales:

  • Cadenas de caracteres de longitud variable (ISO/IEC 1539-2  :2000)
  • Compilación condicional (ISO/IEC 1539-3  : 1998)

que, en conjunto, componen la norma internacional compuesta por varias partes (ISO/IEC 1539).

Según los desarrolladores de estándares, «las partes opcionales describen características autónomas que han sido solicitadas por un número considerable de usuarios y/o implementadores, pero que no se consideran lo suficientemente generales como para que sean obligatorias en todos los compiladores Fortran que cumplen con el estándar». No obstante, si un compilador Fortran que cumple con el estándar ofrece dichas opciones, estas «deben proporcionarse de acuerdo con la descripción de dichas funcionalidades en la parte correspondiente del estándar».

Fortran moderno

El lenguaje definido por los estándares del siglo XXI, en particular debido a su incorporación de soporte para programación orientada a objetos y posteriormente Coarray Fortran , se suele denominar "Fortran Moderno", y el término se utiliza cada vez más en la literatura. [ 50 ]

Fortran 2003

Fortran 2003, publicado oficialmente como ISO/IEC 1539-1:2004, fue una revisión importante que introdujo muchas características nuevas. [ 51 ] Un resumen completo de las nuevas características de Fortran 2003 está disponible en el sitio web oficial del Grupo de Trabajo de Fortran ( ISO/IEC JTC1/SC22 /WG5). [ 52 ]

Según ese artículo, las principales mejoras para esta revisión incluyen:

  • Mejoras en los tipos derivados: tipos derivados parametrizados, control mejorado de la accesibilidad, constructores de estructuras mejorados y finalizadores.
  • Soporte para programación orientada a objetos : extensión y herencia de tipos , polimorfismo , asignación dinámica de tipos y procedimientos ligados a tipos, lo que proporciona soporte completo para tipos de datos abstractos.
  • Mejoras en la manipulación de datos: componentes asignables (que incorporan TR 15581), parámetros de tipo diferidos, VOLATILEatributo , especificación explícita de tipo en constructores de matrices y sentencias allocate, mejoras en punteros, expresiones de inicialización extendidas y procedimientos intrínsecos mejorados.
  • Mejoras de entrada/salida: transferencia asíncrona , acceso a flujos, operaciones de transferencia especificadas por el usuario para tipos derivados, control de redondeo especificado por el usuario durante las conversiones de formato, constantes con nombre para unidades preconectadas, la FLUSHinstrucción, regularización de palabras clave y acceso a mensajes de error.
  • Instrucciones de procedimiento
  • Compatibilidad con aritmética de punto flotante IEEE y manejo de excepciones de punto flotante (incorporando TR 15580).
  • Interoperabilidad con el lenguaje de programación C
  • Compatibilidad con uso internacional: acceso a caracteres ISO 10646 de 4 bytes y opción de decimal o coma en la entrada/salida con formato numérico.
  • Integración mejorada con el sistema operativo anfitrión: acceso a argumentos de línea de comandos , variables de entorno y mensajes de error del procesador.

Un complemento importante para Fortran 2003 fue el informe técnico ISO TR-19767: Mejora de las funcionalidades de los módulos en Fortran. Este informe introdujo submódulos, que hacen que los módulos de Fortran se asemejen más a los módulos de Modula-2 . Son similares a las subunidades privadas de Ada . Esto permite que la especificación e implementación de un módulo se expresen en unidades de programa separadas, lo que mejora el empaquetado de grandes bibliotecas, permite preservar los secretos comerciales al publicar interfaces definitivas y evita las cascadas de compilación.

Fortran 2008

La norma ISO/IEC 1539-1:2010, conocida informalmente como Fortran 2008, fue aprobada en septiembre de 2010. [ 53 ] [ 54 ] Al igual que Fortran 95, se trata de una actualización menor que incorpora aclaraciones y correcciones a Fortran 2003, además de introducir algunas nuevas funcionalidades. Las nuevas funcionalidades incluyen:

  • Submódulos: facilidades de estructuración adicionales para módulos; sustituye a la norma ISO/IEC TR 19767:2005.
  • Coarray Fortran : un modelo de ejecución paralela
  • La construcción DO CONCURRENT : iteraciones de bucle for sin interdependencias.
  • El atributo CONTIGUOUS: para especificar restricciones de diseño de almacenamiento.
  • La construcción BLOCK puede contener declaraciones de objetos con ámbito de construcción.
  • Componentes asignables recursivos : como alternativa a los punteros recursivos en tipos derivados.

El borrador final de la norma internacional (FDIS) está disponible como documento N1830. [ 55 ]

Un complemento a Fortran 2008 es la Especificación Técnica (TS) 29113 de la Organización Internacional de Normalización (ISO) sobre la interoperabilidad adicional de Fortran con C , [ 56 ] [ 57 ] que se presentó a la ISO en mayo de 2012 para su aprobación. La especificación añade soporte para acceder al descriptor de matriz desde C y permite ignorar el tipo y el rango de los argumentos.

Fortran 2018

La revisión Fortran 2018 del lenguaje se conocía anteriormente como Fortran 2015. [ 58 ] Fue una revisión significativa y se publicó el 28 de noviembre de 2018. [ 59 ]

Fortran 2018 incorpora dos especificaciones técnicas publicadas anteriormente:

  • ISO/IEC TS 29113:2012 Mayor interoperabilidad con C [ 60 ]
  • ISO/IEC TS 18508:2015 Funcionalidades paralelas adicionales en Fortran [ 61 ]

Additional changes and new features include support for ISO/IEC/IEEE 60559:2011 (the version of the IEEE floating-point standard before the latest minor revision IEEE 754–2019), hexadecimal input/output, IMPLICIT NONE enhancements and other changes.[62][63][64][65]

Fortran 2018 deleted the arithmetic IF statement. It also deleted non-block DO constructs - loops which do not end with an END DO or CONTINUE statement. These had been an obsolescent part of the language since Fortran 90.

New obsolescences are: COMMON and EQUIVALENCE statements and the BLOCK DATA program unit, labelled DO loops, specific names for intrinsic functions, and the FORALL statement and construct.

Fortran 2023

Fortran 2023 (ISO/IEC 1539-1:2023) was published in November 2023, and can be purchased from the ISO.[66] Fortran 2023 is a minor extension of Fortran 2018 that focuses on correcting errors and omissions in Fortran 2018. It also adds several small features, including conditional expressions and arguments, simple procedures, and an enumerated type capability. Degree- and half revolution based trig functions were also added. Degree-based trig functions were previously a very common vendor extension.

Language features

A full description of the Fortran language features brought by Fortran 95 is covered in the related article, Fortran 95 language features. The language versions defined by later standards are often referred to collectively as 'Modern Fortran' and are described in the literature.

Science and engineering

General relativistic magnetohydrodynamic Fortran simulation of black hole accretion using the BHAC code with cartesian adaptive mesh
Flow around a cylinder computed in Fortran with OpenCL
Velocity and sea surface temperature in the oceans, computed with the NEMO Fortran code

Aunque un artículo de revista de 1968 de los autores de BASIC ya describía a FORTRAN como "anticuado", [ 67 ] se han escrito programas en Fortran durante muchas décadas y existe un vasto conjunto de software Fortran en uso diario en las comunidades científicas y de ingeniería. [ 68 ] Jay Pasachoff escribió en 1984 que "los estudiantes de física y astronomía simplemente tienen que aprender FORTRAN. Existe tanto en FORTRAN que parece improbable que los científicos cambien a Pascal , Modula-2 o cualquier otro". [ 69 ] En 1993, Cecil E. Leith llamó a FORTRAN la "lengua madre de la computación científica", añadiendo que su reemplazo por cualquier otro lenguaje posible "puede seguir siendo una esperanza vana". [ 70 ]

Es el lenguaje principal para algunas de las tareas de supercomputación más intensivas , como en astronomía , modelado climático , química computacional , economía computacional , dinámica de fluidos computacional , física computacional , análisis de datos, [ 71 ] modelado hidrológico , álgebra lineal numérica y bibliotecas numéricas ( LAPACK , IMSL y NAG ), optimización , simulación satelital, ingeniería estructural y predicción meteorológica . [ 72 ] Muchos de los puntos de referencia de punto flotante para medir el rendimiento de los nuevos procesadores de computadora, como los componentes de punto flotante de los puntos de referencia SPEC (por ejemplo, CFP2006 , CFP2017 ) están escritos en Fortran. Los algoritmos matemáticos están bien documentados en Numerical Recipes .

Además, los códigos más modernos en ciencias computacionales suelen utilizar grandes bibliotecas de programas, como METIS para la partición de grafos, PETSc o Trilinos para capacidades de álgebra lineal, deal.II o FEniCS para soporte de mallas y elementos finitos, y otras bibliotecas genéricas. Desde principios de la década de 2000, muchas de las bibliotecas de soporte más utilizadas también se han implementado en C y, más recientemente, en C++ . Por otro lado, lenguajes de alto nivel como Wolfram Language , MATLAB , Python y R se han popularizado en áreas específicas de las ciencias computacionales. En consecuencia, una fracción creciente de programas científicos también se escribe en estos lenguajes de scripting de alto nivel. Por esta razón, se añadieron funcionalidades para la interoperabilidad con C a Fortran 2003 y se mejoraron mediante la especificación técnica ISO/IEC 29113, que se incorporó a Fortran 2018 para permitir una interoperabilidad más flexible con otros lenguajes de programación.

Portabilidad

La portabilidad fue un problema en los primeros tiempos porque no existí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 demás proporcionando características incompatibles. Los estándares han mejorado la portabilidad. El estándar de 1966 proporcionó una sintaxis y semántica de referencia, pero los proveedores continuaron ofreciendo extensiones incompatibles. Aunque los programadores cuidadosos empezaron a darse cuenta de que el uso de extensiones incompatibles causaba costosos problemas de portabilidad y, por lo tanto, utilizaban programas como The PFORT Verifier, [ 73 ] [ 74 ] no fue hasta después del estándar de 1977, cuando la Oficina Nacional de Estándares (ahora NIST ) publicó FIPS PUB 69 , que se exigió a los procesadores adquiridos por el Gobierno de EE. UU. que diagnosticaran las extensiones del estándar. En lugar de ofrecer dos procesadores, prácticamente todos los compiladores terminaron teniendo al menos una opción para diagnosticar las extensiones. [ 75 ] [ 76 ]

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. Fox et al. abordaron este problema en el contexto del estándar de 1966 mediante la biblioteca PORT . [ 74 ] Las ideas allí presentadas se popularizaron y, finalmente, se incorporaron al estándar de 1990 a través de funciones de consulta intrínsecas. La adopción generalizada (ahora casi universal) del estándar IEEE 754 para la aritmética de punto flotante binario ha eliminado prácticamente 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 se abordó con la norma de 2003.

Grandes colecciones de software de biblioteca, que podrían describirse como vagamente relacionadas con cálculos científicos y de ingeniería, como las bibliotecas gráficas, se han escrito en C, lo que planteaba un problema de portabilidad para su acceso. Este problema se ha solucionado mediante la incorporación de la interoperabilidad de C al estándar de 2003.

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

Variantes históricas

Versiones del fabricante

Hasta que se desarrolló el estándar Fortran 66, cada compilador admitía su propia variante de Fortran. Algunas divergían más de la versión principal que otras. Uno de los libros de texto más destacados de la época, A Guide to FORTRAN IV Programming (1965) de Daniel D. McCracken , dedicaba una matriz completa de dos páginas con 24 diferencias de características frente a 29 versiones de fabricantes y ordenadores. [ 14 ] Otro autor de libros de texto de esa época, John M. Blatt , se desesperaba al intentar hacer lo mismo, escribiendo que «los fabricantes tienden a considerar "su propio" FORTRAN como un argumento de venta, y tan pronto como un dialecto de FORTRAN adquiere algún "truco" o algo parecido, otros dialectos intentan superarlo». [ 77 ] No obstante, los programas en Fortran eran mucho más portátiles que los escritos en lenguaje ensamblador, y en la práctica, quienes estaban familiarizados con el Fortran de un fabricante podían adaptarse fácilmente al de otro. [ 78 ]

Fortran 5 fue comercializado por Data General Corp. desde principios de la década de 1970 hasta principios de la de 1980 para las líneas de computadoras Nova , Eclipse y MV . Contaba con un compilador optimizador bastante bueno para las minicomputadoras de la época. El lenguaje se asemeja mucho a FORTRAN 66.

FORTRAN V fue distribuido por Control Data Corporation en 1968 para la serie CDC 6600. El lenguaje se basó en FORTRAN IV. [ 79 ]

Univac también ofreció un compilador para la serie 1100 conocido como FORTRAN V. Un derivado de Univac Fortran V fue Athena FORTRAN.

Las variantes específicas producidas por los proveedores de computadoras científicas de alto rendimiento (por ejemplo, Burroughs , Control Data Corporation (CDC), Cray , Honeywell , IBM , Texas Instruments y UNIVAC ) añadieron extensiones a Fortran para aprovechar características especiales del hardware, como la caché de instrucciones , las tuberías de la CPU y las matrices vectoriales. Por ejemplo, uno de los compiladores FORTRAN de IBM ( H Extended IUP ) tenía un nivel de optimización que reordenaba las instrucciones del código máquina para mantener ocupadas simultáneamente varias unidades aritméticas internas. Otro ejemplo es CFD , una variante especial de FORTRAN diseñada específicamente para la supercomputadora ILLIAC IV , que funciona en el Centro de Investigación Ames de la NASA . IBM Research Labs también desarrolló un lenguaje extendido basado en FORTRAN llamado VECTRAN para el procesamiento de vectores y matrices.

Fortran orientado a objetos era una extensión orientada a objetos de Fortran, en la que los elementos de datos se podían agrupar en objetos, que podían instanciarse y ejecutarse en paralelo. Estaba disponible para Solaris , IRIX , NeXTSTEP , iPSC y nCUBE, pero ya no cuenta con soporte. [ 80 ] [ 81 ]

Estas extensiones específicas para cada máquina han desaparecido con el tiempo o se han incorporado elementos a los estándares principales. La principal extensión que aún se conserva es OpenMP , una extensión multiplataforma para la programación en memoria compartida. Una nueva extensión, Coarray Fortran, está diseñada para admitir la programación paralela.

FOR TRANSIT era el nombre de una versión reducida del lenguaje FORTRAN de IBM 704, que se implementó para IBM 650, utilizando un programa traductor desarrollado en Carnegie a finales de la década de 1950. [ 82 ] El siguiente comentario aparece en el Manual de Referencia de IBM ( Sistema de Codificación Automática FOR TRANSIT C28-4038, Copyright 1957, 1959 por IBM):

El sistema FORTRAN fue diseñado para una máquina más compleja que la 650, por lo que algunas de las 32 instrucciones del Manual de Referencia del Programador de FORTRAN no son compatibles con el sistema FOR TRANSIT. Además, se han añadido ciertas restricciones al lenguaje FORTRAN. Sin embargo, ninguna de estas restricciones hace que un programa fuente escrito para FOR TRANSIT sea incompatible con el sistema FORTRAN para la 704.

Las declaraciones permitidas fueron:

  • Instrucciones de asignación aritmética, por ejemplo:a = b
  • GO to n
  • GO TO (n1, n2, ..., nm), i
  • IF (a) n1, n2, n3
  • PAUSE
  • STOP
  • DO n i = m1, m2
  • CONTINUE
  • END
  • READ n, list
  • PUNCH n, list
  • DIMENSION V, V, V, ...
  • EQUIVALENCE (a,b,c), (d,c), ...

En un mismo programa se pueden utilizar hasta diez subrutinas.

Las instrucciones FOR TRANSIT se limitaban a las columnas 7 a 56. En el IBM 650, se utilizaban tarjetas perforadas para la entrada y salida de datos. Se requerían tres pasadas para traducir el código fuente al lenguaje "IT", compilar las instrucciones IT en lenguaje ensamblador SOAP y, finalmente, generar el programa objeto, que luego podía cargarse en la máquina para ejecutar el programa (utilizando tarjetas perforadas para la entrada de datos y generando los resultados en tarjetas perforadas).

Existían dos versiones para los modelos 650 con un tambor de memoria de 2000 palabras: FOR TRANSIT I (S) y FOR TRANSIT II, ​​esta última para máquinas equipadas con registros de indexación y aritmética decimal de punto flotante automática ( biquinaria ). El apéndice A del manual incluía diagramas de cableado para el panel de control del lector/perforador de tarjetas IBM 533 .

Compiladores de estudiantes

Un programa estudiantil de la Universidad de Cornell de 1973 que utiliza WATFIV, mostrando varios usos de las instrucciones READ e PRINT sin formato.

El primer compilador de FORTRAN estableció un alto estándar de eficiencia para el código compilado. Este objetivo dificultó la creación de compiladores, por lo que generalmente los fabricantes de computadoras se encargaban de ello para impulsar las ventas de hardware. El requisito de eficiencia de ejecución siguió siendo el criterio de diseño principal del lenguaje durante su evolución inicial. [ 8 ] Esto dejó un nicho importante: compiladores rápidos en las fases de compilación y carga, que además ofrecieran buenas herramientas de diagnóstico para el programador, quien a menudo era un estudiante, ya que en ese momento FORTRAN IV se había convertido en una importante herramienta educativa.

WATFOR , introducido en la década de 1960, fue ampliamente utilizado en colegios y universidades. Desarrollado, mantenido y distribuido por la Universidad de Waterloo , WATFOR se basaba principalmente en FORTRAN IV. [ 77 ] Un estudiante que utilizaba WATFOR podía enviar su trabajo FORTRAN por lotes y, si no había errores de sintaxis, el programa pasaba directamente a la ejecución. Esta simplificación permitía a los estudiantes concentrarse en la sintaxis y la semántica de su programa, o en el flujo lógico de ejecución, en lugar de lidiar con el lenguaje de control de trabajos (JCL) de envío, los procesos sucesivos de compilación/enlace/ejecución u otras complejidades de un entorno de mainframe.

Además, WATFOR presentó un superconjunto del lenguaje Fortran, en particular proporcionando los llamados comandos "libres" READcomo PRINTalternativa a las sentencias formateadas del Fortran estándar. READ[ 77 ] Las sentencias de este último permitían una flexibilidad considerable, pero podían ser bastante complicadas, [ 8 ] y a veces estaban sujetas a diferencias del fabricante o directrices específicas del sitio. [ 78 ] Dado que el enfoque formateado causaba dificultades incluso a programadores experimentados, proporcionar una alternativa en un compilador para estudiantes era una clara ventaja. [ 77 ] Una desventaja de este entorno simplificado era que WATFOR no era una buena opción para los programadores que necesitaban las capacidades ampliadas de su(s) procesador(es) anfitrión(es), por ejemplo, WATFOR normalmente tenía un acceso muy limitado a los dispositivos de E/S. WATFOR fue sucedido por WATFIV [ 77 ] y versiones posteriores.WRITE>FORMAT

Otro compilador estudiantil fue PUFFT, y a menor escala, FORGO, Wits Fortran y Kingston Fortran 2.

Lenguajes basados ​​en Fortran

Antes de FORTRAN 77, se utilizaban muchos preprocesadores para proporcionar un lenguaje más amigable, con la ventaja de que el código preprocesado podía compilarse en cualquier máquina con un compilador FORTRAN estándar. [ 83 ] Estos preprocesadores solían admitir programación estructurada , nombres de variables de más de seis caracteres, tipos de datos adicionales, compilación condicional e incluso capacidades de macros . Entre los preprocesadores populares se encontraban EFL , FLECS , iftran , MORTRAN , SFtran , S-Fortran , Ratfor y Ratfiv . EFL, Ratfor y Ratfiv, por ejemplo, implementaban lenguajes similares a C , generando código preprocesado en FORTRAN 66 estándar. El preprocesador PFORT se utilizaba a menudo para verificar que el código se ajustara a un subconjunto portable del lenguaje. A pesar de los avances en el lenguaje Fortran, los preprocesadores siguen utilizándose para la compilación condicional y la sustitución de macros.

programa ; s = 0 i = 1 , n ; s = s + 1 ; detener i ; s = 's' Detener

(programación de línea)

LRLTRAN fue desarrollado en el Laboratorio de Radiación Lawrence para brindar soporte a la aritmética vectorial y al almacenamiento dinámico, entre otras extensiones para la programación de sistemas. La distribución incluía el sistema operativo Livermore Time Sharing System (LTSS).

El estándar Fortran-95 incluye una Parte 3 opcional que define una capacidad de compilación condicional opcional . Esta capacidad se conoce comúnmente como "CoCo".

Muchos compiladores de Fortran han integrado subconjuntos del preprocesador de C en sus sistemas.

SIMSCRIPT es un preprocesador Fortran específico para aplicaciones de modelado y simulación de grandes sistemas discretos.

El lenguaje de programación F fue diseñado para ser un subconjunto limpio de Fortran 95 que intentó eliminar las características redundantes, no estructuradas y obsoletas de Fortran, como la EQUIVALENCEinstrucción. F conserva las características de matrices añadidas en Fortran 90 y elimina las instrucciones de control que quedaron obsoletas por las construcciones de programación estructurada añadidas tanto a FORTRAN 77 como a Fortran 90. F es descrito por sus creadores como "un lenguaje de programación de matrices compilado y estructurado especialmente adecuado para la educación y la computación científica". [ 84 ] Essential Lahey Fortran 90 (ELF90) era un subconjunto similar.

Lahey y Fujitsu se asociaron para crear Fortran para el Microsoft .NET Framework . [ 85 ] Silverfrost FTN95 también es capaz de crear código .NET. [ 86 ]

Ejemplos de código

El siguiente programa demuestra la asignación dinámica de memoria y las operaciones con arreglos, dos características introducidas en Fortran 90. Cabe destacar la ausencia de DObucles y de la instrucción IF/ THENen la manipulación del arreglo; las operaciones matemáticas se aplican al arreglo en su conjunto. También se observa el uso de nombres descriptivos para las variables y un formato de código general que se ajusta al estilo de programación actual. Este ejemplo calcula el promedio de los datos introducidos de forma interactiva.

promedio del programa¡Introduce algunos números y calcula el promedio!Tal como está escrito, si no hay puntos de datos, se devuelve un promedio de cero.Aunque este comportamiento no sea el deseado, simplifica este ejemplo.implícito ningunoreal , asignable :: puntos (:)entero :: número_de_puntosreal :: promedio_puntos , promedio_positivo , promedio_negativopromedio_puntos = 0.promedio_positivo = 0.promedio_negativo = 0.write(*,*)"Input number of points to average:"read(*,*)number_of_pointsallocate(points(number_of_points))write(*,*)"Enter the points to average:"read(*,*)points! Take the average by summing points and dividing by number_of_pointsif(number_of_points>0)average_points=sum(points)/number_of_points! Now form average over positive and negative points onlyif(count(points>0.)>0)positive_average=sum(points,points>0.)/count(points>0.)if(count(points<0.)>0)negative_average=sum(points,points<0.)/count(points<0.)! Print result to terminal stdout unit 6write(*,'(a,g12.4)')'Average = ',average_pointswrite(*,'(a,g12.4)')'Average of positive points = ',positive_averagewrite(*,'(a,g12.4)')'Average of negative points = ',negative_averagedeallocate(points)! free memoryend program average

Humor

Durante la misma reunión del comité de estándares de FORTRAN en la que se eligió el nombre "FORTRAN 77", se incorporó una propuesta técnica satírica a la distribución oficial con el título "La letra O se considera perjudicial ". Esta propuesta pretendía abordar la confusión que a veces surge entre la letra "O" y el cero, eliminando la letra de los nombres de variables permitidos. Sin embargo, el método propuesto consistía en eliminar la letra del conjunto de caracteres por completo (manteniendo así 48 como el número de caracteres léxicos, que el signo de dos puntos había aumentado a 49). Esto se consideró beneficioso, ya que promovería la programación estructurada, al imposibilitar el uso de la notoria GO TOinstrucción como antes. ( FORMATTambién se eliminarían las instrucciones problemáticas). Se señaló que esto "podría invalidar algunos programas existentes", pero que la mayoría de ellos "probablemente no cumplían con el estándar, de todos modos". [ 87 ] [ 88 ]

Cuando X3J3 debatió si el número mínimo de viajes para un bucle DO debería ser cero o uno en Fortran 77, Loren Meissner sugirió un número mínimo de viajes de dos, argumentando (en tono de broma) que si fuera menor que dos, entonces no habría razón para un bucle.

Cuando se empezaron a añadir matrices de longitud supuesta, surgió una controversia sobre el carácter apropiado para separar los límites superior e inferior. En un comentario que analizaba estos argumentos, Walt Brainerd escribió un artículo titulado "Astronomía vs. Gastroenterología" porque algunos defensores habían sugerido usar el asterisco (*), mientras que otros preferían los dos puntos (":").

Las variables cuyos nombres comienzan con las letras I–N tienen un tipo predeterminado de entero, mientras que las que comienzan con cualquier otra letra tienen por defecto el tipo real, aunque los programadores pueden anular los valores predeterminados con una declaración explícita. [ 89 ] Esto dio lugar a la broma: "En FORTRAN, DIOS es REAL (a menos que se declare como ENTERO)".

La revista American Mathematical Monthly (noviembre de 1978) publicó una reseña de una sola línea en verso: "Un enfoque animado para seducir, / De una manera bastante similar a Seuss. / Escrito a mano, con dibujos y muchas carcajadas / Dispuesto a hacer que Fortran parezca transparente."

Véase también

Referencias

  1. "Especificaciones de la capilla (Agradecimientos)" (PDF) . Cray Inc. 1 de octubre de 2015. Archivado (PDF) del original el 5 de febrero de 2016. Recuperado el 14 de enero de 2016 .
  2. Informe de una visita para debatir sobre lenguajes de programación comunes en Checoslovaquia y Polonia, 1963, John A. Gosden (Editor), Roger E. Gay, John L. Jones, Jack N. Merner, Christopher J. Shaw
  3. John Backus. "La historia de FORTRAN I, II y III" (PDF) . softwarepreservation.computerhistory.org. Archivado (PDF) del original el 26 de julio de 2007. Recuperado el 8 de febrero de 2026 .
  4. Wilson, Leslie B. (2001). Lenguajes de programación comparativos, tercera edición . Addison-Wesley. pág. 16. ISBN  0-201-71012-9El manual de Fortran I se publicó en 1956, pero no fue hasta 1958 cuando los compiladores exitosos lograron ejecutar los programas correctamente.
  5. Loh, Eugene (18 de junio de 2010). "El lenguaje de programación HPC ideal" . ACM Queue . 8 (6): 30– 38. doi : 10.1145/1810226.1820518 .
  6. "HPL – Una implementación portátil del benchmark Linpack de alto rendimiento para computadoras con memoria distribuida" . Consultado el 21 de febrero de 2015 .
  7. "P13. ¿Cuáles son los puntos de referencia?" . Descripción general – CPU 2017 . ESPECIFICACIONES . Consultado el 13 de noviembre de 2019 .
  8. 1 2 3 4 Pratt, Terrence W. (1975). Lenguajes de programación: diseño e implementación . Englewood Cliffs, Nueva Jersey: Prentice Hall. págs. 314–315 , 325–326 . ISBN  0-13-730432-3.
  9. Wilson, Leslie B. (2001). Lenguajes de programación comparativos, tercera edición . Addison-Wesley. pág. 18. ISBN  0-201-71012-9Otro problema era que no existía un estándar para Fortran, por lo que versiones ligeramente diferentes... probablemente fallarían al usarse con un compilador diferente.
  10. 1 2 3 4 5 Backus, John Warner ; Beeber, RJ; Best, Sheldon F.; Goldberg, Richard ; Herrick, Harlan L.; Hughes, RA; Mitchell, LB; Nelson, Robert A.; Nutt, Roy ; Sayre, David ; Sheridan, Peter B.; Stern, Harold; Ziller, Irving (15 de octubre de 1956). Sayre, David (ed.). El sistema de codificación automática FORTRAN para el IBM 704 EDPM: Manual de referencia del programador (PDF) . Nueva York, EE. UU.: División de Ciencias Aplicadas y Departamento de Investigación de Programación, International Business Machines Corporation . págs. 2, 19–20 . Archivado (PDF) del original el 4 de julio de 2022. Recuperado el 4 de julio de 2022 . (2+51+1 páginas)
  11. 1 2 3 4 5 6 Backus, John (octubre-diciembre de 1998). "La historia de Fortran I, II y III" (PDF) . IEEE Annals of the History of Computing . 20 (4): 68–78 . Bibcode : 1998IAHC...20d..68B . doi : 10.1109/85.728232 . Archivado (PDF) del original el 3 de marzo de 2016. Recuperado el 17 de junio de 2020 .
  12. "FORTRAN: El lenguaje de programación pionero" . IBM . 7 de marzo de 2012. Consultado el 19 de julio de 2017 .
  13. "FORTRAN" . Enciclopedia Británica . 14 de junio de 2021. Consultado el 19 de julio de 2021 .
  14. 1 2 3 McCracken, Daniel D. (1965). A Guide to FORTRAN IV Programming . Nueva York: Wiley. pp. v, 3, 132– 133. LCCN 65-26848 .  
  15. 1 2 3 4 5 6 7 Bemer, Robert (1966). Prólogo. The Programmer's FORTRAN II and IV: A Complete Reference . Por Lecht, Charles P. Nueva York: McGraw-Hill Book Company. pp. vii– xi. 
  16. Chapman, Stephen J. (2018). Fortran para científicos e ingenieros (Cuarta ed.). Nueva York : McGraw-Hill Education . pág. 13. ISBN   978-0-07-338589-1.
  17. El "conjunto de caracteres Fortran" definido por el estándar FORTRAN 77 era el conjunto mínimo de caracteres que los compiladores que cumplían con el estándar debían admitir; en la práctica, muchos compiladores FORTRAN 77 admitían el conjunto completo de caracteres ASCII .
  18. Fortran 90 (PDF) (Informe). ISO/IEC. 1991. Introducción, pág. 14. ISO/IEC 1539:1991(E) . Consultado el 31 de mayo de 2026 .
  19. 1 2 J. W. Backus ; RJ Beeber; S. Best; R. Goldberg; LM Haibt ; HL Herrick; RA Nelson; D. Sayre ; PB Sheridan; H. Stern; L. Ziller; RA Hughes; R. Nutt (febrero de 1957). El sistema de codificación automática FORTRAN (PDF) . Conferencia Conjunta de Computación del Oeste. págs. 188–198 . doi : 10.1145/1455567.1455599 . 
  20. ^ Mindell, David (2008). Apolo digital . Cambridge, MA: MIT Press. pag. 99.ISBN  978-0-262-13497-2. JSTOR j.ctt5hhn02 . OCLC 228031739 .  
  21. Brian Bergstein (20 de mayo de 2007). "Muere John Backus, creador de Fortran" . MSNBC . Consultado el 29 de octubre de 2018 .
  22. "FORTRAN: El primer lenguaje de programación para cálculos numéricos" . Blog de SciHi . 15 de octubre de 2019. Archivado del original el 4 de enero de 2021. Consultado el 23 de noviembre de 2020 .
  23. Haines, LH (1965). "Compilación en serie y el compilador FORTRAN 1401". IBM Systems Journal . 4 (1): 73– 80. doi : 10.1147/sj.41.0073 .
  24. Lee, John AN (1967). Anatomía de un compilador . Van Nostrand Reinhold.
  25. Especificaciones y procedimientos operativos de Fortran, IBM 1401 (PDF) . IBM. C24-1455-2. Archivado (PDF) del original el 23 de septiembre de 2017.
  26. "Asunto: GOTRAN EN EL PAQUETE DE ALMACENAMIENTO EN DISCO IBM 1316 (N.º de serie K7402)" . Archivado del original el 21 de febrero de 2006. Consultado el 3 de marzo de 2006 .
  27. Padua, David (enero-febrero de 2000). "El compilador Fortran I" (PDF) . Computing in Science & Engineering . 2 (1): 70– 75. Bibcode : 2000CSE.....2a..70P . doi : 10.1109/5992.814661 . Archivado del original (PDF) el 17 de junio de 2020. El compilador Fortran I fue el primer gran proyecto en optimización de código. Abordó problemas de crucial importancia cuya solución general fue un importante foco de investigación en tecnología de compiladores durante varias décadas. Muchas técnicas clásicas para el análisis y la optimización de compiladores pueden rastrear sus orígenes e inspiración hasta el compilador Fortran I.
  28. El sistema de codificación automática FORTRAN para el IBM 704 EDPM : Manual preliminar del operador (PDF) . Departamento de Investigación de Programación, International Business Machines Corporation. 8 de abril de 1957. págs. 6–37 . Archivado (PDF) del original el 26 de febrero de 2014.  
  29. Armstead, Betty Jo (21 de enero de 2015). "Mis años en la NASA" (PDF) . Museo de Naturaleza y Ciencia de Denver . Archivado del original (PDF) el 24 de diciembre de 2019. Recuperado el 15 de junio de 2019 .
  30. Manual de referencia, Sistema de procesamiento de datos IBM 7090 (PDF) . 1961. A22-6528-3. Archivado (PDF) del original el 1 de diciembre de 2008.
  31. Manual de información general de Fortran II (PDF) . 1963. Archivado (PDF) del original el 26 de abril de 2005. Recuperado el 19 de noviembre de 2014 .
  32. Manual de referencia, FORTRAN II para el sistema de procesamiento de datos IBM 704 (PDF) . 1958. C28-6000-2. Archivado (PDF) del original el 30 de octubre de 2005.
  33. Horowitz, Ellis; Sahni, Sartaj (1978). Fundamentos de algoritmos informáticos . Rockville, Maryland: Computer Science Press. pág. 17. ISBN  0-914894-22-6.
  34. 1 2 3 Booch, Grady (1983). Ingeniería de software con Ada . Menlo Park, California: Benjamin/Cummings Publishing Company. págs. 3, 15, 44. ISBN  0-8053-0600-5.
  35. Feldman, SI ; Weinberger, PJ (1 de agosto de 1978). "Un compilador portátil de Fortran 77" (PDF) . 2.4. Recursión y 2.5. Almacenamiento automático.
  36. "Recursión" . Notas de usuario sobre programación en FORTRAN (UNFP) . Consultado el 15 de septiembre de 2014 .
  37. Lenguaje FORTRAN IV para IBM System/360, Formulario C28-6515-6 (PDF) . IBM. Abril de 1966.
  38. 1 2 3 "Manual de referencia para programadores de DECSYSTEM-10 FORTRAN IV (F40)" (PDF) . Github . Digital Equipment Corporation . Consultado el 15 de abril de 2022 .
  39. Sistemas de programación IBM 7090/7094 Lenguaje FORTRAN IV (PDF) . IBM . Mayo de 1963. C28-6274-1.
  40. Especificaciones del lenguaje Fortran IV, especificaciones del programa y procedimientos operativos, IBM 1401, 1440 y 1460 (PDF) . IBM. Abril de 1966. C24-3322-2. Archivado (PDF) del original el 23 de septiembre de 2017.
  41. "Lista de implementaciones de FORTRAN 1957 – 1967" . Grupo de especialistas en Fortran de la BCS . Anales del IEEE. 2017. Consultado el 17 de octubre de 2017 .
  42. Características funcionales del IBM System/360 Modelo 50 (PDF) . IBM. 1967. A22-6898-1. Archivado (PDF) del original el 29 de octubre de 2021 vía bitsavers.
  43. 1 2 3 Aho, Alfred V.; Ullman, Jeffrey D. (1977). Principios del diseño de compiladores . Reading, Massachusetts: Addison-Wesley. págs. 555, 557, 558–560 . ISBN  0-201-00022-9.
  44. 1 2 FORTRAN IV . OCLC 20673993 . 
  45. Fundamentos del lenguaje de programación Ada . Cambridge, Massachusetts: Intermetrics, Inc. 1994. págs. 6-16. Equipo de mapeo/revisión de Ada 9X, versión preliminar 5.0
  46. MIL-STD 1753 - FORTRAN, Suplemento del Departamento de Defensa a la Norma Nacional Estadounidense X3.9-1978 . Oficina de Imprenta del Gobierno de los Estados Unidos . 9 de noviembre de 1978. Consultado el 21 de abril de 2024 .
  47. IEEE 1003.9-1992 – Norma IEEE para Tecnología de la Información – Interfaces de lenguaje POSIX(R) FORTRAN 77 – Parte 1: Enlace para la interfaz de programación de aplicaciones (API) del sistema . IEEE . Consultado el 24 de noviembre de 2018 .
  48. ANSI X3.198-1992 (R2002) (Fortran 90), Apéndice B.1.
  49. "Referencia de Fortran 95" . Gnu.Org . Consultado el 10 de mayo de 2014 .
  50. Lionel, Steve (30 de diciembre de 2013). "El doctor Fortran en 'Es un mundo Fortran moderno'"" . Grupo de discusión del foro Fortran de Intel (antes DEC) . Intel . Consultado el 11 de abril de 2022 .
  51. "Fortran 2003 – Último borrador de trabajo" . Gnu.Org . Consultado el 10 de mayo de 2014 .
  52. "El Grupo de Trabajo 5 finaliza el procesamiento de Fortran 2003 y el TR" . nag.co.uk. 14 de mayo de 2004. Archivado del original el 5 de agosto de 2004. Consultado el 3 de abril de 2023 .También se puede descargar como archivo PDF en "Las nuevas características de Fortran 2003" (PDF) . Archivado (PDF) del original el 15 de enero de 2018. Consultado el 3 de abril de 2023 .
  53. "N1836, Resumen de la votación/Tabla de respuestas sobre ISO/IEC FDIS 1539-1, Tecnología de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base" (PDF) . Archivado (PDF) del original el 15 de enero de 2018.
  54. "Fortran 2008 – Último borrador de trabajo" (PDF) . Gnu.Org. Archivado (PDF) del original el 12 de mayo de 2014. Recuperado el 10 de mayo de 2014 .
  55. N1830, Tecnología de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base
  56. ISO/IEC TS 29113:2012 – Tecnología de la información – Mayor interoperabilidad de Fortran con C.
  57. "Borrador de la Especificación Técnica (TS) 29113" (PDF) . wg5-fortran.org . Archivado (PDF) del original el 15 de enero de 2018.
  58. "El doctor Fortran en "Dieciocho es el nuevo quince"" . Software.intel.com . Consultado el 20 de noviembre de 2017 .
  59. "Fortran 2018" . ISO . Consultado el 30 de noviembre de 2018 .
  60. "Mayor interoperabilidad con C" (PDF) . ISO. Archivado (PDF) del original el 1 de diciembre de 2017. Recuperado el 20 de noviembre de 2017 .
  61. "Funciones paralelas adicionales en Fortran" . ISO . Consultado el 20 de noviembre de 2017 .
  62. "Las nuevas características de Fortran 2015" . ISO . Consultado el 23 de junio de 2017 .
  63. "Doctor Fortran en "Una puerta se cierra"" . Software.intel.com . Consultado el 21 de septiembre de 2015 .
  64. "Doctor Fortran se vuelve holandés: Fortran 2015" . Software.intel.com. Archivado del original el 1 de abril de 2017. Recuperado el 19 de noviembre de 2014. El Comité de Estándares ISO Fortran celebró su reunión anual en Delft, [...]
  65. Documento de interpretación de Fortran 2018 (PDF) . 9 de octubre de 2018.
  66. "Fortran 2023" . wg5-fortran.org . Consultado el 30 de noviembre de 2023 .
  67. Kemeny, John G.; Kurtz, Thomas E. (11 de octubre de 1968). "Dartmouth Time-Sharing" . Science . 162 (3850): 223–228 . Bibcode : 1968Sci...162..223K . doi : 10.1126/science.162.3850.223 . PMID 5675464 . 
  68. Phillips, Lee (8 de mayo de 2014). "El futuro de la computación científica: ¿Puede algún lenguaje de programación superar a un gigante de la década de 1950?" . Ars Technica . Consultado el 8 de mayo de 2014 .
  69. Pasachoff, Jay M. (abril de 1984). "Científicos: FORTRAN vs. Modula-2" . BYTE (carta). pág. 404. Consultado el 6 de febrero de 2015 . 
  70. Galperin, Boris (1993). "26". Simulación de grandes remolinos de flujos geofísicos y de ingeniería complejos . Londres: Cambridge. pág. 573. ISBN  978-0-521-43009-8.
  71. Brandt, Siegmund (1970). Métodos estadísticos y computacionales en el análisis de datos . North-Holland Publishing Company. pp. Prefacio. ISBN  0-7204-2033-4.
  72. Curcic, Milan (24 de noviembre de 2020). Modern Fortran: Building efficient parallel applications . Simon and Schuster. ISBN 978-1-61729-528-7.
  73. Gaffney, PW; Wooten, JW (1 de mayo de 1980). Métodos para garantizar la estandarización del software FORTRAN (Informe). Laboratorio Nacional de Oak Ridge. OSTI 5361454. Biblioteca PFORT... 
  74. 1 2 P. A. Fox (1977). "Port — Una biblioteca de subrutinas matemáticas portátiles". Una biblioteca de subrutinas matemáticas portátiles . Lecture Notes in Computer Science. Vol. 57. pp. 165–177 . doi : 10.1007/3-540-08446-0_42 . ISBN   978-3-540-08446-4. PUERTO ... escrito en (PFORT) .. ANS Fortran
  75. Whitten, Douglas E.; Demaine, Paul AD (1975). "Un Fortran independiente de la máquina y la configuración: Fortran portátil {PFortran}". IEEE Transactions on Software Engineering . SE-1 (1). Institute of Electrical and Electronics Engineers (IEEE): 111– 124. doi : 10.1109/tse.1975.6312825 . ISSN 0098-5589 . S2CID 16485156 .  
  76. "Problemas de portabilidad" . Archivado del original el 8 de marzo de 2021. Recuperado el 12 de noviembre de 2018. ... analiza la portabilidad de Fortran.
  77. 1 2 3 4 5 Blatt, John M. (1971). Introducción a la programación en FORTRAN IV: Uso de los compiladores WATFOR/WATFIV . Pacific Palisades, California: Goodyear Publishing Company. pp. iii, 312. ISBN  0-87620-440-X.
  78. 1 2 Popkin, Gary S.; Pike, Arthur H. (1977). Introducción al procesamiento de datos . Boston: Houghton Mifflin Company. págs. 304–305 , 309–310 . ISBN  0-395-20628-6.
  79. Healy, MJR (1968). "Hacia FORTRAN VI" . Fortran científico avanzado por CDC . CDC. págs. 169–172 . Archivado del original el 5 de julio de 2009. Recuperado el 10 de abril de 2009 . 
  80. "The NeXT Fortran" . Journal of Object-oriented Programming . 2 (4). SIGS Publications: 88. Abril de 1989 vía Google Books.
  81. "Actualizaciones" . InfoWorld . 13 (25). IDG Publications: 19. 24 de junio de 1991 vía Google Books.
  82. Perlis, AJ; Smith, JW; Van Zoeren, Traductor interno de RRHH (TI) Un compilador para el IBM 650 (PDF) . Centro de Computación, Instituto Tecnológico Carnegie. Archivado (PDF) del original el 2 de octubre de 2012.
  83. Meissner, Loren (1 de septiembre de 1975). "Sobre la extensión de las estructuras de control de Fortran para facilitar la programación estructurada" . ACM SIGPLAN Notices . 10 (9). acm.org: 19–30 . doi : 10.1145/987316.987320 .
  84. "Página principal del lenguaje de programación F" . Fortran.com. Archivado del original el 9 de enero de 2015. Consultado el 19 de noviembre de 2014 .
  85. "Sistema de lenguaje Fortran para .NET" . Archivado del original el 18 de octubre de 2014.
  86. "FTN95: Fortran 95 para Windows" . Silverfrost.com . Consultado el 19 de noviembre de 2014 .
  87. Distribución posterior a la reunión de X3J3 para la reunión celebrada en el Laboratorio Nacional de Brookhaven en noviembre de 1976.
  88. "La obliteración de O". Computer Weekly . 3 de marzo de 1977.
  89. Reglas para la tipificación de datos (Referencia del lenguaje FORTRAN 77) . Consultado el 29 de septiembre de 2016 .

Lecturas adicionales

Estándares lingüísticos
  • ANSI x3.9-1966. Norma estadounidense FORTRAN (PDF) . Instituto Nacional Estadounidense de Estándares. Archivado del original (PDF) el 15 de mayo de 2011. Consultado el 5 de mayo de 2010 .Conocido informalmente como FORTRAN 66.
  • ANSI x3.9-1978. Estándar Nacional Estadounidense – Lenguaje de Programación FORTRAN . Instituto Nacional Estadounidense de Estándares. Archivado del original el 29 de octubre de 2013. Recuperado el 11 de diciembre de 2007 .También conocido como ISO 1539–1980, y de forma informal como FORTRAN 77.
  • ANSI X3.198-1992 (R2002) / ISO/IEC 1539:1991. Norma nacional estadounidense – Lenguaje de programación Fortran Extended . Instituto Nacional Estadounidense de Estándares / ISO/IEC.Conocido informalmente como Fortran 90.
  • ISO/IEC 1539-1:1997. Tecnología de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base (PDF) . Archivado del original (PDF) el 18 de agosto de 2011. Recuperado el 13 de diciembre de 2007 .Conocido informalmente como Fortran 95. Este estándar consta de dos partes adicionales. La Parte 1 ha sido adoptada formalmente por ANSI.
  • ISO/IEC 1539-1:2004. Tecnología de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base (PDF) . Archivado del original (PDF) el 31 de julio de 2023.Conocido informalmente como Fortran 2003.
  • ISO/IEC 1539-1:2010 (Borrador final de la norma internacional). Tecnología de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base (PDF) .Conocido informalmente como Fortran 2008.
Normas relacionadas
  • Kneis, Wilfried (octubre de 1981). "Borrador del estándar industrial en tiempo real FORTRAN" . ACM SIGPLAN Notices . 16 (7): 45– 60. doi : 10.1145/947864.947868 . ISSN 0362-1340 . S2CID 8662381 .  
  • ISO 8651-1:1988 Sistemas de procesamiento de información – Gráficos por computadora – Enlaces de lenguaje del sistema gráfico de núcleo (GKS) – Parte 1: FORTRAN . Ginebra, Suiza: ISO . 1988.
Otro material de referencia
  • Norma ECMA sobre FORTRAN (PDF) . Asociación Europea de Fabricantes de Ordenadores. Abril de 1965. Archivado (PDF) del original el 10 de mayo de 2008. Consultado el 17 de noviembre de 2014 .
  • Manual de referencia de FORTRAN 77 4.0 (PDF) . Sun Microsystems, Inc. 1995. Archivado del original (PDF) el 5 de enero de 2012. Consultado el 17 de noviembre de 2014 .
  • "Formulario de codificación FORTRAN" (PDF) . IBM . Archivado del original (PDF) el 8 de junio de 2015. Consultado el 17 de noviembre de 2014 .
  • Lenguaje Fortran IV para IBM System/360 y System/370 (PDF) . IBM . Mayo de 1974. Archivado del original (PDF) el 6 de abril de 2011. Consultado el 17 de noviembre de 2014 .
  • Goerz, Michael (2014). "Modern Fortran Reference Card" (PDF) . Archivado (PDF) del original el 14 de diciembre de 2014. Recuperado el 14 de diciembre de 2014 .
Libros
  • Adams, Jeanne C .; Brainerd, Walter S.; Hendrickson, Richard A.; Maine, Richard E.; Martin, Jeanne T.; Smith, Brian T. (2009). The Fortran 2003 Handbook (1.ª  ed.). Springer . ISBN 978-1-84628-378-9.
  • Akin, JE (2003). Programación orientada a objetos mediante Fortran 90/95 . Cambridge, Nueva York: Cambridge University Press. ISBN 978-0-521-52408-7OCLC 49906306 
  • Arjen, Markus (2012), "Fortran moderno en la práctica", Cambridge Univ. Press, ISBN 978-1-13908479-6.
  • Brainerd, WS; Goldberg, CH; Adams, JC (1996). Guía del programador para Fortran 90 (3.ª  ed.). Springer. ISBN 978-0-387-94570-5.
  • Brainerd, Walter (2015). Guía de programación en Fortran 2008. Londres: Springer. ISBN 978-1-4471-6758-7OCLC 920530344 
  • Chapman, Stephen J. (2018). Fortran para científicos e ingenieros (Cuarta  ed.). Nueva York : McGraw-Hill Education . pp.  xxiv + 1024. ISBN 978-0-07-338589-1.
  • Chivers, Ian; Sleightholme, Jane (2018). Introducción a la programación con Fortran (4.ª  ed.). Springer. ISBN 978-3-319-75501-4.
  • Clerman, Norman (2012). Modern Fortran  : style and usage . Nueva York: Cambridge University Press. ISBN 978-0-521-51453-8OCLC 776162717 
  • Curcic, Milan (2020). Fortran moderno: creación de aplicaciones paralelas eficientes . Shelter Island, NY: Manning Publications Company. ISBN 978-1-61729-528-7OCLC 1256806439 
  • Ellis, TMR; Phillips, Ivor R.; Lahey, Thomas M. (1994). Programación en Fortran 90 (1.ª  ed.). Addison Wesley. ISBN 978-0-201-54446-6.
  • Etter, DM (1990). FORTRAN 77 estructurado para ingenieros y científicos (3.ª  ed.). The Benjamin/Cummings Publishing Company, Inc. ISBN 978-0-8053-0051-2.
  • Kaufman, RE (1978). Un libro para colorear de FORTRAN (PDF) (1.ª  ed.). The MIT Press. ISBN 0-262-61026-4.
  • Kerrigan, JF (1993). Migración a Fortran 90 (1.ª  ed.). O'Reilly & Associates, Inc. ISBN 1-56592-049-X.
  • Kupferschmid, Michael (2002). Fortran clásico: Programación para aplicaciones científicas y de ingeniería . Marcel Dekker (CRC Press). ISBN 978-0-8247-0802-3.( Materiales complementarios )
  • Lorenzo, Mark Jones (2019). Abstraer la máquina: La historia del lenguaje de programación FORTRAN (FORmula TRANslation) . Publicado de forma independiente. ISBN 978-1082395949.
  • Loukides, Mike (1990). Unix para programadores de FORTRAN . Sebastopol, CA: O'Reilly & Associates, Inc. ISBN 0-937175-51-X.
  • McCracken, Daniel D. (1961). Una guía para la programación en FORTRAN . Nueva York: Wiley. LCCN 61016618 . 
  • Metcalf, Michael; Reid, John; Cohen, Malcolm; Bader, Reinhold (2024). Modern Fortran Explained: Incorporating Fortran 2023 (6.ª  ed.). Oxford University Press. ISBN 9780198876595.
  • Nyhoff, Larry; Sanford Leestma (1995). FORTRAN 77 para ingenieros y científicos con una introducción a Fortran 90 (4.ª  ed.). Prentice Hall . ISBN 978-0-13-363003-9.
  • Page, Clive G. (1988). Guía del programador profesional para Fortran77 (  edición del 7 de junio de 2005). Londres: Pitman. ISBN 978-0-273-02856-7. Consultado el 4 de mayo de 2010 .
  • Press, William H. (1996). Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing . Cambridge, Reino Unido: Cambridge University Press. ISBN 978-0-521-57439-6.
  • Ruetsch, Gregory; Fatica, Massimiliano (2013). CUDA Fortran para científicos e ingenieros (1.ª  ed.). Elsevier . pág.  338. ISBN 9780124169708.
  • Sleighthome, Jane; Chivers, Ian David (1990). Interactive Fortran 77: A Hands-On Approach . Computers and their applications (2.ª  ed.). Chichester: E. Horwood. ISBN 978-0-13-466764-5Archivado del original el 12 de marzo de 2014. Consultado el 12 de marzo de 2014 .
Artículos
  • Allen, FE (septiembre de 1981). "Una historia de la tecnología de procesadores de lenguaje en IBM". IBM Journal of Research and Development . 25 (5): 535– 548. doi : 10.1147/rd.255.0535 . S2CID 14149353 . 
  • JW Backus ; RJ Beeber; S. Best; R. Goldberg; LM Haibt ; HL Herrick; RA Nelson; D. Sayre ; PB Sheridan; H. Stern; L. Ziller; RA Hughes; R. Nutt (febrero de 1957). El sistema de codificación automática FORTRAN (PDF) . Conferencia Conjunta de Computación del Oeste. págs. 188–198 . doi : 10.1145/1455567.1455599 . 
  • Chivers, Ian D.; Sleightholme, Jane (2022). "Soporte del compilador para los estándares Fortran 2008 y 2018" .
  • Pigott, Diarmuid (2006). "FORTRAN – Backus et al. compilador de alto nivel (lenguaje informático)" . La Enciclopedia de Lenguajes Informáticos . Universidad Murdoch . Archivado del original el 8 de octubre de 2009. Recuperado el 5 de mayo de 2010 .
  • Roberts, Mark L.; Griffiths, Peter D. (1985). "Consideraciones de diseño para IBM Personal Computer Professional FORTRAN, un compilador optimizador". IBM Systems Journal . 24 (1): 49– 60. doi : 10.1147/sj.241.0049 .
  • ISO/IEC JTC1/SC22/WG5 : el organismo oficial que regula los estándares de Fortran.
  • Documentos de estándares Fortran — Estándares GFortran
  • fortran-lang.org (2020).
  • Historia de FORTRAN y FORTRAN II — Museo de Historia de la Computación
  • Valmer Norrod, et al.: Curso de autoaprendizaje de programación FORTRAN—Volumen I—libro de texto , Computer Science Corporation El Segundo, California (abril de 1970). NASA (N70-25287).
  • Valmer Norrod, Sheldom Blecher y Martha Horton: Un curso de autoaprendizaje de programación FORTRAN—Volumen II—libro de ejercicios , NASA CR-1478 (abril de 1970), NASA (N70-25288).
  • Introducción al lenguaje de programación Fortran , por Reinhold Bader, Nisarg Patel, Centro de Supercomputación Leibniz .
  • Un tutorial de coarray
  • Victor Eijkhout  : Introducción a la programación científica en C++17/Fortran2008, El arte de la computación de alto rendimiento, volumen 3 (PDF). Archivado el 5 de febrero de 2023 en Wayback Machine .