Fortran

Lenguaje de programación de propósito general

Fortran
ParadigmaMultiparadigma : estructurado , imperativo ( procedimental , orientado a objetos ), genérico , matriz
Diseñado porJuan Backus
ReveladorJohn Backus y IBM
Apareció por primera vez1957 ; hace 67 años ( 1957 )
Versión estable
Fortran 2023 (ISO/IEC 1539:2023) / 17 de noviembre de 2023 ; hace 10 meses ( 17/11/2023 )
Disciplina de mecanografíafuerte , estático , manifiesto
Extensiones de nombre de archivo.f90, .f,.for
Sitio webfortran-lang.org
Implementaciones principales
Absoft , Cray , GFortran , G95 , IBM XL Fortran, Intel , Hitachi , Lahey/Fujitsu, Numerical Algorithms Group , Open Watcom , PathScale , PGI , Silverfrost , Oracle Solaris Studio , otros
Influenciado por
Codificación rápida
Influenciado
ALGOL 58 , BASIC , C , Chapel , [1] CMS-2 , DOPE , Fortress , MATLAB , PL/I , PACT I , MUMPS , IDL , Ratfor , SAKO [2]

Fortran ( / ˈf ɔːr t r æ n / ; anteriormente FORTRAN ) es un lenguaje de programación imperativo compilado de tercera generación que es especialmente adecuado para el cálculo numérico y el cálculo científico .

Fortran fue desarrollado originalmente por IBM . [3] Se compiló correctamente por primera vez en 1958. [4] Los programas informáticos Fortran se han escrito para respaldar aplicaciones científicas y de ingeniería, como la predicción numérica del tiempo , el análisis de elementos finitos , la dinámica de fluidos computacional , la geofísica , la física computacional , la cristalografía y la 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]

La instalación de la supercomputadora IBM Blue Gene/P en 2007 en el Argonne Leadership Angela Yang Computing Facility, ubicado en el Laboratorio Nacional Argonne , en Lemont , Illinois , EE. UU.

Fortran ha evolucionado a través de numerosas versiones y dialectos. En 1966, el Instituto Nacional Estadounidense de Estándares (ANSI) desarrolló un estándar para Fortran para limitar la proliferación de compiladores que utilizan una sintaxis ligeramente diferente. [8] Las versiones sucesivas han añadido soporte para un tipo de datos de carácter (Fortran 77), programación estructurada , programación matricial , 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

Desde abril de 2024, Fortran se encuentra entre los diez mejores lenguajes en el índice TIOBE , una medida de la popularidad de los lenguajes de programación. [9]

Nombramiento

El primer manual de FORTRAN lo describe como un sistema de traducción de fórmulas y escribe el nombre en mayúsculas pequeñas : Fortran . [10] : p.2  [11] Otras fuentes sugieren que el nombre significa Traductor de fórmulas , [12] o Traducción de fórmulas . [13]

Las primeras computadoras IBM no admitían letras minúsculas , y los nombres de las versiones del lenguaje hasta FORTRAN 77 generalmente se escribían en mayúsculas . [ 14] FORTRAN 77 fue la última versión en la que el conjunto de caracteres Fortran incluía solo letras mayúsculas. [15]

Los estándares oficiales del lenguaje Fortran se refieren al lenguaje como "Fortran" con mayúscula inicial desde Fortran 90. [ cita requerida ]

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 mainframe 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 . [16] 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 de Laning y Zierler de 1952. [17]

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

En noviembre de 1954 se completó un borrador de especificación para el Sistema de traducción de fórmulas matemáticas de IBM. [11] : 71  El primer manual para 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 un código lo suficientemente eficiente para que los programadores de lenguaje ensamblador aceptaran un reemplazo de lenguaje de programación de alto nivel . [18]

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

El lenguaje fue ampliamente adoptado por los científicos para escribir programas con uso intensivo de números, lo que animó a los desarrolladores de compiladores a producir compiladores que pudieran generar código más rápido y eficiente. La inclusión de un tipo de datos de números complejos en el lenguaje hizo que Fortran fuera especialmente adecuado para aplicaciones técnicas como la ingeniería eléctrica. [20]

En 1960, ya existían versiones de FORTRAN 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 FORTRAN para sus máquinas, de modo que en 1963 ya existían más de 40 compiladores FORTRAN.

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

El desarrollo de Fortran fue paralelo a la evolución temprana 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.

FORTRAN

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

  • DIMENSIONy EQUIVALENCEdeclaraciones
  • Declaraciones de asignación
  • Declaración aritmética IF de tres vías , que pasaba 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
  • Sentencias de control para comprobar excepciones ( IF ACCUMULATOR OVERFLOW, IF QUOTIENT OVERFLOW, y IF DIVIDE CHECK); y sentencias 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, ASSIGNy asignadoGO TO
  • DObucles
  • E/S formateadas: 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
  • FREQUENCYdeclaración (para proporcionar sugerencias de optimización al compilador).

La instrucción aritmética IFrecordaba a (pero no era fácilmente implementable por) una instrucción de comparación de tres vías (CAS, Compare Accumulator with Storage) disponible en el 704. La instrucción proporcionaba la única manera de comparar números, probando su diferencia, con el consiguiente riesgo de desbordamiento. Esta deficiencia fue superada más tarde por las funciones "lógicas" introducidas en FORTRAN IV.

La FREQUENCYdeclaración se utilizó originalmente (y opcionalmente) para dar probabilidades de bifurcación para los tres casos de bifurcación de la IFdeclaración aritmética. También podría utilizarse para sugerir cuántas iteraciones DOpodría ejecutar un bucle. El primer compilador FORTRAN utilizó esta ponderación para realizar en tiempo de compilación una simulación de Monte Carlo del código generado, cuyos resultados se utilizaron para optimizar la colocación de 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 tramo 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 enumera 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 uno de esos enlaces de bloques básicos. Esta tabla se obtiene ejecutando el programa una vez en modo Montecarlo, en el que el resultado de las transferencias condicionales que surgen de las instrucciones de tipo IF y GO TO calculados se determina mediante un generador de números aleatorios adecuadamente ponderado de acuerdo con las instrucciones FREQUENCY que se hayan proporcionado. [16]

El primer compilador FORTRAN informaba de la 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 buscar ese código en una tabla de mensajes de error en el manual del operador, lo que le proporcionaba una breve descripción del problema. [10] : p.19–20  [25] Más tarde, se incorporó una subrutina de manejo de errores para manejar errores del usuario como la división por cero, desarrollada por la NASA, [26] que informaba a los usuarios de qué línea de código 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 a 5, 6 y 73 a 80
Reproducción de un formato de codificación FORTRAN, impreso en papel y destinado a ser utilizado por programadores para preparar programas que los operadores de máquinas perforadoras debían perforar en tarjetas . Actualmente obsoleto.

Antes del desarrollo de los archivos de disco, los editores de texto y las terminales, los programas se introducían con mayor frecuencia en un teclado perforado en tarjetas perforadas de 80 columnas , una línea por tarjeta. La baraja 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 reutilizados que se utilizaban en FORTRAN.

Como reflejo de la práctica de entrada de datos con tarjetas perforadas, los programas Fortran se escribieron originalmente en un formato de columnas fijas, en el que las primeras 72 columnas se leían en doce palabras de 36 bits.

La letra "C" en la columna 1 hacía que toda la tarjeta se tratara como un comentario y el compilador la ignorara. De lo contrario, las columnas de la tarjeta se dividían en cuatro campos:

  • 1 a 5 eran el campo de etiqueta: aquí se tomó una secuencia de dígitos como etiqueta para usar en instrucciones DO o de control como GO TO e IF, o para identificar una instrucción FORMAT a la que se hace referencia en una instrucción WRITE o READ. Los ceros iniciales se ignoran y 0 no es un número de etiqueta válido.
  • El 6 era un campo de continuación: un carácter distinto de un espacio en blanco o un cero hacía que la carta se considerara una continuación de la afirmación de la carta anterior. Las cartas de continuación solían estar numeradas 1, 2, etc. y, por lo tanto, la carta inicial podía tener un cero en su columna de continuación, que no era una continuación de la carta anterior.
  • Los campos del 7 al 72 sirvieron como campo de declaración.
  • Se ignoraron los números del 73 al 80 (el lector de tarjetas del IBM 704 solo usaba 72 columnas). [27]

Por lo tanto, las columnas 73 a 80 se podían utilizar para información de identificación, como perforar un número de secuencia o texto, que se podía utilizar para reordenar las tarjetas si se caía una pila de tarjetas; aunque en la práctica esto estaba reservado para programas de producción estables. Se podía utilizar un IBM 519 para copiar una baraja de programas y añadir números de secuencia. Algunos compiladores tempranos, por ejemplo, los IBM 650, tenían restricciones adicionales debido a limitaciones en sus lectores de tarjetas. [28] Los perforadores de teclado se podían programar para pasar a la columna 7 y saltar después de la columna 72. Los compiladores posteriores relajaron la mayoría de las restricciones de formato fijo, y el requisito se eliminó en el estándar Fortran 90.

Dentro del campo de declaración, los caracteres de espacio en blanco (espacios en blanco) se ignoraban fuera de un literal de texto. Esto permitía omitir espacios entre tokens para abreviar o incluir espacios dentro de 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 . Observe la ligera diferencia visual entre una coma y un punto.101010DO101I=1,10110101 DO 101 I = 1, 101101010DO101I=1.10110101 DO101I = 1.101DO101I

Las cadenas Hollerith , que originalmente solo se permitían en las instrucciones FORMAT y DATA, tenían como prefijo un recuento 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 recuentos incorrectos eran un problema.

Evolución

Cronología del lenguaje Fortran
AñoNombre informalNorma ANSINorma ISO/IEC
1957FORTRAN
1958FORTRAN II
1958FORTRAN III
1961FORTRAN IV
1966FORTRAN 66X3.9-1966
1978FORTRAN 77X3.9-1978
1991Fortran 90X3.198-19921539:1991
1997Fortran 951539-1:1997
2004Fortran 20031539-1:2004
2010Fortran 20081539-1:2010
2018Fortran 20181539-1:2018
2023Fortran 20231539-1:2023

FORTRAN II

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

  • SUBROUTINE, FUNCTION, yEND
  • CALLyRETURN
  • COMMON

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

Los primeros compiladores FORTRAN no admitían recursión en subrutinas. Las primeras arquitecturas informáticas no admitían el concepto de pila y, cuando admitían directamente llamadas a subrutinas, la ubicación de retorno se almacenaba a menudo en una ubicación fija adyacente al código de subrutina (por ejemplo, IBM 1130 ) o en un registro de máquina específico ( IBM 360 y siguientes ), que solo permite la recursión si se mantiene una pila mediante software y la dirección de retorno se almacena en la pila antes de que se realice la llamada y se restaura después de que la llamada regrese. Aunque no se especifica en FORTRAN 77, muchos compiladores F77 admitían la recursión como una opción, y los mainframes Burroughs , diseñados con la recursión incorporada, lo hacían de forma predeterminada. Se convirtió en un estándar en Fortran 90 a través de la nueva palabra clave RECURSIVE. [30]

Programa sencillo en FORTRAN II

Este programa, para la fórmula de Heron , lee datos en un carrete de cinta que contiene tres números enteros de 5 dígitos A, B y C como entrada. No hay declaraciones de "tipo" disponibles: las variables cuyo nombre comienza con I, J, K, L, M o N son "de punto fijo" (es decir, números enteros), de lo contrario, son de punto flotante. Dado que en este ejemplo se procesarán números 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, entonces la ejecución del programa finalizará con un código de error de "STOP 1". De lo contrario, se imprimirá una línea de salida que muestra los valores de entrada para A, B y C, seguido 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 declaración FORMAT con etiqueta 601.

C ÁREA DE UN TRIÁNGULO CON UNA FUNCIÓN DE RAÍZ CUADRADA ESTÁNDAR C ENTRADA - UNIDAD LECTORA DE CINTA 5, ENTRADA ENTERA C SALIDA - UNIDAD IMPRESORA DE LÍNEA 6, SALIDA REAL C ERROR DE ENTRADA VISUALIZACIÓN CÓDIGO DE SALIDA DE ERROR 1 EN LISTA DE CONTROL DE TRABAJOS LECTURA DE ENTRADA CINTA 5 , 501 , IA , IB , IC  501 FORMATO ( 3 I5 ) C IA, IB E IC NO PUEDEN SER NEGATIVOS O CERO C ADEMÁS, LA SUMA DE DOS LADOS DE UN TRIÁNGULO C DEBE SER MAYOR QUE EL TERCER LADO, POR LO QUE TAMBIÉN COMPROBAMOS ESO SI ( IA ) 777 , 777 , 701  701 SI ( IB ) 777 , 777 , 702  702 SI ( IC ) 777 , 777 , 703  703 SI ( IA + IB - IC ) 777 , 777 , 704  704 SI ( IA + IC - IB ) 777 , 777 , 705  705 SI ( IB + IC - IA ) 777 , 777 , 799  777 ALTO 1 C USANDO LA FÓRMULA DE HERON CALCULAMOS EL Á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 SALIDA CINTA 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 H UNIDADES CUADRADAS ) DETENER FIN             

FORTRAN III

IBM también desarrolló un FORTRAN III en 1958 que permitía el código ensamblador en línea , entre otras características; sin embargo, esta versión nunca se lanzó como producto. Al igual que el FORTRAN 704 y el 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 transferible de una máquina a otra. [11] : 76  Las primeras versiones de FORTRAN proporcionadas por otros proveedores sufrieron la misma desventaja.

FORTRAN IV

IBM comenzó a desarrollar 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 declaración IF lógica como alternativa a la declaración IF aritmética. FORTRAN IV finalmente se lanzó en 1962, primero para la computadora IBM 7030 ("Stretch"), seguida por versiones para IBM 7090 , IBM 7094 y más tarde para IBM 1401 en 1966. [31]

En 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 . [32]

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. [33] 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 más grande: [34] : p. 5 

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

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

Aproximadamente en esa época, FORTRAN IV había comenzado a convertirse en una herramienta educativa importante y se crearon implementaciones como WATFOR y WATFIV de la Universidad de Waterloo para simplificar los complejos procesos de compilación y enlace de los compiladores anteriores.

En el entorno de programación FORTRAN IV de la época, a excepción del utilizado en los sistemas de Control Data Corporation (CDC), solo se colocaba una instrucción por línea. La versión CDC permitía múltiples instrucciones por línea si se separaban con un carácter $ (dólar). La hoja FORTRAN estaba dividida 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. [35] [36]

FORTRAN 66

Tal vez 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 Fortran Estándar Estadounidense . 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 despojado de sus características dependientes de la máquina). El FORTRAN definido por el primer estándar, oficialmente denominado X3.9-1966, se conoció como FORTRAN 66 (aunque muchos continuaron llamándolo FORTRAN IV, el lenguaje en el que se basó 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 de programa
  • INTEGER, REAL, DOUBLE PRECISION, COMPLEX, y LOGICAL tipos de datos
  • COMMON, DIMENSION, y EQUIVALENCEdeclaraciones
  • DATADeclaración para especificar valores iniciales
  • EXTERNALFunciones intrínsecas y (por ejemplo, de biblioteca)
  • Declaración de asignación
  • GO TO, calculado GO TO, asignado GO TOy ASSIGNdeclaraciones
  • Enunciados lógicos IFy aritméticos (de tres vías)IF
  • DOdeclaració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 DATAenunciados FORMATy como argumentos para procedimientos
  • Identificadores de hasta seis caracteres de longitud
  • Líneas de comentarios
  • ENDlínea

La versión Fortran II del programa Heron que se muestra arriba necesita varias modificaciones para compilarse como un programa Fortran 66. Las modificaciones incluyen el uso de versiones más independientes de la máquina de las instrucciones READy WRITE, y la eliminación de las FLOATFfunciones de conversión de tipos innecesarias. Aunque no es obligatorio, las instrucciones aritméticas IFse pueden reescribir para usar IFinstrucciones y expresiones lógicas de una manera más estructurada.

C ÁREA DE UN TRIÁNGULO CON UNA FUNCIÓN DE RAÍZ CUADRADA ESTÁNDAR C ENTRADA - UNIDAD LECTORA DE CINTA 5, ENTRADA ENTERA C SALIDA - UNIDAD IMPRESORA DE LÍNEA 6, SALIDA REAL C ERROR DE ENTRADA VISUALIZACIÓN CÓDIGO DE SALIDA DE ERROR 1 EN LISTA DE CONTROL DE TRABAJO LEER ( 5 , 501 ) IA , IB , IC  501 FORMATO ( 3 I5 ) C C IA, IB E IC NO PUEDEN SER NEGATIVOS O CERO C ADEMÁS, LA SUMA DE DOS LADOS DE UN TRIÁNGULO C DEBE SER MAYOR QUE EL TERCER LADO, POR LO QUE TAMBIÉN COMPROBAMOS ESO SI ( IA . GT . 0 . Y . IB . GT . 0 . Y . IC . GT . 0 ) IR A 10 ESCRIBIR ( 6 , 602 )  602 FORMATO ( 42 H IA , IB E IC DEBEN SER MAYORES QUE CERO .) ALTO 1  10 CONTINUAR C SI ( IA + IB - IC . GT . 0 + . Y . IA + IC - IB . GT . 0 + . Y . IB + IC - IA . GT . 0 ) IR A 20 ESCRIBIR ( 6 , 603 )  603 FORMATO ( 50 H LA SUMA DE DOS LADOS DEBE SER MAYOR QUE EL TERCER LADO .) ALTO 1 20  CONTINUAR C C USANDO LA FÓRMULA DE HERON CALCULAMOS EL ÁREA C DEL TRIÁNGULO S = ( IA + IB + IC ) / 2.0 ÁREA = RAÍZ 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 H UNIDADES CUADRADAS ) DETENER FIN                                

FORTRAN 77

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

Después del lanzamiento del estándar FORTRAN 66, los proveedores de compiladores introdujeron varias extensiones al estándar Fortran , lo que impulsó al comité ANSI X3J3 en 1969 a comenzar a trabajar en la revisión del estándar de 1966, bajo el patrocinio de CBEMA , la Asociación de Fabricantes de Equipos de Negocios Informáticos (anteriormente BEMA). Los borradores finales de este estándar revisado circularon en 1977, lo que llevó 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, agregó una serie de características significativas para abordar muchas de las deficiencias de FORTRAN 66:

  • Bloques IFy END IFdeclaraciones, con cláusulas ELSE IFy opcionales ELSE, para proporcionar un mejor soporte del lenguaje para la programación estructurada
  • DOextensiones de bucle, incluidas expresiones de parámetros, incrementos negativos y recuentos de viajes cero
  • OPEN, CLOSE, y INQUIREdeclaraciones para mejorar la capacidad de E/S
  • E/S de archivos con acceso directo
  • IMPLICITdeclaración, para anular las convenciones implícitas de que las variables no declaradas son INTEGERsi su nombre comienza con I, J, K, L, Mo N(y REALde lo contrario)
  • CHARACTERTipo de datos, que reemplaza las cadenas Hollerith con funciones ampliamente expandidas para la entrada y salida de caracteres y el procesamiento de datos basados ​​en caracteres.
  • PARAMETERDeclaració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 cotejo ASCII . (Estas funciones ASCII fueron solicitadas por el Departamento de Defensa de los EE. UU . en su voto de aprobación condicional. [ cita requerida ] )
  • Se permite un máximo de siete dimensiones en las matrices, en lugar de tres. También se generalizaron las expresiones con subíndices permitidos.

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 (consulte 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 una pequeña cantidad de capacidades específicas, como:

  • Constantes de Hollerith y datos de Hollerith , comoGREET = 12HHELLO THERE!
  • Lectura de un descriptor de edición H (campo Hollerith) en una especificación de FORMATO
  • Sobreindexación de los límites de la matriz mediante subíndices
      DIMENSIÓN A ( 10 , 5 ) Y = A ( 11 , 1 )    
  • Transferencia de control desde y hacia el rango de un bucle DO (también conocido como "Rango extendido")

Una versión Fortran 77 del programa Heron no requiere modificaciones en la versión Fortran 66. Sin embargo, este ejemplo demuestra una limpieza adicional de las instrucciones de E/S, incluido el uso de E/S dirigidas por listas y el reemplazo de los descriptores de edición Hollerith en las FORMATinstrucciones con cadenas entre comillas. También utiliza instrucciones IFand estructuradas END IFen lugar de GOTO/ CONTINUE.

  PROGRAMA HERON C ÁREA DE UN TRIÁNGULO CON UNA FUNCIÓN RAÍZ CUADRADA ESTÁNDAR ENTRADA C - UNIDAD DE ENTRADA ESTÁNDAR PREDETERMINADA, ENTRADA ENTERA C SALIDA - UNIDAD DE SALIDA ESTÁNDAR PREDETERMINADA, SALIDA REAL C ERROR DE ENTRADA VISUALIZACIÓN CÓDIGO DE SALIDA DE ERROR 1 EN LA LISTA DE CONTROL DE TRABAJO LEER ( * , * ) IA , IB , IC C C IA, IB Y IC NO PUEDEN SER NEGATIVOS O CERO C ADEMÁS, LA SUMA DE DOS LADOS DE UN TRIÁNGULO C DEBE SER MAYOR QUE EL TERCER LADO, POR LO QUE TAMBIÉN COMPROBAMOS ESO SI ( IA . LE . 0 . O . IB . LE . 0 . O . IC . LE . 0 ) ENTONCES ESCRIBIR ( * , * ) 'IA, IB y IC deben ser mayores que cero.' STOP 1 END IF C IF ( IA + IB - IC . LE . 0 + . OR . IA + IC - IB . LE . 0 + . OR . IB + IC - IA . LE . 0 ) THEN WRITE ( * , * ) 'La suma de dos lados debe ser mayor que el tercer lado.' STOP 1 END IF C C USANDO LA FÓRMULA DE HERON CALCULAMOS EL ÁREA C DEL TRIÁNGULO S = ( IA + IB + IC ) / 2.0 ÁREA = SQRT ( S * ( S - IA ) * ( S - IB ) * ( S - IC )) WRITE ( * , 601 ) IA , IB , IC , ÁREA  601 FORMATO ( 'A= ' , I5 , ' B= ' , I5 ,                                                                                                     ' C= ' , I5 , ' AREA= ' , F10 . 2 , + ' unidades cuadradas' ) DETENER FIN         

Transición al estándar ANSI Fortran

El desarrollo de un estándar revisado que sucediera a FORTRAN 77 se vería retrasado repetidamente, ya que el proceso de estandarización luchaba por mantenerse al día con los rápidos cambios en las prácticas informáticas y de programación. Mientras tanto, como el "estándar FORTRAN" durante casi quince años, FORTRAN 77 se convertiría en el dialecto históricamente más importante.

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

El estándar POSIX IEEE 1003.9 , publicado en 1991, proporcionó un medio simple para que los programadores de FORTRAN 77 emitieran llamadas al sistema POSIX. [38] Se definieron más de 100 llamadas en el documento, lo que permitió el acceso al control de procesos compatible con POSIX, manejo de señales, control del sistema de archivos, control de dispositivos, apuntamiento de procedimientos y E/S de flujo de manera portátil.

Fortran 90

El muy retrasado sucesor de FORTRAN 77, conocido informalmente como Fortran 90 (y antes de eso, Fortran 8X ), finalmente se lanzó como estándar ISO/IEC 1539:1991 en 1991 y como estándar ANSI en 1992. Además de cambiar la ortografía oficial de FORTRAN a Fortran, esta importante revisión agregó muchas características nuevas para reflejar los cambios significativos en la práctica de programación que se habían desarrollado desde el estándar de 1978:

  • La entrada de fuente de formato libre eliminó la necesidad de omitir las primeras seis posiciones de caracteres antes de ingresar declaraciones.
  • Palabras clave Fortran en minúsculas
  • Identificadores de hasta 31 caracteres de longitud (en el estándar anterior, solo eran seis caracteres).
  • Comentarios en línea
  • Capacidad de operar en matrices (o secciones de matrices) como un todo, simplificando así enormemente los cálculos matemáticos y de ingeniería.
    • declaraciones de asignación de matrices completas, parciales y enmascaradas y expresiones de matriz, comoX(1:N)=R(1:N)*COS(A(1:N))
    • WHEREDeclaración para la asignación selectiva de matrices
    • constantes y expresiones con valores de matriz,
    • funciones con valores de matriz definidos por el usuario y constructores de matrices.
  • RECURSIVEprocedimientos
  • Módulos , para agrupar procedimientos y datos relacionados y ponerlos a disposición de otras unidades del programa, incluida la capacidad de limitar la accesibilidad solo 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 tipo de datos, para especificar el tipo de datos y otros atributos de las variables
  • Asignación dinámica de memoria mediante el ALLOCATABLEatributo y las instrucciones ALLOCATEandDEALLOCATE
  • POINTERAtributos, asignaciones de punteros y declaraciones para facilitar la creación y manipulación de estructuras de datosNULLIFY dinámicas
  • Construcciones de bucles estructurados, con una END DOdeclaración para la terminación del bucle y EXITdeclaraciones CYCLEpara terminar DOiteraciones de bucles normales de manera 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. [39] Cualquier programa FORTRAN 77 que cumpliera con el estándar también lo cumplía con Fortran 90, y cualquiera de los estándares debería haber sido utilizable para definir su comportamiento.

Se identificó un pequeño conjunto de características como "obsoletas" y se esperaba que se eliminaran en un estándar futuro. Todas las funcionalidades de estas características de la versión anterior se pueden realizar con características más nuevas de Fortran. Algunas se conservan para simplificar la migración de programas antiguos, pero muchas se eliminaron en Fortran 95.

Obsolescencia y eliminaciones
Característica obsoletaEstado actual
Declaración aritmética IFObsoleto en F90, eliminado en F2018
Parámetros DO o variables de control no enterosObsoleto en F90, eliminado en F95
Terminación del bucle DO compartido o terminación con una declaración distinta a END DO o CONTINUE  Obsoleto en F90, eliminado en F2018
Ramificación a END IF desde fuera de un bloqueObsoleto en F90, eliminado en F95
Declaración PAUSEObsoleto en F90, eliminado en F95
Sentencia ASSIGN y sentencia GO TO asignadaObsoleto en F90, eliminado en F95
Números de declaración asignados y especificadores de FORMATOObsoleto en F90, eliminado en F95
H editar descriptorObsoleto en F90, eliminado en F95
Control de formato verticalEliminado en F2003
Retorno alternativoObsoleto en F90
Instrucción GO TO calculadaObsoleto en F90
Funciones de declaraciónObsoleto en F90
Sentencias DATA entre sentencias ejecutablesObsoleto en F90
Funciones de caracteres de longitud asumidaObsoleto en F90
Código fuente en formato fijoObsoleto en F90
CHARACTER* forma de la declaración CHARACTERObsoleto en F90
Declaraciones ENTRYObsoleto en el año fiscal 2008
Formato de etiqueta de la declaración DOObsoleto en el año fiscal 2018
Sentencias COMUNES y EQUIVALENCIA, y la unidad de programa DATOS BLOQUEObsoleto en el año fiscal 2018
Nombres específicos para la función intrínsecaObsoleto en el año fiscal 2018
Construcción y declaración FORALLObsoleto en el año fiscal 2018

Ejemplo de "¡Hola, mundo!"

programa holamundo print * , "¡Hola, mundo!" fin del 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 agregó una serie de extensiones, en particular de la especificación Fortran de alto rendimiento :

  • FORALLy WHEREconstrucciones anidadas para facilitar la vectorización
  • Definidos por el usuario PUREy ELEMENTALprocedimientos
  • Inicialización predeterminada de componentes de tipo derivado, incluida la inicialización de puntero
  • Se amplió la capacidad de usar expresiones de inicialización para objetos de datos.
  • Inicialización de punteros aNULL()
  • Se define claramente que ALLOCATABLElas matrices se desasignan automáticamente cuando quedan fuera del alcance.

Se ampliaron varias funciones intrínsecas (por ejemplo, dimse agregó un argumento a la maxlocintrínseca).

Varias características que en Fortran 90 se consideraban "obsoletas" se eliminaron de Fortran 95:

  • DODeclaraciones que utilizan REALvariables DOUBLE PRECISIONde índice
  • Ramificación 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 de Fortran 95 fue el informe técnico ISO TR-15581: Enhanced Data Type Facilities , conocido informalmente como Allocatable TR. Esta especificación definió el uso mejorado de ALLOCATABLEmatrices, antes de la disponibilidad de compiladores de Fortran totalmente compatibles con Fortran 2003. Dichos usos incluyen ALLOCATABLEmatrices como componentes de tipo derivados, en listas de argumentos ficticios de procedimientos y como valores de retorno de funciones. ( ALLOCATABLELas matrices son preferibles a POINTERlas matrices basadas en - porque ALLOCATABLEFortran 95 garantiza que las matrices se desasignarán automáticamente cuando salgan del ámbito, lo que elimina la posibilidad de fuga de memoria . Además, los elementos de las matrices asignables son contiguos y el alias no es un problema para la optimización de las referencias de matriz, lo que permite a los compiladores generar código más rápido que en el caso de los punteros. [40] )

Otro complemento importante de Fortran 95 fue el informe técnico ISO TR-15580: Floating-point exception management (Manejo de excepciones de punto flotante ), conocido informalmente como IEEE TR. Esta especificación definió el soporte para 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 de varias partes (ISO/IEC 1539).

Según los desarrolladores de estándares, "las partes opcionales describen características independientes que han sido solicitadas por un grupo sustancial de usuarios y/o implementadores, pero que no se consideran de suficiente generalidad como para que sean requeridas en todos los compiladores Fortran que cumplen con el estándar". No obstante, si un Fortran que cumple con el estándar proporciona dichas opciones, entonces "deben proporcionarse de acuerdo con la descripción de esas funciones en la Parte apropiada del Estándar".

Fortran moderno

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

Fortran 2003

Fortran 2003, publicado oficialmente como ISO/IEC 1539-1:2004, fue una revisión importante que introdujo muchas características nuevas. [42] 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). [43]

De ese artículo se desprende que las principales mejoras de esta revisión incluyen:

  • Mejoras en los tipos derivados: tipos derivados parametrizados, control mejorado de la accesibilidad, constructores de estructuras mejorados y finalizadores
  • Soporte de programación orientada a objetos : extensión y herencia de tipos , polimorfismo , asignación dinámica de tipos y procedimientos ligados a tipos, proporcionando soporte completo para tipos de datos abstractos.
  • Mejoras en la manipulación de datos: componentes asignables (que incorporan TR 15581), parámetros de tipo diferido, VOLATILEatributos , especificación de tipo explícita en constructores de matrices y declaraciones de asignación, mejoras de punteros, expresiones de inicialización extendidas y procedimientos intrínsecos mejorados.
  • Mejoras de entrada/salida: transferencia asincrónicaFLUSH , acceso a flujo, operaciones de transferencia especificadas por el usuario para tipos derivados, control especificado por el usuario del redondeo durante las conversiones de formato, constantes con nombre para unidades preconectadas, la declaración, regularización de palabras clave y acceso a mensajes de error.
  • Indicaciones 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 elección de decimales o comas en entrada/salida con formato numérico
  • Integración mejorada con el sistema operativo host: acceso a argumentos de línea de comandos , variables de entorno y mensajes de error del procesador

Un complemento importante de Fortran 2003 fue el informe técnico ISO TR-19767: Enhanced module features in Fortran (Facilidades de módulos mejoradas en Fortran). Este informe proporcionaba submódulos que hacían que los módulos de Fortran fueran más similares a los módulos de Modula-2 . Son similares a las subunidades secundarias privadas de Ada . Esto permite que la especificación e implementación de un módulo se exprese en unidades de programa separadas, lo que mejora el empaquetado de bibliotecas grandes, permite la preservación de secretos comerciales mientras se publican interfaces definitivas y evita las cascadas de compilación.

Fortran 2008

La norma ISO/IEC 1539-1:2010, conocida informalmente como Fortran 2008, se aprobó en septiembre de 2010. [44] [45] 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 capacidades. Las nuevas capacidades incluyen:

  • Submódulos: facilidades de estructuración adicionales para módulos; reemplaza a ISO/IEC TR 19767:2005
  • Coarray Fortran : un modelo de ejecución paralela
  • La construcción DO CONCURRENT : para iteraciones de bucle sin interdependencias
  • El atributo CONTIGUO: para especificar restricciones de diseño de almacenamiento
  • La construcción BLOCK – puede contener declaraciones de objetos con alcance 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. [46]

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

Fortran 2018

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

Fortran 2018 incorpora dos especificaciones técnicas publicadas previamente:

  • ISO/IEC TS 29113:2012 Mayor interoperabilidad con C [51]
  • ISO/IEC TS 18508:2015 Características paralelas adicionales en Fortran [52]

Los cambios adicionales y las nuevas características incluyen compatibilidad con ISO/IEC/IEEE 60559:2011 (la versión del estándar de punto flotante IEEE anterior a la última revisión menor IEEE 754–2019), entrada/salida hexadecimal, mejoras en IMPLICIT NONE y otros cambios. [53] [54] [55] [56]

Fortran 2018 eliminó la declaración aritmética IF. También eliminó las construcciones DO que no son de bloques (bucles que no terminan con una declaración END DO o CONTINUE). Estas habían sido una parte obsoleta del lenguaje desde Fortran 90.

Las nuevas obsolescencias son: las declaraciones COMUNES y EQUIVALENCIA y la unidad de programa DATOS BLOQUE, los bucles DO etiquetados, los nombres específicos para funciones intrínsecas y la declaración y construcción FORALL.

Fortran 2023

Fortran 2023 (ISO/IEC 1539-1:2023) se publicó en noviembre de 2023 y se puede comprar en la ISO. [57] Fortran 2023 es una extensión menor de Fortran 2018 que se centra en corregir errores y omisiones en Fortran 2018. También agrega algunas características pequeñas, incluida una capacidad de tipo enumerado .

Características del lenguaje

En el artículo relacionado, Características del lenguaje Fortran 95 , se incluye una descripción completa de las características del lenguaje Fortran que trae Fortran 95. Las versiones del lenguaje definidas por estándares posteriores suelen denominarse colectivamente "Fortran moderno" y se describen en la literatura.

Ciencia e ingeniería

Simulación magnetohidrodinámica relativista general en Fortran de la acreción de agujeros negros utilizando el código BHAC con malla adaptativa cartesiana
Flujo alrededor de un cilindro calculado en Fortran con OpenCL (Universidad de Bristol, Reino Unido)
Velocidad y temperatura superficial del mar en los océanos, calculadas con el código NEMO Fortran (Nucleus for European Modeling of the Ocean, https://www.nemo-ocean.eu) en el Barcelona Supercomputing Center (2020)

Aunque un artículo de revista de 1968 escrito por los autores de BASIC ya describía a FORTRAN como "anticuado", [58] se han escrito programas en Fortran durante muchas décadas y existe una gran cantidad de software Fortran en uso diario en las comunidades científicas y de ingeniería. [59] 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 poco probable que los científicos cambien a Pascal , Modula-2 o lo que sea". [60] En 1993, Cecil E. Leith llamó a FORTRAN la "lengua materna de la computación científica", agregando que su reemplazo por cualquier otro lenguaje posible "puede seguir siendo una esperanza perdida". [61]

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, [62] 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 . [63] 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 .

Aparte de esto, los códigos más modernos en la ciencia computacional generalmente utilizan bibliotecas de programas grandes, como METIS para la partición de gráficos, PETSc o Trilinos para capacidades de álgebra lineal, deal.II o FEniCS para soporte de malla y elementos finitos, y otras bibliotecas genéricas. Desde principios de la década de 2000, muchas de las bibliotecas de soporte ampliamente utilizadas también se han implementado en C y, más recientemente, en C++ . Por otro lado, los lenguajes de alto nivel como Wolfram Language , MATLAB , Python y R se han vuelto populares en áreas particulares de la ciencia computacional. En consecuencia, una fracción creciente de programas científicos también se escriben en dichos lenguajes de script de alto nivel. Por esta razón, las facilidades para la interoperación con C se agregaron a Fortran 2003 y se mejoraron con la especificación técnica ISO/IEC 29113, que se incorporó a Fortran 2018 para permitir una interoperación más flexible con otros lenguajes de programación.

Portabilidad

La portabilidad fue 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 de ordenadores competían por diferenciar sus ofertas de las de los demás proporcionando características incompatibles. Los estándares han mejorado la portabilidad. El estándar de 1966 proporcionó una sintaxis y una semántica de referencia, pero los proveedores siguieron proporcionando extensiones incompatibles. Aunque los programadores cuidadosos se estaban dando cuenta de que el uso de extensiones incompatibles causaba costosos problemas de portabilidad y, por tanto, utilizaban programas como The PFORT Verifier, [64] [65] no fue hasta después del estándar de 1977, cuando la Oficina Nacional de Normas (ahora NIST ) publicó FIPS PUB 69 , que los procesadores comprados por el gobierno de los EE. UU. debían diagnosticar extensiones del estándar. En lugar de ofrecer dos procesadores, esencialmente todos los compiladores acabaron teniendo al menos una opción para diagnosticar extensiones. [66] [67]

Las extensiones incompatibles no fueron 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 de la biblioteca PORT . [65] Las ideas contenidas en este documento se utilizaron ampliamente y finalmente se incorporaron al estándar de 1990 mediante funciones de consulta intrínsecas. 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 el estándar 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 mediante la incorporación de la interoperabilidad de C en el 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 obsoletas

Hasta que se desarrolló el estándar Fortran 66, cada compilador admitía su propia variante de Fortran. Algunas se alejaban más de la corriente principal que otras.

El primer compilador Fortran estableció un alto estándar de eficiencia para el código compilado. Este objetivo dificultó la creación de un compilador, por lo que generalmente los fabricantes de computadoras lo hacían para respaldar las ventas de hardware. Esto dejó un nicho importante: compiladores que fueran rápidos y proporcionaran buenos diagnósticos para el programador (a menudo un estudiante). Algunos ejemplos son Watfor, Watfiv, PUFFT y, en menor escala, FORGO, Wits Fortran y Kingston Fortran 2.

Fortran 5 fue comercializado por Data General Corp desde principios de los años 1970 hasta principios de los años 1980, para las líneas de computadoras Nova , Eclipse y MV . Tenía un compilador optimizador que era bastante bueno para las minicomputadoras de su época. El lenguaje se asemeja más a FORTRAN 66.

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

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 ) agregaron extensiones a Fortran para aprovechar las características especiales del hardware, como la caché de instrucciones , las canalizaciones de 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 de 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 se ejecuta 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 procesar vectores y matrices.

Fortran orientado a objetos era una extensión orientada a objetos de Fortran, en la que los elementos de datos se pueden agrupar en objetos, que se pueden instanciar y ejecutar en paralelo. Estaba disponible para Sun, Iris, iPSC y nCUBE, pero ya no se admite.

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

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

El sistema FORTRAN fue diseñado para una máquina más compleja que la 650 y, en consecuencia, algunas de las 32 instrucciones que se encuentran en el Manual de referencia del programador de FORTRAN no son aceptables para el sistema FOR TRANSIT. Además, se han agregado 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 el 704.

Las declaraciones permitidas fueron:

  • Declaraciones 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), ...

Se pueden utilizar hasta diez subrutinas en un programa.

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

Existieron dos versiones para los años 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 ( biquinaria ) automática. El Apéndice A del manual incluía diagramas de cableado para el panel de control del lector/perforador de tarjetas IBM 533 .

Lenguajes basados ​​en Fortran

Antes de FORTRAN 77, se utilizaban comúnmente 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. [70] Estos preprocesadores normalmente soportarían programación estructurada , nombres de variables de más de seis caracteres, tipos de datos adicionales, compilación condicional e incluso capacidades de macro . Los preprocesadores populares incluían EFL , FLECS, iftran , MORTRAN , SFtran, S-Fortran, Ratfor y Ratfiv . EFL, Ratfor y Ratfiv, por ejemplo, implementaron lenguajes similares a C , generando código preprocesado en FORTRAN 66 estándar. El preprocesador PFORT se usaba 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 continúan utilizándose para la compilación condicional y la sustitución de macros.

Una de las primeras versiones de FORTRAN, introducida en los años 60, se utilizó popularmente en colegios y universidades. Desarrollada, respaldada y distribuida por la Universidad de Waterloo , WATFOR se basaba principalmente en FORTRAN IV. 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 de lógica de ejecución, en lugar de ocuparse del lenguaje de control de trabajos (JCL) de envío, los procesos sucesivos de compilación/enlace-edición/ejecución u otras complejidades del entorno de mainframe/minicomputadora. Una desventaja de este entorno simplificado era que WATFOR no era una buena opción para los programadores que necesitaban las capacidades expandidas de sus procesadores host, por ejemplo, WATFOR normalmente tenía un acceso muy limitado a los dispositivos de E/S. WATFOR fue reemplazado por WATFIV y sus versiones posteriores.

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

(programación de línea)

LRLTRAN se desarrolló en el Laboratorio de Radiación de Lawrence para brindar soporte para aritmética vectorial y almacenamiento dinámico, entre otras extensiones para respaldar 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 a menudo como "CoCo".

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

SIMSCRIPT es un preprocesador Fortran específico de la aplicación para modelar y simular grandes sistemas discretos.

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

Lahey y Fujitsu se unieron para crear Fortran para Microsoft .NET Framework . [72] Silverfrost FTN95 también es capaz de crear código .NET. [73]

Ejemplos de código

El siguiente programa ilustra la asignación dinámica de memoria y las operaciones basadas en matrices, dos características introducidas con Fortran 90. Cabe destacar especialmente la ausencia de DObucles y declaraciones IF/ THENen la manipulación de la matriz; las operaciones matemáticas se aplican a la matriz como un todo. También es evidente el uso de nombres de variables descriptivos y un formato de código general que se ajusta al estilo de programación contemporáneo. Este ejemplo calcula un promedio de los datos ingresados ​​de manera interactiva.

promedio del programa ¡Lea algunos números y saque el promedio ! Como está escrito, si no hay puntos de datos, se devuelve un promedio de cero . Si bien este puede no ser el comportamiento deseado, mantiene este ejemplo simple.   ninguno implícito real , asignable :: puntos (:) entero :: numero_de_puntos real :: puntos_promedio , promedio_positivo , promedio_negativo puntos_promedio = 0. promedio_positivo = 0. promedio_negativo = 0. escribir ( * , * ) "Ingrese el número de puntos a promediar:" leer ( * , * ) numero_de_puntos                           asignar ( puntos ( numero_de_puntos ))  escribe ( * , * ) "Ingresa los puntos a promediar:" lee ( * , * ) puntos      ! Tome el promedio sumando los puntos y dividiendo por número_de_puntos si ( número_de_puntos > 0 ) puntos_promedio = suma ( puntos ) / número_de_puntos          ! Ahora, forme el promedio sobre los puntos positivos y negativos solo si ( 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. )                                 ! Imprimir resultado en la salida estándar de la terminal unidad 6 write ( * , '(a,g12.4)' ) 'Promedio = ' , promedio_puntos write ( * , '(a,g12.4)' ) 'Promedio de puntos positivos = ' , promedio_positivo write ( * , '(a,g12.4)' ) 'Promedio de puntos negativos = ' , promedio_negativo deallocate ( puntos ) ! liberar memoria               Promedio del programa final

Humor

Durante la misma reunión del comité de estándares de FORTRAN en la que se eligió el nombre "FORTRAN 77", se incorporó a la distribución oficial una propuesta técnica satírica titulada "Letter O Considered Harmful " (La letra O considerada dañina). Esta propuesta pretendía abordar la confusión que a veces surge entre la letra "O" y el número cero, eliminando la letra de los nombres de variables permitidos. Sin embargo, el método propuesto era eliminar la letra del conjunto de caracteres por completo (conservando así 48 como el número de caracteres léxicos, que los dos puntos habían aumentado a 49). Esto se consideró beneficioso porque promovería la programación estructurada, al hacer imposible utilizar la famosa GO TOdeclaración como antes. ( FORMATTambién se eliminarían las declaraciones problemáticas). Se observó que esto "podría invalidar algunos programas existentes", pero que la mayoría de ellos "probablemente no eran conformes, de todos modos". [74] [ ¿ Fuente poco fiable? ] [75]

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

Cuando se añadieron matrices de longitud supuesta, hubo una disputa sobre el carácter apropiado para separar los límites superior e inferior. En un comentario que examinaba estos argumentos, Walt Brainerd escribió un artículo titulado "Astronomía vs. Gastroenterología" porque algunos defensores habían sugerido utilizar la estrella o el asterisco ("*"), mientras que otros favorecían los dos puntos (":). [ cita requerida ]

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

Véase también

Referencias

  1. ^ "Especificación de la capilla (Agradecimientos)" (PDF) . Cray Inc. 1 de octubre de 2015. Archivado (PDF) del original el 5 de febrero de 2016 . Consultado el 14 de enero de 2016 .
  2. ^ Informe de una visita para discutir 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.org. Archivado (PDF) del original el 26 de julio de 2007. Consultado el 19 de noviembre de 2014 .
  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 empezaron a 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. ^ "Q13. ¿Cuáles son los puntos de referencia?". Descripción general: CPU 2017. ESPECIFICACIONES . Consultado el 13 de noviembre de 2019 .
  8. ^ 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 y, por lo tanto, versiones ligeramente diferentes... probablemente fallarían al usarse con un compilador diferente .
  9. ^ TIOBE Software BV (mayo de 2024). «Índice TIOBE». TIOBE.com . TIOBE . Consultado el 6 de mayo de 2024 .
  10. ^ abcde 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 IBM 704 EDPM: Manual de referencia del programador (PDF) . Nueva York, EE. UU.: División de Ciencias Aplicadas y Departamento de Investigación en Programación, International Business Machines Corporation . págs. 2, 19–20. Archivado (PDF) desde el original el 4 de julio de 2022 . Consultado el 4 de julio de 2022 .(2+51+1 páginas)
  11. ^ abcdef 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. doi :10.1109/85.728232. Archivado (PDF) del original el 3 de marzo de 2016. Consultado el 17 de junio de 2020 .[1][2]
  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. ^ Chapman, Stephen J. (2018). Fortran para científicos e ingenieros (cuarta edición). Nueva York : McGraw-Hill Education . pág. 13. ISBN. 978-0-07-338589-1.
  15. ^ El "conjunto de caracteres Fortran" definido por el estándar FORTRAN 77 era el conjunto de caracteres mínimo que los compiladores compatibles con el estándar debían soportar; en la práctica, muchos compiladores FORTRAN 77 soportaban el conjunto de caracteres ASCII completo .
  16. ^ ab 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 informática conjunta occidental. págs. 188–198. doi :10.1145/1455567.1455599.
  17. ^ Mindell, David (2008). Apolo digital . Cambridge, MA: MIT Press. pag. 99.ISBN 978-0-262-13497-2. JSTOR  j.ctt5hhn02. OCLC  228031739.
  18. ^ 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 desde el original (PDF) el 17 de junio de 2020. El compilador Fortran I fue el primer gran proyecto de optimización de código. Abordó problemas de importancia crucial cuya solución general fue un foco de investigación importante en la 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.
  19. ^ Brian Bergstein (20 de mayo de 2007). «Muere John Backus, creador de Fortran». MSNBC . Consultado el 29 de octubre de 2018 .
  20. ^ "FORTRAN: el primer lenguaje de programación para cálculos numéricos". Blog de SciHi . 15 de octubre de 2019.
  21. ^ Haines, LH (1965). "Compilación serial y el compilador FORTRAN 1401". IBM Systems Journal . 4 (1): 73–80. doi :10.1147/sj.41.0073.
  22. ^ Lee, John AN (1967). Anatomía de un compilador . Van Nostrand Reinhold.
  23. ^ Especificaciones y procedimientos operativos de Fortran, IBM 1401 (PDF) . IBM. C24-1455-2. Archivado (PDF) del original el 23 de septiembre de 2017.
  24. ^ "Asunto: GOTRAN EN EL PAQUETE DE ALMACENAMIENTO EN DISCO IBM 1316 (N.º de serie K7402)". Archivado desde el original el 21 de febrero de 2006 . Consultado el 3 de marzo de 2006 .
  25. ^ El sistema de codificación automática FORTRAN para el IBM 704 EDPM: Manual preliminar del operador (PDF) . Departamento de investigación en programación, International Business Machines Corporation. 8 de abril de 1957. págs. 6–37. Archivado (PDF) desde el original el 26 de febrero de 2014.
  26. ^ Armstead, Betty Jo (21 de enero de 2015). "Mis años en la NASA" (PDF) . Museo de Naturaleza y Ciencia de Denver . Archivado desde el original (PDF) el 24 de diciembre de 2019. Consultado el 15 de junio de 2019 .
  27. ^ Manual de referencia, sistema de procesamiento de datos IBM 7090 (PDF) . 1961. A22-6528-3. Archivado (PDF) desde el original el 1 de diciembre de 2008.
  28. ^ Manual de información general de Fortran II (PDF) . 1963. Archivado (PDF) desde el original el 26 de abril de 2005. Consultado el 19 de noviembre de 2014 .
  29. ^ Manual de referencia, FORTRAN II para el sistema de procesamiento de datos IBM 704 (PDF) . 1958. C28-6000-2. Archivado (PDF) desde el original el 30 de octubre de 2005.
  30. ^ "Ibilio.org". Ibiblio.org . Consultado el 15 de septiembre de 2014 .
  31. ^ Especificaciones del lenguaje Fortran IV, especificaciones de programas y procedimientos operativos, IBM 1401, 1440 y 1460 (PDF) . IBM. Abril de 1966. C24-3322-2. Archivado (PDF) desde el original el 23 de septiembre de 2017.
  32. ^ McCracken, Daniel D. (1965). "Prefacio" . Una guía para la programación en FORTRAN IV . Nueva York: Wiley. p. v. ISBN. 978-0-471-58281-6.
  33. ^ "Lista de implementaciones de FORTRAN 1957 – 1967". BCS Fortran Specialist Group . IEEE Annals. 2017. Consultado el 17 de octubre de 2017 .
  34. ^ Características funcionales del IBM System/360 Model 50 (PDF) . IBM. 1967. A22-6898-1. Archivado (PDF) del original el 29 de octubre de 2021, a través de bitsavers.
  35. ^ ab "DECSYSTEM-10 FORTRAN IV (F40) Programmers Reference Manual" (PDF) . Github . Digital Equipment Corporation . Consultado el 15 de abril de 2022 .
  36. ^ ab "FORTRAN IV". WorldCat.org . Consultado el 10 de diciembre de 2023 .
  37. ^ MIL-STD 1753 - FORTRAN, DoD Supplement To American National Standard X3.9-1978. Oficina de Imprenta del Gobierno de los Estados Unidos . 9 de noviembre de 1978. Consultado el 21 de abril de 2024 .
  38. ^ IEEE 1003.9-1992 – Estándar 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 .
  39. ^ Apéndice B.1
  40. ^ "Referencia de Fortran 95". Gnu.Org . Consultado el 10 de mayo de 2014 .
  41. ^ Lionel, Steve (30 de diciembre de 2013). "Doctor Fortran en "It's a Modern Fortran World"". Grupo de discusión sobre Fortran en el foro de Intel (antes DEC) . Intel . Consultado el 11 de abril de 2022 .
  42. ^ "Fortran 2003: último borrador de trabajo". Gnu.Org . Consultado el 10 de mayo de 2014 .
  43. ^ "WG5 completa el procesamiento de Fortran 2003 y TR". nag.co.uk . 14 de mayo de 2004. Archivado desde el 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 .
  44. ^ "N1836, Resumen de la votación/Tabla de respuestas sobre la norma ISO/IEC FDIS 1539-1, Tecnología de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base" (PDF) . Archivado (PDF) desde el original el 15 de enero de 2018.
  45. ^ "Fortran 2008 – Último borrador de trabajo" (PDF) . Gnu.Org. Archivado (PDF) del original el 12 de mayo de 2014 . Consultado el 10 de mayo de 2014 .
  46. ^ N1830, Tecnología de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base [3] [ enlace roto ]
  47. ^ ISO/IEC TS 29113:2012 – Tecnología de la información – Mayor interoperabilidad de Fortran con C.
  48. ^ "Borrador de la Especificación Técnica (TS) 29113" (PDF) . wg5-fortran.org . Archivado (PDF) del original el 15 de enero de 2018.
  49. ^ "El Doctor Fortran en "Dieciocho es el nuevo Quince"". Software.intel.com . Consultado el 20 de noviembre de 2017 .
  50. ^ "Fortran 2018". ISO . Consultado el 30 de noviembre de 2018 .
  51. ^ "Mayor interoperabilidad con C" (PDF) . ISO. Archivado (PDF) del original el 1 de diciembre de 2017 . Consultado el 20 de noviembre de 2017 .
  52. ^ "Características paralelas adicionales en Fortran". ISO . Consultado el 20 de noviembre de 2017 .
  53. ^ "Las nuevas características de Fortran 2015". ISO . Consultado el 23 de junio de 2017 .
  54. ^ "Doctor Fortran en "One Door Closes"". Software.intel.com . Consultado el 21 de septiembre de 2015 .
  55. ^ "Doctor Fortran se vuelve holandés: Fortran 2015". Software.intel.com . Consultado el 19 de noviembre de 2014 .
  56. ^ Documento de interpretación de Fortran 2018 (PDF) . 9 de octubre de 2018.
  57. ^ "Fortran 2023". wg5-fortran.org . Consultado el 30 de noviembre de 2023 .
  58. ^ Kemeny, John G.; Kurtz, Thomas E. (11 de octubre de 1968). "Dartmouth Time-Sharing". Ciencia . 162 (3850): 223–228. Bibcode :1968Sci...162..223K. doi :10.1126/science.162.3850.223. PMID  5675464.
  59. ^ Phillips, Lee (8 de mayo de 2014). "El futuro de la informática 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 .
  60. ^ Pasachoff, Jay M. (abril de 1984). "Científicos: FORTRAN frente a Modula-2". BYTE (carta). pág. 404. Consultado el 6 de febrero de 2015 .
  61. ^ Galperin, Boris (1993). "26". Simulación de grandes remolinos de flujos complejos de ingeniería y geofísica . Londres: Cambridge. pág. 573. ISBN 978-0-521-43009-8.
  62. ^ 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.
  63. ^ Curcic, Milán (24 de noviembre de 2020). Fortran moderno: creación de aplicaciones paralelas eficientes. Simon and Schuster. ISBN 978-1-61729-528-7.
  64. ^ Gaffney, PW; Wooten, JW (1 de mayo de 1980). Métodos para asegurar la estandarización del software FORTRAN (Informe). Laboratorio Nacional de Oak Ridge. OSTI  5361454. PFORT ... Biblioteca ...
  65. ^ ab PA Fox (1977). "Port — A portable mathematics subrutine library". Una biblioteca portátil de subrutinas matemáticas . Apuntes de clase en informática. Vol. 57. págs. 165–177. doi :10.1007/3-540-08446-0_42. ISBN 978-3-540-08446-4. PUERTO... escrito en (PFORT) .. ANS Fortran
  66. ^ Whitten, Douglas E.; Demaine, Paul AD (1975). "Un Fortran independiente de la máquina y de la configuración: Fortran portátil {PFortran}". IEEE Transactions on Software Engineering . SE-1 (1). Instituto de Ingenieros Eléctricos y Electrónicos (IEEE): 111–124. doi :10.1109/tse.1975.6312825. ISSN  0098-5589. S2CID  16485156.
  67. ^ "Problemas de portabilidad" ... analiza.. la portabilidad de.. Fortran
  68. ^ Healy, MJR (1968). "Towards FORTRAN VI". Fortran científico avanzado por CDC . CDC. págs. 169–172. Archivado desde el original el 5 de julio de 2009. Consultado el 10 de abril de 2009 .
  69. ^ Perlis, AJ; Smith, JW; Van Zoeren, HR Internal Translator (IT) Un compilador para IBM 650 (PDF) . Centro de Computación, Instituto Tecnológico Carnegie. Archivado (PDF) desde el original el 2 de octubre de 2012.
  70. ^ Meissner, Loren (1 de septiembre de 1975). "Sobre la extensión de las estructuras de control de Fortran para facilitar la programación estructurada". Avisos SIGPLAN de la ACM . acm.org.
  71. ^ "F Programming Language Homepage". Fortran.com. Archivado desde el original el 9 de enero de 2015. Consultado el 19 de noviembre de 2014 .
  72. ^ "Fortran para el sistema de lenguaje .NET". Archivado desde el original el 18 de octubre de 2014.
  73. ^ "FTN95: Fortran 95 para Windows". Silverfrost.com . Consultado el 19 de noviembre de 2014 .
  74. ^ Distribución posterior a la reunión X3J3 celebrada en el Laboratorio Nacional de Brookhaven en noviembre de 1976.
  75. ^ "La destrucción de O". Computer Weekly . 3 de marzo de 1977.
  76. ^ Reglas para la tipificación de datos (Referencia del lenguaje FORTRAN 77) . Consultado el 29 de septiembre de 2016 .

Lectura adicional

Normas lingüísticas
  • ANSI x3.9-1966. Norma estadounidense FORTRAN (PDF) . Instituto Nacional Estadounidense de Estándares. Archivado desde el 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 desde el original el 29 de octubre de 2013. Consultado el 11 de diciembre de 2007 .También conocida como ISO 1539–1980, informalmente conocida como FORTRAN 77.
  • ANSI X3.198-1992 (R1997) / ISO/IEC 1539:1991. Estándar nacional estadounidense: lenguaje de programación Fortran extendido. Instituto Nacional Estadounidense de Estándares / ISO/IEC. Archivado desde el original el 1 de mayo de 2002.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 desde el original (PDF) el 18 de agosto de 2011 . Consultado el 13 de diciembre de 2007 .Conocida informalmente como Fortran 95, esta norma consta de dos partes más. La Parte 1 ha sido adoptada formalmente por ANSI.
  • ISO/IEC 1539-1:2004. Tecnologías de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base (PDF) . Archivado desde el 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ías de la información – Lenguajes de programación – Fortran – Parte 1: Lenguaje base (PDF) .[ enlace muerto permanente ] Conocido informalmente como Fortran 2008.
Normas relacionadas
  • Kneis, Wilfried (octubre de 1981). "Borrador de norma industrial de 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 ordenador – Enlaces de lenguaje del sistema de núcleo gráfico (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) desde el 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 desde el original (PDF) el 5 de enero de 2012 . Consultado el 17 de noviembre de 2014 .
  • "Formulario de codificación FORTRAN" (PDF) . IBM . Archivado desde el 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 desde el 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. Consultado 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). Manual de Fortran 2003 (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-7.OCLC 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-7.OCLC 920530344  .
  • Chapman, Stephen J. (2018). Fortran para científicos e ingenieros (cuarta edición). 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). Fortran moderno: estilo y uso . Nueva York: Cambridge University Press. ISBN 978-0-521-51453-8.OCLC 776162717  .
  • Curcic, Milán (2020). Fortran moderno: creación de aplicaciones paralelas eficientes . Shelter Island, Nueva York: Manning Publications Company. ISBN 978-1-61729-528-7.OCLC 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.
  • 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). Abstrayendo 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.
  • 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. Recuperado el 4 de mayo de 2010 .
  • Prensa, William H. (1996). Recetas numéricas en Fortran 90: el arte de la computación científica paralela. 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. 338. ISBN 9780124169708.
  • Sleighthome, Jane; Chivers, Ian David (1990). Fortran 77 interactivo: un enfoque práctico. Computadoras y sus aplicaciones (2.ª ed.). Chichester: E. Horwood. ISBN 978-0-13-466764-5Archivado desde el 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". Revista IBM de investigación y desarrollo . 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 informática conjunta occidental. págs. 188–198. doi :10.1145/1455567.1455599.
  • Chivers, Ian D.; Sleightholme, Jane (2022). "Compatibilidad del compilador con los estándares Fortran 2008 y 2018".
  • Pigott, Diarmuid (2006). «FORTRAN – Backus et al. Compilador de alto nivel (lenguaje informático)». The Encyclopedia of Computer Languages . Universidad Murdoch . Archivado desde el original el 8 de octubre de 2009. Consultado 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 hogar oficial de los estándares Fortran
  • Documentos de estándares de Fortran—Estándares de Fortran
  • fortran-lang.org (2020).
  • Historia de FORTRAN y Fortran II— Museo de Historia de la Computación
  • Valmer Norrod, et al.: Un curso de autoaprendizaje sobre programación en 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 en programación FORTRAN—Volumen II—libro de trabajo, NASA CR-1478 (abril de 1970), NASA (N70-25288).
  • Una introducción al lenguaje de programación Fortran, por Reinhold Bader, Nisarg Patel, Leibniz Supercomputing Centre.
  • Un tutorial de coarray
  • Victor Eijkhout: Introducción a la programación científica en C++17/Fortran2008, El arte de HPC, volumen 3 (PDF) Archivado el 5 de febrero de 2023 en Wayback Machine .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Fortran&oldid=1250130929"