Fortran
Fortran (anteriormente FORTRAN) es un lenguaje de programación imperativo compilado de propósito general que es especialmente adecuado para computación numérica y computación científica.
Fortran fue desarrollado originalmente por IBM en la década de 1950 para aplicaciones científicas y de ingeniería y, posteriormente, llegó a dominar la informática científica. Ha estado en uso durante más de seis décadas en áreas computacionalmente intensivas como la predicción meteorológica numérica, 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 computación de alto rendimiento y se usa para programas que comparan y clasifican las supercomputadoras más rápidas del mundo.
Fortran ha tenido numerosas versiones, cada una de las cuales ha agregado extensiones mientras conserva en gran medida la compatibilidad con las versiones anteriores. Las versiones sucesivas han agregado soporte para programación estructurada y procesamiento de datos basados en caracteres (FORTRAN 77), programación de matrices, programación modular y programación genérica (Fortran 90), Fortran de alto rendimiento (Fortran 95), programación orientada a objetos (Fortran 2003), programación concurrente (Fortran 2008) y capacidades nativas de computación paralela (Coarray Fortran 2008/2018).
El diseño de Fortran fue la base de muchos otros lenguajes de programación. Entre los más conocidos está BASIC, que se basa en FORTRAN II con una serie de limpiezas de sintaxis, estructuras lógicas notablemente mejores y otros cambios para trabajar más fácilmente en un entorno interactivo.
Desde agosto de 2021, Fortran se encuentra entre los 15 principales idiomas en el índice TIOBE, una medida de la popularidad de los lenguajes de programación.
Nombramiento
El primer manual de FORTRAN lo describe como un Sistema de traducción de fórmulas e imprime el nombre en minúsculas, FORTRAN. Otras fuentes sugieren que el nombre significa Traductor de fórmulas o Traducción de fórmulas. Las primeras computadoras de IBM no admitían letras minúsculas y los nombres de las versiones del idioma hasta FORTRAN 77 generalmente se escribían en mayúsculas (FORTRAN 77 era la última versión en la que el conjunto de caracteres de Fortran incluía solo letras mayúsculas). Los estándares de idioma oficiales para Fortran se han referido al idioma como "Fortran" con mayúsculas iniciales desde Fortran 90.
Orígenes
A fines 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. Backus' El equipo histórico de FORTRAN 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. Sus conceptos incluían una entrada más fácil de ecuaciones en una computadora, una idea desarrollada por J. Halcombe Laning y demostrada en el sistema de Laning y Zierler de 1952.
Un borrador de especificación para El sistema de traducción de fórmulas matemáticas de IBM se completó en noviembre de 1954. El primer manual para FORTRAN apareció en octubre de 1956, con el primer compilador de FORTRAN entregado en abril de 1957. Este fue el primer compilador optimizador, porque los clientes se mostraban reacios a utilizar un lenguaje de programación de alto nivel a menos que su compilador pudiera generar código con un rendimiento cercano al del lenguaje ensamblador codificado a mano.
Si bien la comunidad se mostró escéptica de que este nuevo método pudiera superar a la codificación manual, redujo la cantidad de declaraciones de programación necesarias para operar una máquina en un factor de 20 y ganó aceptación rápidamente. John Backus dijo durante una entrevista de 1979 con Think, la revista para empleados de IBM, "Gran parte de mi trabajo proviene de ser perezoso. No me gustaba escribir programas, así que, cuando estaba trabajando 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.
El lenguaje fue ampliamente adoptado por los científicos para escribir programas con gran cantidad de números, lo que animó a los escritores 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.
Para 1960, las versiones de FORTRAN estaban disponibles para las computadoras IBM 709, 650, 1620 y 7090. Significativamente, la creciente popularidad de FORTRAN impulsó a los fabricantes de computadoras de la competencia a proporcionar compiladores FORTRAN para sus máquinas, de modo que en 1963 existían más de 40 compiladores FORTRAN. Por estas razones, FORTRAN se considera el primer lenguaje de programación multiplataforma ampliamente utilizado.
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 los programas de Fortran.
FORTRAN
La versión inicial de FORTRAN para IBM 704 contenía 32 declaraciones, entre ellas:
DIMENSION
yEQUIVALENCE
declaraciones- Declaraciones de la signatura
- Declaración de IF aritmética trienal, que pasó el control a una de las tres ubicaciones del programa dependiendo de si el resultado de la declaración aritmética fue negativo, cero o positivo
IF
declaraciones para la comprobación de las excepciones (ACCUMULATOR OVERFLOW
,QUOTIENT OVERFLOW
, yDIVIDE CHECK
); yIF
declaraciones para manipular interruptores de sentido y luces sensorialesGO TO
, computadoGO TO
,ASSIGN
, y asignadoGO TO
DO
bucles- Formato I/O:
FORMAT
,READ
,READ INPUT TAPE
,WRITE
,WRITE OUTPUT TAPE
,PRINT
, yPUNCH
- I/O sin formato:
READ TAPE
,READ DRUM
,WRITE TAPE
, yWRITE DRUM
- Other I/O:
END FILE
,REWIND
, yBACKSPACE
PAUSE
,STOP
, yCONTINUE
FREQUENCY
declaración (para proporcionar pistas de optimización al compilador).
La declaración aritmética IF
recordaba a (pero no fácilmente implementable por) una instrucción de comparación de tres vías (CAS: Comparar acumulador con almacenamiento) disponible en el 704. La declaración proporcionaba la única forma de comparar números: probando su diferencia, con el consiguiente riesgo de desbordamiento. Esta deficiencia fue superada más tarde por "lógico" facilidades introducidas en FORTRAN IV.
La declaración FREQUENCY
se usó originalmente (y opcionalmente) para dar probabilidades de bifurcación para los tres casos de bifurcación del enunciado IF aritmético. El primer compilador FORTRAN usó esta ponderación para realizar en tiempo de compilación una simulación Monte Carlo del código generado, cuyos resultados se usaron para optimizar la colocación de bloques básicos en la memoria, una optimización muy sofisticada para su hora. La técnica Monte Carlo está documentada en el artículo de Backus et al. sobre esta implementación original, El sistema de codificación automática FORTRAN:
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 (cuadro PRED) que enumera los bloques y listas básicos 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 bloques básicos. Esta tabla se obtiene ejecutando el programa una vez de forma Montecarlo, en el que el resultado de las transferencias condicionales resultantes de declaraciones de tipo IF y de GO TO computados está determinado por un generador de números aleatorios adecuadamente ponderado de acuerdo a cualquier declaración de FREQUENCY.
Muchos años después, la declaración FREQUENCY
no tuvo ningún efecto en el código y se trató como una declaración de comentario, ya que los compiladores ya no hacían este tipo de simulación en tiempo de compilación. Un destino similar ha ocurrido con las sugerencias del compilador en varios otros lenguajes de programación, p. el registrar< palabra clave span class="w">
en C.
El primer compilador FORTRAN reportó información de diagnóstico al detener el programa cuando se encontró un error y mostrar un código de error en su consola. El programador podría buscar ese código en una tabla de mensajes de error en el manual del operador, brindándole una breve descripción del problema. Más tarde, se incorporó una subrutina de manejo de errores para manejar los errores del usuario, como la división por cero, desarrollada por la NASA, que informa a los usuarios qué línea de código contiene el error.
Diseño fijo y tarjetas perforadas
Antes del desarrollo de archivos de disco, editores de texto y terminales, los programas se ingresaban con mayor frecuencia en un teclado perforado en tarjetas perforadas de 80 columnas, una línea por tarjeta. La baraja de cartas resultante se introduciría en un lector de cartas para ser compilada. Los códigos de tarjetas perforadas no incluían letras minúsculas ni muchos caracteres especiales, y se ofrecieron versiones especiales del teclado perforado IBM 026 que imprimirían correctamente los caracteres especiales reutilizados utilizados en FORTRAN.
Reflejando la práctica de entrada de tarjetas perforadas, los programas Fortran se escribieron originalmente en un formato de columna fija, con las primeras 72 columnas leídas en doce palabras de 36 bits.
Una letra "C" en la columna 1 hizo que toda la tarjeta fuera tratada como un comentario y el compilador la ignorara. De lo contrario, las columnas de la tarjeta se dividieron en cuatro campos:
- 1 a 5 fueron el campo de etiquetas: una secuencia de dígitos aquí fue tomada como una etiqueta para uso en DO o estados de control como GO TO e IF, o para identificar una declaración FORMAT a la que se refiere en una declaración WRITE o READ. Los ceros principales son ignorados y 0 no es un número de etiqueta válido.
- 6 era un campo de continuación: un personaje aparte de un blanco o un cero aquí causó que la tarjeta se tomara como una continuación de la declaración en la tarjeta anterior. Las tarjetas de continuación eran generalmente numeradas 1, 2, etc. y la tarjeta inicial podría tener cero en su columna de continuación, que no es una continuación de su tarjeta anterior.
- 7 a 72 actuaron como campo de declaración.
- 73 a 80 fueron ignorados (el lector de tarjetas IBM 704 sólo utilizó 72 columnas).
Por lo tanto, las columnas 73 a 80 podrían usarse para información de identificación, como marcar un número de secuencia o texto, que podría usarse para reordenar las tarjetas si se cae una pila de tarjetas; aunque en la práctica esto estaba reservado para programas de producción estables. Se podría usar un IBM 519 para copiar una plataforma de programa y agregar números de secuencia. Algunos de los primeros compiladores, por ejemplo, IBM 650, tenían restricciones adicionales debido a las limitaciones de sus lectores de tarjetas. Las pulsaciones de teclas se pueden 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 espacios en blanco (espacios en blanco) se ignoraron fuera de un texto literal. Esto permitió omitir espacios entre tokens por brevedad o incluir espacios dentro de los identificadores por claridad. Por ejemplo, AVG OF X
era un identificador válido, equivalente a AVGOFX
, y 101010DO101I=1,101< span class="w">
era una declaración válida, equivalente a
10101 span>DO 101 I< /span> = 1< /span>, 101< /span>
porque el cero en la columna 6 se trata como si fuera un espacio (!), mientras que 101010DO101I= 1.101
era 10101 DO101I = 1.101
, la asignación de 1.101 a una variable llamada DO101I
. Tenga en cuenta la ligera diferencia visual entre una coma y un punto.
Las cadenas Hollerith, originalmente permitidas solo en declaraciones FORMAT y DATA, fueron precedidas por un conteo de caracteres y la letra H (por ejemplo, 26HTESTOS SON DATOS ALFANUMÉRICOS.
), lo que permite retener espacios en blanco dentro de la cadena de caracteres. Los errores de conteo eran un problema.
Evolución
FORTRAN II
IBM's FORTRAN II apareció en 1958. La principal mejora fue admitir la programación de procedimientos al permitir funciones y subrutinas escritas por el usuario que devolvían valores con parámetros pasados por referencia. La declaración COMÚN proporcionó una forma para que las subrutinas accedieran a variables comunes (o globales). Se introdujeron seis nuevas declaraciones:
SUBROUTINE
,FUNCTION
, yEND
CALL
yRETURN
COMMON
Durante los próximos años, FORTRAN II también agregaría soporte para DOBLE PRECISIÓN
y datos COMPLEJO
tipos
Los primeros compiladores de FORTRAN no admitían recursividad en las 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 a menudo se almacenaba en una ubicación fija adyacente al código de subrutina (por ejemplo, el IBM 1130) o un registro de máquina específico (IBM 360 et seq), que solo permite la recursividad si el software mantiene una pila 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 recursividad como una opción, y los mainframes de Burroughs, diseñados con recursividad 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.
Programa FORTRAN II sencillo
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 "tipo" declaraciones disponibles: las variables cuyo nombre comienza con I, J, K, L, M o N son "punto fijo" (es decir, números enteros), de lo contrario, punto flotante. Dado que en este ejemplo se van a procesar 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 tanto con letras como con 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 terminará 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, seguida 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., the.2 en F10.2 de la instrucción FORMAT con la etiqueta 601.
C AREA DE UNA ZONA CON UNA FUNCIONAMIENTO SQUAREC INPUT - TAPE READER UNIT 5, INTEGER INPUTC OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUTC INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING READ INPUT TAPE 5, 501, IA, IB, IC 501 FORMAT ()3I5)C IA, IB, Y IC MAYO NO ES NEGATIVO O ZEROC FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLEDebe ser más divertido que el tercer lado, así que nos encargamos de eso. IF ()IA) 777, 777, 701 701 IF ()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 STOP 1UTILIZACIÓN DE HERON ES FORMULAC AREA OF THE TRIANGLE 799 S = FLOATF ()IA + IB + IC) / 2.0 AREA = SQRTF() S * ()S - FLOATF()IA) * ()S - FLOATF()IB) * + ()S - FLOATF()IC)) WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA 601 FORMAT ()4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2, + 13H SQUARE UNITS) STOP 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 704 FORTRAN y FORTRAN II, FORTRAN III incluía funciones dependientes de la máquina que hacían que el código escrito en él no se pudiera transportar de una máquina a otra. Las primeras versiones de FORTRAN proporcionadas por otros proveedores sufrían la misma desventaja.
IBM 1401 FORTRAN
FORTRAN fue proporcionado para la computadora IBM 1401 por un innovador compilador de 63 fases que se ejecutó completamente en su memoria central de solo 8000 (seis bits) caracteres. El compilador podría ejecutarse desde una cinta o desde una baraja de 2200 cartas; no usó más cinta o almacenamiento en disco. Mantuvo el programa en la memoria y cargó superposiciones que lo transformaron gradualmente, en su lugar, en forma ejecutable, como lo describe Haines. Este artículo fue reimpreso, editado, en ambas ediciones de Anatomy of a Compiler y en el manual de IBM "Fortran Specifications and Operating Procedures, IBM 1401". La forma ejecutable no era del todo lenguaje de máquina; más bien, se interpretaron la aritmética de coma flotante, los subguiones, la entrada/salida y las referencias a funciones, precediendo al código P de UCSD Pascal por dos décadas.
IBM luego proporcionó un compilador FORTRAN IV para la serie 1400 de computadoras.
FORTRAN IV
IBM comenzó el desarrollo de FORTRAN IV a partir de 1961, como resultado de las demandas de los clientes. FORTRAN IV eliminó las características dependientes de la máquina de FORTRAN II (como LEER CINTA DE ENTRADA
), al tiempo que agrega nuevas funciones, como un tipo de datos LÓGICO, expresiones booleanas lógicas y la declaración IF lógica como alternativa a la aritmética declaración IF. FORTRAN IV finalmente se lanzó en 1962, primero para la computadora IBM 7030 ("Stretch"), seguido de versiones para IBM 7090, IBM 7094 y más tarde para IBM 1401 en 1966.
Para 1965, se suponía que FORTRAN IV cumplía con el estándar desarrollado por el grupo de trabajo X3.4.3 FORTRAN de la Asociación Estadounidense de Estándares.
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 necesitaba el compilador para ejecutarse. Las letras (F, G, H) coincidían con los códigos utilizados con los números de modelo de System/360 para indicar el tamaño de la memoria, siendo cada incremento de letra un factor de dos mayor:
- 1966: FORTRAN IV F for DOS/360 (64K bytes)
- 1966: FORTRAN IV G for OS/360 (128K bytes)
- 1968: FORTRAN IV H for OS/360 (256K bytes)
Digital Equipment Corporation mantuvo DECSYSTEM-10 Fortran IV (F40) para PDP-10 de 1967 a 1975
En esa época, FORTRAN IV había comenzado a convertirse en una importante herramienta educativa y se crearon implementaciones como WATFOR y WATFIV de la Universidad de Waterloo para simplificar los complejos procesos de compilación y vinculación de los compiladores anteriores.
FORTRAN 66
Quizás el desarrollo más significativo en la historia inicial 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 BEMA, el Business Equipment Asociación de Fabricantes, para desarrollar un American Standard Fortran. Los dos estándares resultantes, aprobados en marzo de 1966, definían dos idiomas, FORTRAN (basado en FORTRAN IV, que había servido como estándar de facto), y FORTRAN básico (basado en en FORTRAN II, pero despojado 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 idioma 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 incluye:
- Programa principal,
SUBROUTINE
,FUNCTION
, yBLOCK DATA
unidades de programa INTEGER
,REAL
,DOUBLE PRECISION
,COMPLEX
, yLOGICAL
Tipos de datosCOMMON
,DIMENSION
, yEQUIVALENCE
declaracionesDATA
declaración para especificar los valores iniciales- Intrínseco y
EXTERNAL
(por ejemplo, biblioteca) funciones - Declaración de asignación
GO TO
, computadoGO TO
, asignadoGO TO
, yASSIGN
declaraciones- Lógica
IF
y aritmética (tres vías)IF
declaraciones DO
Loop statementREAD
,WRITE
,BACKSPACE
,REWIND
, yENDFILE
de las Naciones Unidas para el desarrolloFORMAT
declaración y formato asignadoCALL
,RETURN
,PAUSE
, ySTOP
declaraciones- Constantes Hollerith en
DATA
yFORMAT
y como argumentos a los procedimientos - Identificadores de hasta seis caracteres de longitud
- Observaciones
END
línea
FORTRAN 77
Después del lanzamiento del estándar FORTRAN 66, los proveedores de compiladores introdujeron varias extensiones al Standard Fortran, lo que provocó que el comité X3J3 de ANSI en 1969 comenzara a trabajar en la revisión del estándar de 1966, bajo el patrocinio de CBEMA, Computer Asociación de Fabricantes de Equipos Comerciales (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, denominado FORTRAN 77 y denominado oficialmente X3.9-1978, agregó una serie de características significativas para abordar muchas de las deficiencias de FORTRAN 66:
- Bloque
IF
yEND IF
declaraciones, con carácter facultativoELSE
yELSE IF
Cláusulas, para proporcionar un mejor apoyo lingüístico a la programación estructurada DO
extensiones de bucle, incluyendo expresiones de parámetro, incrementos negativos y cuenta de viaje ceroOPEN
,CLOSE
, yINQUIRE
declaraciones para mejorar la capacidad de I/O- Archivo de acceso directo I/O
IMPLICIT
declaración, anular las convenciones implícitas que las variables no declaradas son INTEGER si su nombre comienza con I, J, K, L, M, o N (y REAL de otra manera)CHARACTER
tipo de datos, reemplazando las cadenas Hollerith con instalaciones ampliadas para la entrada y salida de caracteres y procesamiento de datos basados en caracteresPARAMETER
declaración para especificar constantesSAVE
declaración para variables locales persistentes- Nombres genéricos para funciones intrínsecas (por ejemplo.
SQRT
también acepta argumentos de otros tipos, comoCOMPLEX
oREAL*16
). - Un conjunto de intrínsecos (
LGE, LGT, LLE, LLT
Para lexical comparación de cadenas, basado en la secuencia de collating ASCII. (Estas funciones de ASCII fueron exigidas por el Departamento de Defensa de los Estados Unidos, en su voto condicional de aprobación.)
En esta revisión del estándar, se eliminaron o modificaron varias funciones de una manera que podría invalidar los 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 "desaprobación" 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 que rara vez se usaban, se eliminó deliberadamente una pequeña cantidad de capacidades específicas, como:
- Constantes Hollerith y datos Hollerith, como
GREET = 12HHELLO THERE!
- Lectura en un descriptor H (campo Hollerith) en una especificación FORMAT
- Overindexing of array bounds by subscripts
DIMENSION A()10,5) Y= A()11,1)
- Transferencia de control desde y hacia el rango de un bucle DO (también conocido como "Extended Range")
Transición a ANSI estándar Fortran
El desarrollo de un estándar revisado para reemplazar a FORTRAN 77 se retrasaría repetidamente ya que el proceso de estandarización luchaba por mantenerse al día con los rápidos cambios en la práctica informática 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. Esta especificación, desarrollada por el Departamento de Defensa de EE. UU., estandarizó una serie de características implementadas por la mayoría de los compiladores de FORTRAN 77 pero no incluidas en ANSI FORTRAN 77 estándar. Estas características eventualmente se incorporarían al estándar Fortran 90.
DO WHILE
,EXIT
,CYCLE
, yEND DO
declaracionesINCLUDE
declaraciónIMPLICIT NONE
variante de laIMPLICIT
declaración- Funciones intrínsecas de manipulación de bits, basadas en funciones similares incluidas en Industrial Real-Time Fortran (ANSI/ISA S61.1 (1976))
El estándar IEEE 1003.9 POSIX, lanzado en 1991, proporcionó un medio simple para que los programadores de FORTRAN 77 emitieran llamadas al sistema POSIX. Se definieron más de 100 llamadas en el documento, lo que permite el acceso a control de procesos compatible con POSIX, manejo de señales, control de sistemas de archivos, control de dispositivos, señalización de procedimientos y transmisión de E/S de forma portátil.
Fortrán 90
El sucesor tan retrasado 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 un 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 habían evolucionado desde el estándar de 1978:
- La fuente de forma libre removió la necesidad de saltar las primeras seis posiciones de carácter antes de entrar en declaraciones.
- Palabras clave de Lowercase Fortran
- Identificadores de hasta 31 caracteres de longitud (En el estándar anterior, sólo eran seis caracteres).
- Comentarios en línea
- Capacidad para operar en conjuntos (o secciones de matriz) en su conjunto, simplificando así enormemente las computaciones de matemáticas e ingeniería.
- declaraciones completas, parciales y enmascaradas de asignación de array y expresiones de array, tales como
X(1:N)=R(1:N)*COS(A(1:N))
WHERE
declaración para la asignación selectiva de array- constantes y expresiones de gran valor,
- funciones y constructores de matriz definidos por el usuario.
- declaraciones completas, parciales y enmascaradas de asignación de array y expresiones de array, tales como
- Procedimientos RECURSOS
- Módulos, para agrupar procedimientos y datos relacionados, y ponerlos a disposición de otras unidades de programas, incluyendo la capacidad de limitar la accesibilidad a sólo partes específicas del módulo.
- Un mecanismo de superación de argumentos muy mejorado, permitiendo que las interfaces sean revisadas en el tiempo de compilación
- Interfaz de usuario escrita para procedimientos genéricos
- Operador sobrecarga
- Tipos de datos derivados (estructurados)
- Nuevo tipo de datos sintaxis de declaración, para especificar el tipo de datos y otros atributos de variables
- Asignación dinámica de memoria por medio de la
ALLOCATABLE
atributo y elALLOCATE
yDEALLOCATE
declaraciones - Atributo POINTER, asignación de punteros, y
NULLIFY
Declaración para facilitar la creación y manipulación de estructuras dinámicas de datos - Construcción estructurada de bucle, con un
END DO
declaración para la terminación del bucle, yEXIT
yCYCLE
declaraciones para poner fin a la normalidadDO
iteraciones de bucle de forma ordenada SELECT
...CASE
construir para la selección multi-way- Especificación portátil de precisión numérica bajo el control del usuario
- Procedimientos intrínsecos nuevos y mejorados.
Obsolescencia y eliminaciones
A diferencia de la revisión anterior, Fortran 90 no eliminó funciones. Cualquier programa FORTRAN 77 que cumpla con los estándares también cumplía con los estándares en 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 funciones como "obsoletas" y se esperaba que fueran eliminados en una norma futura. Todas las funcionalidades de estas características de la versión anterior se pueden realizar con características más nuevas de Fortran. Algunos se conservan para simplificar la migración de programas antiguos, pero muchos se eliminaron en Fortran 95.
Función obsolescente | Situación actual |
---|---|
Arithmetic IF-statement | Suprimido |
Parámetros de DO no enteros o variables de control | Suprimido |
Terminación o terminación compartida de DO-loop con una declaración que no sea END DO o CONTINUE | Suprimido |
Subir a END IF desde fuera de un bloque | Suprimido |
Retorno alternativo | Obsolescente |
Declaración de PAUSE | Suprimido |
Declaración de apoyo y declaración de GO TO | Suprimido |
Números de estados asignados y especificadores FORMAT | Suprimido |
Descriptores de edición H | Suprimido |
Computed GO TO statement | Obsolescente |
Funciones de declaración | Obsolescente |
DATA statements among executable statements | Obsolescente |
CHARACTER* form of CHARACTER declaration | Obsolescente |
Funciones de longitud de caracteres assumidas | Obsolescente |
Código fuente de formulario fijo | Obsolescente |
"¡Hola, mundo!" ejemplo
programa Hola. impresión *, "¡Hola, Mundo!"programa final Hola.
Fortrán 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. Sin embargo, Fortran 95 también agregó una serie de extensiones, en particular de la especificación High Performance Fortran:
FORALL
y anidadoWHERE
constructos para ayudar a la vectorización- Definido por el usuario
PURE
yELEMENTAL
procedimientos - Iniciación predeterminada de los componentes derivados del tipo, incluida la inicialización del puntero
- Ampliación de la capacidad de utilizar expresiones de inicialización para objetos de datos
- Iniciación de los punteros a
NULL()
- Definido claramente que
ALLOCATABLE
arrays se desalocan automáticamente cuando salen de su alcance.
Se ampliaron varias funciones intrínsecas (por ejemplo, un dim Se agregó el argumento
al maxloc
intrínseco).
Se ha observado que varias características de Fortran 90 son "obsoletas" fueron eliminados de Fortran 95:
DO
declaraciones utilizandoREAL
yDOUBLE PRECISION
variables- Subdivisión a un
END IF
declaración desde fuera de su bloque PAUSE
declaraciónASSIGN
y asignadosGO TO
declaración y especificadores de formato asignadoH
Descriptor de edición Hollerith.
Un complemento importante de Fortran 95 fue el informe técnico de ISO TR-15581: Instalaciones de tipos de datos mejorados, informalmente conocido como TR asignable. Esta especificación definió el uso mejorado de ALLOCATABLE
matrices, antes de la disponibilidad de Fortran 2003 completo Compiladores Fortran compatibles. Dichos usos incluyen matrices ALLOCATABLE
como componentes de tipo derivado, en listas de argumentos ficticios de procedimientos y como valores devueltos por funciones. (Las matrices ALLOCATABLE
son preferibles a POINTER
-based arrays porque ALLOCATABLE
Fortran 95 garantiza que las matrices se desasignen automáticamente cuando quedan fuera del alcance, eliminando la posibilidad de pérdida 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 la matriz, lo que permite a los compiladores generar código más rápido que en el caso de los punteros).
Otro complemento importante de Fortran 95 fue el informe técnico de ISO TR-15580: manejo de excepciones de coma flotante, informalmente conocido como IEEE TR. Esta especificación definió el soporte para Aritmética de punto flotante IEEE y manejo de excepciones de punto flotante.
Compilación condicional y cadenas de longitud variable
Además del obligatorio "Idioma base" (definido en ISO/IEC 1539-1: 1997), el lenguaje Fortran 95 también incluye dos módulos opcionales:
- Varying length character strings (ISO/IEC 1539-2: 2000)
- Recopilació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 considerable de usuarios y/o implementadores, pero que no se consideran suficientemente generales para que sean requerido en todos los compiladores de Fortran que cumplen con los estándares." Sin embargo, si un Fortran que cumple con el estándar proporciona dichas opciones, entonces "deben proporcionarse de acuerdo con la descripción de esas instalaciones en la Parte correspondiente del Estándar".
Fortran moderna
(feminine)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 es cada vez más utilizado en la literatura.
Fortrán 2003
Fortran 2003, publicado oficialmente como ISO/IEC 1539-1:2004, es una revisión importante que presenta muchas características nuevas. Un resumen completo de las nuevas funciones de Fortran 2003 está disponible en el sitio web oficial del Grupo de trabajo de Fortran (ISO/IEC JTC1/SC22/WG5).
De ese artículo, las principales mejoras para esta revisión incluyen:
- Mejoras de tipo derivadas: tipos derivados parametizados, mejor control de accesibilidad, constructores de estructuras mejorados y finalizadores
- Soporte de programación orientado a objetos: extensión y herencia de tipo, polimorfismo, asignación de tipo dinámico y procedimientos de tipo, proporcionando soporte completo para tipos de datos abstractos
- Mejoras de la manipulación de datos: componentes alocalizados (incorporando TR 15581), parámetros de tipo diferido, atributo VOLATILE, especificación explícita de tipo en constructores de matriz y asignar declaraciones, mejoras de puntero, expresiones de inicialización ampliadas y procedimientos intrínsecos mejorados
- Mejoras de entrada/salida: transferencia asincrónica, acceso a la corriente, operaciones de transferencia especificadas por el usuario para tipos derivados, control especificado por el usuario de redondeo durante conversiones de formato, llamadas constantes para unidades preconectadas,
FLUSH
declaración, regularización de palabras clave y acceso a mensajes de error - Indicadores de procedimiento
- Soporte para el manejo aritmético y de puntos flotantes de IEEE (incorporación TR 15580)
- Interoperabilidad con el lenguaje de programación C
- Apoyo al uso internacional: acceso a caracteres de 4 bytes ISO 10646 y elección de decimales o comas en entrada y salida con formato numérico
- Mayor integración con el sistema operativo host: acceso a argumentos de línea de comandos, variables ambientales y mensajes de error de procesador
Un complemento importante de Fortran 2003 fue el informe técnico de ISO TR-19767: Instalaciones de módulos mejoradas en Fortran. Este informe proporcionó submódulos que hacen que los módulos de Fortran sean más similar a los módulos 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 cascadas de compilación.
Fortrán 2008
ISO/IEC 1539-1:2010, informalmente conocido como Fortran 2008, fue aprobado en septiembre de 2010. Al igual que con Fortran 95, esta es una actualización menor que incorpora aclaraciones y correcciones a Fortran 2003, además de introducir algunas capacidades nuevas.. Las nuevas capacidades incluyen:
- Sub-modules – instalaciones adicionales de estructuración para módulos; supera ISO/IEC TR 19767:2005
- Coarray Fortran – un modelo de ejecución paralela
- El constructo DO CONCURRENTO - para las iteraciones de bucle sin interdependencias
- El atributo CONTIGUOUS – para especificar restricciones de diseño de almacenamiento
- La construcción BLOCK – puede contener declaraciones de objetos con alcance de construcción
- Componentes alocalables recuperables – como alternativa a los punteros recursivos en tipos derivados
El borrador final del estándar internacional (FDIS) está disponible como documento N1830.
Un complemento de Fortran 2008 es la especificación técnica (TS) 29113 de la Organización Internacional de Normalización (ISO) sobre interoperabilidad adicional de Fortran con C, 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 el rango de los argumentos.
Fortrán 2018
La última revisión del lenguaje (Fortran 2018) se denominó anteriormente Fortran 2015. Es una revisión importante y se publicó el 28 de noviembre de 2018.
Fortran 2018 incorpora dos especificaciones técnicas publicadas anteriormente:
- ISO/IEC TS 29113:2012 Interoperabilidad adicional con C
- ISO/IEC TS 18508:2015 Características adicionales del paralelo en Fortran
Los cambios adicionales y las nuevas características incluyen soporte para 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 IMPLICIT NONE y otras cambios.
Características del idioma
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 ofrece Fortran 95. Las versiones de idioma definidas por estándares posteriores a menudo se denominan colectivamente 'Modern Fortran' y se describen en la literatura.
Ciencia e ingeniería
Aunque un artículo de revista de 1968 de los autores de BASIC ya describía FORTRAN como "anticuado", a partir de 2022 los programas se han escrito en Fortran durante más de seis décadas y hay una gran cantidad de software Fortran en el uso diario a través de las comunidades científicas y de ingeniería. Jay Pasachoff escribió en 1984 que “los estudiantes de física y astronomía simplemente tienen que aprender FORTRAN. Hay tantas cosas en FORTRAN que parece poco probable que los científicos cambien a Pascal, Modula-2 o lo que sea." En 1993, Cecil E. Leith llamó a FORTRAN la "lengua materna de la computación científica", y agregó que su reemplazo por cualquier otro lenguaje posible "puede seguir siendo una esperanza perdida".
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, 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. 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 Recetas numéricas.
Aparte de esto, los códigos más modernos en ciencia computacional generalmente usan bibliotecas de programas grandes, como METIS para particiones de gráficos, PETSc o Trilinos para capacidades de álgebra lineal, deal.II o FEniCS para compatibilidad con mallas 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 MATLAB, Python y R se han vuelto populares en áreas particulares de la ciencia computacional. En consecuencia, una fracción cada vez mayor de los programas científicos también está escrita en lenguajes de secuencias de comandos de alto nivel. Por esta razón, se agregaron facilidades para la interoperabilidad con C a Fortran 2003 y se mejoraron con 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.
El software para las sondas de la NASA Voyager 1 y Voyager 2 se escribió originalmente en FORTRAN 5 y luego se transfirió a FORTRAN 77. A partir del 25 de septiembre de 2013, parte del software todavía está escrito en Fortran y parte se transfirió a C.
Portabilidad
La portabilidad fue un problema en los primeros días porque no había un estándar acordado, ni siquiera el manual de referencia de IBM, y las empresas de computadoras competían para diferenciar sus ofertas de las demás al proporcionar funciones 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 continuaron brindando extensiones incompatibles. Aunque los programadores cuidadosos comenzaron a darse cuenta de que el uso de extensiones incompatibles causaba problemas de portabilidad costosos y, por lo tanto, usaban programas como The PFORT Verifier, no fue hasta después del estándar de 1977, cuando la Oficina Nacional de Estándares (ahora NIST) publicó FIPS PUB 69, que los procesadores comprados por el gobierno de los EE. UU. eran necesarios para diagnosticar las extensiones del estándar. En lugar de ofrecer dos procesadores, esencialmente todos los compiladores eventualmente tenían al menos una opción para diagnosticar extensiones.
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 por la biblioteca PORT. Las ideas allí contenidas se utilizaron ampliamente y finalmente se incorporaron al estándar de 1990 a través de funciones de investigación intrínsecas. La adopción generalizada (ahora casi universal) del estándar IEEE 754 para la aritmética binaria de coma flotante ha eliminado esencialmente este problema.
El acceso al entorno informático (p. ej., 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ó en la norma de 2003.
Grandes colecciones de software de biblioteca que podrían describirse como vagamente relacionadas con la ingeniería y los cálculos científicos, como las bibliotecas gráficas, se han escrito en C y, por lo tanto, el acceso a ellas presentaba un problema de portabilidad. Esto se ha abordado mediante la incorporación de la interoperabilidad C en el estándar de 2003.
Ahora es posible (y relativamente fácil) escribir un programa totalmente portátil 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. Algunos eran más divergentes de la corriente principal que otros.
El primer compilador de 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 lo hacían los fabricantes de computadoras 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). Los ejemplos incluyen Watfor, Watfiv, PUFFT y, en menor escala, FORGO, Wits Fortran y Kingston Fortran 2.
Fortran 5 fue comercializado por Data General Corp a fines de la década de 1970 y principios de la de 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 parece más 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.
Univac también ofreció un compilador para la serie 1100 conocido como FORTRAN V. Una derivación de Univac Fortran V fue Athena FORTRAN.
Variantes específicas producidas por 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 caché de instrucciones, canalizaciones de CPU y matrices de vectores. 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 varias unidades aritméticas internas simultáneamente. 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 de Fortran orientada a objetos, 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 es compatible.
Estas extensiones específicas de máquinas han desaparecido con el tiempo o se han incorporado elementos en los estándares principales. La principal extensión restante es OpenMP, que es una extensión multiplataforma para la programación de memoria compartida. Una nueva extensión, Coarray Fortran, está destinada a admitir la programación paralela.
FOR TRANSIT era el nombre de una versión reducida del lenguaje IBM 704 FORTRAN, que se implementó para el IBM 650, utilizando un programa traductor desarrollado en Carnegie a fines de la década de 1950. El siguiente comentario aparece en el Manual de referencia de IBM (FOR TRANSIT Automatic Coding System C28-4038, Copyright 1957, 1959 de IBM):
El sistema FORTRAN fue diseñado para una máquina más compleja que el 650, y en consecuencia algunas de las 32 declaraciones encontradas en el Manual de Referencia del Programador FORTRAN no son aceptables para el sistema FOR TRANSIT. Además, se han añadido ciertas restricciones al idioma FORTRAN. Sin embargo, ninguna de estas restricciones hace que un programa fuente escrito para TRANSIT sea incompatible con el sistema FORTRAN para el 704.
Las declaraciones permitidas eran:
- 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 usar hasta diez subrutinas en un programa.
Las declaraciones FOR TRANSIT se limitaron a las columnas 7 a 56 únicamente. Se usaron tarjetas perforadas para la entrada y salida en el IBM 650. Se requirieron tres pases para traducir el código fuente al "IT" luego para compilar las declaraciones de TI en lenguaje ensamblador SOAP y, finalmente, para producir el programa objeto, que luego podría cargarse en la máquina para ejecutar el programa (usando tarjetas perforadas para la entrada de datos y la salida de resultados en tarjetas perforadas).
Existían dos versiones para los 650 con un tambor de memoria de 2000 palabras: FOR TRANSIT I (S) y FOR TRANSIT II, la última para máquinas equipadas con registros de indexación y aritmética automática decimal (bi-quinaria) de punto flotante. El Apéndice A del manual incluye diagramas de cableado para el panel de control del lector/perforador de tarjetas IBM 533.
Lenguajes basados en Fortran
Antes de FORTRAN 77, se usaban varios 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. Estos preprocesadores normalmente admitirí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 incluyen EFL, FLECS, iftran, MORTRAN, SFtran, S-Fortran, Ratfor y Ratfiv. Ratfor y Ratfiv, por ejemplo, implementaron un lenguaje similar a C, generando código preprocesado en FORTRAN 66 estándar. 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, presentada en los años 60, se usaba popularmente en colegios y universidades. Desarrollado, respaldado y distribuido por la Universidad de Waterloo, WATFOR se basó en gran medida en FORTRAN IV. Un estudiante que usa WATFOR podría enviar su trabajo FORTRAN por lotes y, si no hubiera errores de sintaxis, el programa pasaría directamente a la ejecución. Esta simplificación permitió 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/edición de enlaces/ejecución u otros complejidades del entorno mainframe/miniordenador. 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 y sus versiones posteriores.
programa; s=0 i=1,n; s=s+1; Para i; s='s ' Para.
(programación de línea)
LRLTRAN se desarrolló en el Lawrence Radiation Laboratory para brindar soporte para la aritmética vectorial y el almacenamiento dinámico, entre otras extensiones para admitir la programación de sistemas. La distribución incluía el sistema operativo LTSS.
El estándar Fortran-95 incluye una Parte 3 opcional que define una capacidad de compilación condicional opcional. Esta capacidad a menudo se denomina "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 funciones redundantes, no estructuradas y obsoletas de Fortran, como EQUIVALENCIA
declaración. F conserva las funciones de matriz agregadas en Fortran 90 y elimina las declaraciones de control que quedaron 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 compilado, estructurado y de matriz especialmente adecuado para la educación y la computación científica". Essential Lahey Fortran 90 (ELF90) era un subconjunto similar.
Lahey y Fujitsu se unieron para crear Fortran para Microsoft.NET Framework. Silverfrost FTN95 también es capaz de crear código.NET.
Ejemplos de código
El siguiente programa ilustra la asignación de memoria dinámica y las operaciones basadas en arreglos, dos características introducidas con Fortran 90. Particularmente notable es la ausencia de DO
bucles y SI
/ENTONCES code> declaraciones en 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 formato de código general que se ajusta al estilo de programación contemporáneo. Este ejemplo calcula un promedio sobre los datos ingresados de forma interactiva.
programa promedio ! Lea en algunos números y tome el promedio ! Como está escrito, si no hay puntos de datos, se devuelve un promedio de cero ! Aunque esto no puede ser el comportamiento deseado, mantiene este ejemplo simple implícita real, dimensión(:), allocatable :: puntos entero :: Número_de_puntos real :: promedio_puntos, positive_average, negativo_average promedio_puntos = 0,0 positive_average = 0,0 negativo_average = 0,0 escribir ()*,*) "Número de puntos a promedio:" leído ()*,*) Número_de_puntos asignar ()puntos()Número_de_puntos) escribir ()*,*) "Introducir los puntos a promedio:" leído ()*,*) puntos ! Tome el promedio por puntos de resumir y dividir por número_de_puntos si ()Número_de_puntos ■ 0) promedio_puntos = suma()puntos) / Número_de_puntos ! Ahora forma promedio sobre puntos positivos y negativos solamente si ()Cuenta()puntos ■ 0.) ■ 0) positive_average = suma()puntos, puntos ■ 0.) / Cuenta()puntos ■ 0.) si ()Cuenta()puntos . 0.) ■ 0) negativo_average = suma()puntos, puntos . 0.) / Cuenta()puntos . 0.) ! Resultado de impresión a terminal stdout unidad 6 escribir ()*,"(a,g12.4) ') "Average", promedio_puntos escribir ()*,"(a,g12.4) ') Promedio de puntos positivos = ', positive_average escribir ()*,"(a,g12.4) ') 'Average of negative points = ', negativo_average deallocate ()puntos) ! memoria libreprograma final promedio
Humor
Durante la misma reunión del comité de normas de FORTRAN en la que se mencionó el nombre "FORTRAN 77" fue elegido, se incorporó a la distribución oficial una propuesta técnica satírica con el título "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, al eliminar la letra de los nombres de variables permitidos. Sin embargo, el método propuesto fue eliminar por completo la letra del conjunto de caracteres (manteniendo 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, haciendo imposible el uso del notorio GO TO
declaración como antes. (También se eliminarían las declaraciones problemáticas de FORMAT
). se señaló que esto "podría invalidar algunos programas existentes" pero que la mayoría de estos "probablemente no eran conformes, de todos modos".
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 (irónicamente) que si fuera menos de dos, ¡entonces no habría razón para un bucle!
Cuando se añadían matrices de longitud supuesta, había una disputa sobre el carácter apropiado para separar los límites superior e inferior. En un comentario que examina estos argumentos, el Dr. Walt Brainerd escribió un artículo titulado "Astronomía versus Gastroenterología" porque algunos proponentes sugirieron usar la estrella o el asterisco ("*"), mientras que otros preferían los dos puntos (":").
Los nombres de variables que comienzan con las letras I–N tienen un tipo de número entero predeterminado, mientras que las variables que comienzan con cualquier otra letra tienen el valor real predeterminado, aunque los programadores pueden anular los valores predeterminados con una declaración explícita. Esto condujo al chiste: "En FORTRAN, DIOS es REAL (a menos que se declare INTEGER)."
Contenido relacionado
Forma extendida de Backus-Naur
Loto 1-2-3
Corrección de errores de Reed-Solomon