🔬 Fortran — 1957

⬅️ Atlas · 🧟 Lenguajes que siguen vivos · 📚 Índice de clases

El lenguaje con el que se predice el clima. El primer lenguaje de alto nivel de la historia sigue siendo, casi setenta años después, el que ejecutan los supercomputadores más grandes del mundo. No por inercia: por velocidad.

🎯 Por qué está en este programa

Criterio de inclusión: Fortran se ejecuta hoy, y además sigue evolucionando — el estándar vigente es de 2023, hay cuatro compiladores en desarrollo activo y un gestor de paquetes nuevo. No es un lenguaje que sobreviva: es uno que compite.

Entra porque deja a la vista un concepto que el núcleo esconde: el array como ciudadano de primera y el coste real del solapamiento de memoria (aliasing). Cuando en Python escribes c = a + b sobre arrays de NumPy y va rápido, es porque debajo hay código compilado con las garantías que Fortran da por defecto. Ver la versión de Fortran explica por qué NumPy existe y por qué C tuvo que inventar restrict para acercarse.

Año 1957 (primer compilador, IBM 704)
Autoría John Backus y su equipo en IBM
Familia Científica / cálculo numérico y de arrays
Paradigma Imperativo y procedimental; modular desde F90, OO desde F2003
Tipado Estático y fuerte, con implicit none obligatorio en la práctica moderna
Memoria Estática y de pila por defecto; allocatable gestionado por el compilador
Ejecución Compilado a nativo, con optimización agresiva
Estado 🟢 Vivo y en evolución — estándar 2023; no es solo legacy

📜 Historia

En 1954 John Backus propuso a IBM algo que sonaba a herejía: un lenguaje en el que el programador escribiera fórmulas matemáticas y un traductor generara código máquina tan bueno como el escrito a mano. Era la parte difícil. Nadie dudaba de que se pudiera traducir; se dudaba de que el resultado fuera aceptablemente rápido, porque en 1954 la programación era ensamblador y el ensamblador era sagrado.

El equipo tardó tres años. FORTRAN (FORmula TRANslating System) se entregó en 1957 para el IBM 704 y, con él, el primer compilador optimizador de la historia: análisis de expresiones, asignación de registros, optimización de bucles. Ese trabajo, más que el lenguaje, es la contribución que fundó la disciplina de construcción de compiladores.

La evolución posterior marca dos épocas claramente distintas:

Nota tipográfica útil para leer literatura antigua: hasta el 77 se escribía FORTRAN en mayúsculas; desde el 90, Fortran. La grafía te dice de qué época habla un texto.

🏭 Dónde sobrevive hoy

🧠 Por qué no ha muerto

1. El compilador puede asumir que no hay solapamiento (aliasing). Es la razón técnica de fondo. En C, si una función recibe dos punteros, el compilador debe asumir que podrían apuntar a la misma memoria, y eso le impide reordenar y vectorizar libremente. El estándar de Fortran prohíbe que dos argumentos de un procedimiento se solapen, así que el compilador optimiza sin esa duda. C tuvo que inventar la palabra clave restrict en C99 para recuperar, a mano y bajo responsabilidad del programador, lo que Fortran tiene por defecto.

2. Los arrays son ciudadanos de primera. Un array de Fortran conoce su forma, sus límites (que no tienen por qué empezar en 0) y puede rebanarse (a(2:5, :)) o operarse entero. Existen matmul, dot_product, sum, maxval y las operaciones elementales en el propio lenguaje, no en una biblioteca. Además, el almacenamiento es por columnas (column-major), al revés que C — un detalle que hay que tener presente al interoperar.

3. Medio siglo de bibliotecas numéricas validadas. La estabilidad numérica de un solver no se comprueba leyéndolo: se comprueba con décadas de uso en problemas reales. Reescribir LAPACK no es un ejercicio de traducción.

4. El paralelismo está en el ecosistema. OpenMP, MPI y los coarrays del estándar cubren desde el multinúcleo hasta el clúster, y los compiladores de NVIDIA y AMD ofrecen descarga a GPU desde directivas. La comunidad HPC no se ha movido porque no ha tenido un motivo de rendimiento para hacerlo.

🔄 Lo que se ha modernizado

Fortran es, de toda esta lista, el caso más claro de lenguaje que no sobrevive sino que compite:

⚙️ Cómo se ejecuta hoy

# GNU Fortran, parte de GCC
sudo apt-get install -y gfortran

gfortran -O2 total.f90 -o total
echo "15000 2 0.10" | ./total
# Total: 27000.00

Compiladores en uso. gfortran (GCC, libre y el más extendido), Intel ifx (oneAPI, el referente en x86 para HPC), LLVM Flang, NVIDIA nvfortran (con descarga a GPU) y AMD flang. Las extensiones importan: .f o .for implica formato fijo de columnas; .f90 y posteriores implican formato libre. Confundirlas produce errores de sintaxis desconcertantes.

Gestión de paquetes. Históricamente no había ninguna: se copiaban los fuentes. Hoy existe fpm (Fortran Package Manager), que da a Fortran algo parecido a cargo o npm.

🧪 El programa de la clase 041 en Fortran

program total_venta
   implicit none
   real(kind=8) :: precio, cantidad, descuento, total
   character(len=32) :: buffer

   read(*, *) precio, cantidad, descuento
   total = precio * cantidad * (1.0d0 - descuento)

   write(buffer, '(F20.2)') total
   write(*, '(A)') 'Total: ' // trim(adjustl(buffer))
end program total_venta

Recorrido, línea a línea.

🔍 Qué reconocer si vienes de otro lenguaje

Si conoces… En Fortran es…
import / #include use modulo — con interfaz comprobada por el compilador
def f(x) con retorno function f(x) result(y)
void f(x) subroutine f(x)
a[0] a(1) — paréntesis, y el índice empieza en 1 por defecto
for i in range(n) do i = 1, n ... end do
c = a + b sobre listas c = a + b sobre arrays completos — nativo, sin bucle
numpy.dot(a, b) matmul(a, b)
restrict de C El comportamiento por defecto
f"{x:.2f}" write(buf, '(F20.2)') x

⚠️ Errores comunes al leerlo

📚 Fuentes y bibliografía


⏮️ Volver al Atlas · 🧟 Los lenguajes que siguen vivos · 🔗 Relacionadas: Ada · C · Assembler