Fundamentos del lenguaje
27 pasos en 9 series de Fortran.
Fortran es donde empezó la programación compilada — 1957, IBM, un equipo apostando a que una máquina podía traducir fórmulas mejor de lo que la mayoría escribe ensamblador — y nunca se detuvo: hoy corre el pronóstico del tiempo, los modelos climáticos y una buena parte de todo lo que se computa en supercomputadoras. El Fortran moderno no es el FORTRAN de tarjetas perforadas de la leyenda: fuente en formato libre, módulos y un lenguaje de arreglos que otros ecosistemas pasaron décadas reinventando.
Este tour cubre el núcleo moderno tal como lo compila gfortran: programas y declaraciones bajo implicit none, arreglos con constructores, secciones e intrínsecas reductoras, el estilo de arreglos completos con máscaras where y aritmética elemento a elemento, procedimientos con intent y pure y elemental, manejo de caracteres y descriptores de edición, tipos derivados y allocatables y complejos nativos, y kinds portables de iso_fortran_env. El bis entrega programas completos. Cada fragmento compila limpio bajo -Wall -Wextra -Werror y corre.
Programas y variables
- La forma del programaEl programa Fortran más pequeño: un bloque con nombre y dos prints dirigidos por lista.
- DeclaracionesCuatro variables tipadas para el diario del faro, declaradas antes de que corra ninguna sentencia.
- Constantes con nombreparameter crea una constante que el compilador va a defender, de pi al tamaño de la tripulación.
Arreglos
- Constructores de arreglosArreglos armados entre corchetes, dimensionados por su tipo, recorridos por un implied-do.
- Secciones de arreglosSecciones inicio:fin de una semana de máximas, con pasos, extremos y asignación en el lugar.
- Intrínsecas de arreglossum, maxval y compañía reemplazan por completo el bucle contador.
Control de flujo
- if y end ifUna decisión de navegación en una escalera if: bloques then, peldaños else if, end if al cierre.
- select caseBandas de profundidad enrutadas por select case: rangos abiertos, cerrados y un default.
- Bucles doEl do contado, más cycle y exit dirigiendo desde adentro del cuerpo.
Arreglos completos
- Aritmética de arreglos completosMatemática elemento a elemento sobre arreglos enteros sin un solo bucle a la vista.
- where y mergeAsignación condicional sobre arreglos completos: where elige elementos, merge elige valores.
- count, any, all, packCuatro preguntas hechas a un arreglo de sitios de buceo a través de máscaras lógicas.
Procedimientos
- Subrutinas e intentEl veredicto del paso elevado vía subrutina: intent le dice al compilador hacia dónde fluye cada dato.
- FuncionesUna calculadora de propina pure: el nombre de la función es su variable de resultado.
- Funciones elementalEscribe la conversión para un valor; elemental la mapea sobre arreglos gratis.
Cadenas y formatos
- Manejo de caracteresCadenas de largo fijo, y los trims y búsquedas que las hacen portarse bien.
- Descriptores de ediciónLa cadena de formato es un lenguajito: i0, f9.2 y es para notación científica.
- write y read internoswrite puede apuntar a una cadena, y read puede parsearla de vuelta.
Tipos y memoria
- Tipos derivadosUn registro de kayak construido con type y leído con el signo de porcentaje.
- Arreglos allocatableUn arreglo cuyo tamaño espera al tiempo de ejecución, crece al asignar y se limpia solo.
- Números complejoscomplex es un tipo numérico nativo: rotar, medir y conjugar sin biblioteca.
Kinds y módulos
- Kinds de realUn tercio a 32 y a 64 bits: iso_fortran_env nombra las precisiones de forma portable.
- Intrínsecas matemáticasLa caja de herramientas numérica viene en el lenguaje: hypot, atan2, modulo y compañía.
- Módulos y useUn módulo y su programa en un archivo: constantes y funciones detrás de un nombre.
Bis
- word_freq.f90Una tabla de frecuencia de palabras hecha de index, subcadenas y un gráfico de numerales.
- grade_report.f90Los puntajes de quiz se pliegan en promedios y calificaciones, y luego en un reporte formateado.
- temp_stats.f90Una semana de máximas diarias reducida a mínima, máxima y media, con una barra a escala por día.