SupercalculateurIBMBlue Gene/P.Simulation en Fortran de l'accrétion autour d'un trou noir (www.bhac.science). Densité à gauche et densité d'énergie magnétique à droite (zoom).
Fortran (mathematicalFORmulaTRANslating system) est unlangage de programmation généraliste dont les domaines de prédilection sont lecalcul scientifique et lecalcul numérique. Il est utilisé aussi bien surordinateur personnel que sur lessuperordinateurs, où il sert d'ailleurs à tester leurs performances dans le cadre du classementTOP500 des superordinateurs les plus puissants au monde, entre autres grâce à la bibliothèqueLINPACK.
Le nombre de bibliothèques scientifiques écrites en Fortran, éprouvées et améliorées pendant de longues années, et les efforts continus consacrés auxcompilateurs pour exploiter au fil des décennies les nouvelles possibilités des calculateurs (vectorisation,coprocesseurs,parallélisme) ont maintenu l'usage de ce langage qui ne cesse d'évoluer.
Parmi les fonctionnalités ajoutées ces dernières décennies, on citera le calcul sur lestableaux (qui peuvent comporter jusqu'à quinze dimensions), laprogrammation modulaire, laprogrammation générique (Fortran 90), le calcul haute performance (Fortran 95), laprogrammation orientée objet et l'interopérabilité avec les bibliothèques du langage C (Fortran 2003), laprogrammation concurrente et le calcul parallèle à l'aide des cotableaux (Fortran 2008), des équipes, des évènements et des sous-routines collectives (Fortran 2018), en plus des interfacesOpenMP,OpenACC et de la bibliothèqueMessage Passing Interface. La norme actuelle est Fortran 2023, publiée le 17 novembre 2023. Les discussions ont commencé sur le contenu de la future norme Fortran 2028.
Projet lancé en 1954 et aboutissant à une première version en 1957, Fortran est le premierlangage de programmation de haut niveau, suivi notamment parLisp (1958),Algol (1958) etCOBOL (1959). Il est le premier langage à être normalisé[1],[2], au milieu des années 60, et est devenu une normeISO en 1980. Un astéroïde a été nommé 9548 Fortran (1985 CN) en son honneur[3].
Le nom du langage est généralement écrit en majuscules (FORTRAN) pour désigner les versions du langage antérieures à la norme Fortran 90[note 1] car à l'époque les lettres minuscules ne font pas partie dujeu de caractères du langage. Par contre, il est toujours écrit avec une majuscule à partir deFortran 90. Enfin, depuis environ 2010 les titres des livres en anglais utilisent souvent l'expressionmodern Fortran (Fortran moderne) pour distinguer la forme actuelle du langage de ses formes historiques.
1953 :John Backus, jeune ingénieur titulaire d'une maîtrise de mathématiques recruté en 1950 chezIBM, développe pour l'IBM 701 le systèmeSpeedcoding, un interpréteur qui facilite la programmation en particulier pour le calcul en virgule flottante. En décembre, il rédige une lettre à l'attention de son supérieurCuthbert Hurd(en)[4] pour lui proposer le projet FORTRAN destiné à l'IBM 704. L'objectif est d'accélérer considérablement le développement et le débogage des programmes, jusqu'alors écrits enlangage machine, afin de réduire leur coût d'exploitation, qui pour moitié provient des salaires des informaticiens et pour moitié des machines. Backus insiste pour que l'IBM 704 devienne la première machine commerciale dont le processeur supporte directement les nombres en virgule flottante.
John Backus (1924-2007), inventeur du FORTRAN, lauréat du prix Turing en 1977.1954 : le groupe de recherche de Backus, le« Programming Research Group » basé à New York, rédige un rapport intituléPreliminary Report, Specifications for the IBM Mathematical FORmula TRANslating System, FORTRAN[5], daté du 10 novembre 1954. Il faut encore deux ans d'efforts pour terminer le premiercompilateur FORTRAN (25 000 lignes[6])[note 2], désigné alors par le mot anglaistranslator (traducteur). Dès le départ, ce compilateur est conçu pour fournir un code très optimisé, en particulier pour le calcul sur les tableaux et le traitement des boucles imbriquées, quasiment aussi rapide que celui qu'aurait écrit un programmeur en langage machine (objectif alors accueilli avec scepticisme par les clients d'IBM). D'après Backus lui-même[4], le développement du langage ne peut pas être séparé de la conception du compilateur et c'est même sur le compilateur que porte l'essentiel de l'effort initial. Le langage est défini au fur et à mesure, avec comme guide principal la simplicité de la syntaxe.
1957 : le compilateur FORTRAN est déployé courant avril sur tous les IBM 704, sur bande magnétique[4], avec son manuel intituléPreliminary Operator's Manual[7]. Fin 1957, un manuel plus complet, leProgrammer's Primer[8] rédigé par Grace E. Mitchell, est édité. FORTRAN est un succès et une révolution car il n'est plus nécessaire d'être un expert de l'ordinateur pour écrire et déboguer des programmes.Mary Tsingou, physicienne et mathématicienne auLos Alamos National Laboratory et qui travailla avec Fermi, Pasta et Ulam, dira ainsi : « Quand le Fortran est arrivé, c'était presque comme le paradis »[9]. D'après la revueNature (2021), ce compilateur fait partie des dix codes informatiques ayant le plus marqué la science[10]. L'instructionGO TO permet de sauter à une ligne numérotée par une étiquette. LeIF de cette première version est arithmétique :IF (A-B) 10, 20, 30 permet de sauter aux instructions d'étiquettes 10, 20 ou 30 selon que l'expression A-B est négative, nulle ou positive.
1958 : FORTRAN II[4],[11],[12] apporte les fonctionsFUNCTION et les sous-programmesSUBROUTINE que l’on appelle par l’instructionCALL, ce qui permet aux programmeurs de se répartir plus facilement le travail. L'instructionCOMMON permet à plusieurs sous-programmes de partager des données communes. Le nouveau compilateur est également plus rapide que le compilateur Fortran I : il permet en particulier de découper un long programme en plusieurs parties pouvant être compilées indépendamment.
1959 : FORTRAN III n'est déployé que sur une vingtaine de machines. Il est possible d'insérer des routines enlangage assembleur symbolique dans le code mais cette fonctionnalité sera abandonnée car elle compromettrait la portabilité des programmes écrits en FORTRAN. Le groupe de Backus n'est plus chargé du développement du FORTRAN, activité transférée à l'Applied Programming Department. Backus préconise le développement de deux compilateurs[4] : un compilateur rapide pour la phase de débogage et un compilateur optimiseur pour le programme final. Mais l'idée n'est pas suivie.
1960 : FORTRAN devient l'un des premiers langages multi-plateforme, des compilateurs devenant disponibles[13] sur quelques machines d'autres constructeurs qu'IBM.
1962 : FORTRAN IV[14] introduit les nombres réels double précision, les complexes et les booléens, ainsi que les opérateurs.AND.,.OR. et.NOT.. LeIF logique permet d'écrire par exempleIF (A .GE. B) GOTO 10 (aller à 10 si A est supérieur ou égal à B). Le type des variables peut désormais être déclaré explicitement. Il est nécessaire de modifier les programmes écrits en FORTRAN II : le traducteur automatique SIFT(SHARE Internal FORTRAN Translator)[15] est mis à disposition. Cette même année, chaque compilateur apportant ses extensions et variantes, uncomité des normes FORTRAN est formé afin de normaliser le langage pour qu'il soit portable d'une machine à l'autre.
1962 : le processus de normalisation du langage est lancé avec le comité ASA X3.4.3[2]. Des brouillons sont publiés en 1964 dansCommunications of the ACM.
1965 : ECMA-9 FORTRAN[16] est la première norme FORTRAN, publiée en avril 1965 par l'ECMA (European Computer Manufacturers Association) dans le cadre d'une collaboration avec l'ANSI(American National Standards Institute). Il s'agit en fait d'une version du langage intermédiaire[1] entre les deux niveaux du langage définis dans la norme FORTRAN 66.
1966 : FORTRAN 66 (ANSI X3.9-1966)[17] est la norme développée par l'ANSI, essentiellement basée sur FORTRAN IV. Elle définit en fait deux niveaux du langage : le FORTRAN proprement dit et une version simplifiée, le Basic FORTRAN. Le langage FORTRAN est le premier langage de programmation à avoir été normalisé.
1972 : l'ISO publie l'ISO Recommendation for Fortran (R1539), constituée des deux niveaux du langage définis dans FORTRAN 66 et du niveau intermédiaire défini par l'ECMA FORTRAN. Mais il ne s'agit que d'une recommandation.
1977 : John Backus reçoit lePrix Turing[18] pour « ses contributions profondes, influentes et durables à la conception de systèmes de programmation pratiques de haut niveau, notamment par ses travaux sur le FORTRAN, et pour ses publications pionnières sur les procédures formelles pour la spécification des langages de programmation. »
1978 : FORTRAN 77 (ANSI X3.9-1978)[19],[20] est une évolution majeure. Comme pour FORTRAN 66, la norme définit deux niveaux du langage : le FORTRAN complet, ou full language, et une version simplifiée, ou subset language. Cette norme inclut en particulier des extensions au langage introduites par les différents compilateurs depuis FORTRAN 66. Elle apporte, entre autres améliorations, la programmation structurée avec les blocsIF / THEN / ELSE / END IF, le type de donnéesCHARACTER en remplacement desconstantes d'Hollerith(en) (qui sont supprimées de la norme), les fonctionsLGE,LGT,LLE,LLT pour la comparaison des chaînes de caractères, l'attributPARAMETER pour déclarer des constantes, l'attributSAVE pour la persistance des variables locales, etc. Fin 1978, l'extension MIL-STD-1753[21] dudépartement de la Défense américain introduit entre autres leEND DO en FORTRAN 77 (bien que le label final reste obligatoire), les blocksDO WHILE / END DO, l'instructionINCLUDE, l'instructionIMPLICIT NONE et des fonctions pour manipuler les bits des entiers.
1980 : le texte de la norme ANSI X3.9-1978 est adopté par l'ISO et devient la norme ISO 1539-1980[2].
1991 :Fortran 90 (ISO/IEC 1539:1991, puis ANSI X3.198-1992)[22] est une version majeure ayant pour objectif de mettre Fortran au niveau des autres langages modernes. La norme apporte en particulier lesmodules, larécursivité, les arguments optionnels et nommés, lasurcharge des opérateurs, une syntaxe pour le calcul sur les tableaux, l'allocation dynamique des tableaux grâce à l'attributALLOCATABLE, les types dérivés, l'attributPOINTER[note 3], l'instructionIMPLICIT NONE pour rendre obligatoire la déclaration des variables, les structures de contrôleSELECT CASE, les procéduresSYSTEM_CLOCK etDATE_AND_TIME pour accéder à l'horloge du système, etc. Les restrictions concernant la mise en forme des programmes (colonnes 1 à 72) disparaissent : l'écriture se fait en format libre. Afin de rester compatible avec les nombreux codes industriels écrits en FORTRAN (Nastran, bibliothèquesNAG etIMSL, etc.), Fortran 90 est conçu de telle façon que FORTRAN 77 en constitue un sous-ensemble.
1992 : IEEE 1003.9-1992, volet FORTRAN 77 de la normePOSIX[23].
1994 : ISO/IEC 1539-2:1994, qui définit des chaînes de caractères de longueur variable[24]. Cette norme a été révisée en 2000[25].
1997 :Fortran 95 (ISO/CEI 1539-1:1997)[26] : quoique mise à jour mineure, cette norme introduit en particulier les instructionsFORALL etWHERE pour le calcul vectoriel, les procéduresPURE etELEMENTAL et rend obsolescentes certaines fonctionnalités telles que les boucles à compteur réel ou l'instructionPAUSE. La procédureCPU_TIME permet de mesurer le temps processeur utilisé par un segment de programme.
1999 : ISO/IEC 1539-3:1999, qui définit des directives de compilation conditionnelle. Cette norme a été révisée en 2011[27].
2004 : Fortran 2003 (ISO/CEI 1539-1:2004)[28] est une révision majeure qui supporte laprogrammation orientée objet. L'interface avec lelangage C est assurée par le module interne ISO_C_BINDING et les mots-clésBIND etVALUE, qui permettent à un programme Fortran d'accéder facilement aux bibliothèques disponibles en C. Les pointeurs de procédure permettent de choisir lors de l'exécution une procédure à exécuter. Les types dérivés sont améliorés, ainsi que les entrées/sorties. On peut désormais gérer les exceptions en calcul flottant de la normeIEEE 754. La norme apporte également la gestion des caractèresISO 10646, base de l'Unicode. L'intégration avec le système d'exploitation est améliorée avec l'introduction des instructionsget_command_argument,get_command, etcommand_argument_count.
2010 : Fortran 2008 (ISO/CEI 1539-1:2010)[29],[30], initialement pensée comme une révision mineure, introduit finalement les co-tableaux(co-arrays) comme paradigme de programmation parallèle. Les traitements sur ces co-tableaux sont effectués par des images (instances parallèles d'un programme Fortran). Cette norme introduit également les bouclesDO CONCURRENT pour la parallélisation des itérations sans interdépendance. Les modules peuvent désormais comporter des sous-modules. Et les structuresBLOCK...END BLOCK permettent de déclarer des variables à portée limitée n'importe où à l'intérieur d'une routine. La modularité est améliorée par l'introduction desSUBMODULE. De nouvelles procédures intrinsèques sont introduites pour la gestion des bits. De nouvelles constantes sont ajoutées au moduleISO_FORTRAN_ENV, en particulier lesKIND des types d'entiersINT8,INT16,INT32,INT64 et de réelsREAL32,REAL64,REAL128.
2018 : Fortran 2018 (ISO/CEI 1539-1:2018)[31], considérée comme une révision mineure, introduit en particulier :
ISO/IEC TS 29113:2012[32]Interopérabilité ultérieure de Fortran avec C
ISO/IEC TS 18508:2015[33]Caractéristiques parallèles supplémentaires en Fortran : les images peuvent désormais être regroupées en équipes(teams) travaillant sur des tâches différentes. Avec les événements(events), une image peut poster un évènement à destination d'autres images, ou attendre de recevoir un évènement. Les sous-routines collectives(collective subroutines) permettent d'effectuer des tâches simples sur les résultats d'un ensemble d'images, par exemple calculer la somme des valeurs d'une variable dans les différentes images.
ISO/IEC/IEEE 60559:2011[34]Systèmes de microprocesseurs — Arithmétique flottante
2023 : la norme Fortran 2023 (ISO/IEC 1539-1:2023), initialement dénommée Fortran 202x, a été publiée le 17 novembre 2023, après six ans de travail. Le document de référence du comité est disponible[35]. Il s'agit d'une version dite mineure qui apporte de nombreuses améliorations à diverses parties du langage, mais pas de nouveau paradigme de programmation. Par exemple, la longueur maximale des lignes de programme passe de 132 à 10000 caractères, et les expressions conditionnelles, reprenant la syntaxe du C, font leur apparition[36]. De nouvelles fonctions facilitent le passage des chaînes de caractères entre C et Fortran. Les bouclesDO CONCURRENT peuvent gérer la réduction des variables. Les fonctionsSIMPLE sont des fonctionsPURE n'accédant à aucune donnée extérieure (à part leurs arguments).
La future norme Fortran 2028 devrait en particulier apporter[37] destemplates pour la programmation générique, la gestion des tâches asynchrones, un pré-processeur Fortran, la possibilité de définir les KIND utilisés par défaut dans un programme, etc.
Fortran fait partie des langages normalisés depuis 1965 et est devenu une norme ISO en 1980[1]. La norme Fortran est actuellement gérée par le groupe de travail ISO/IEC JTC1/SC22/WG5[38], généralement simplement appelé WG5 (pourWorking Group 5), qui charge le comité Fortran US INCITS PL22.3 (généralement appelé J3, en référence à son ancien nom ANSI X3J3)[39] de développer le langage. Le WG5 est composé d'experts chargés de faire des recommandations pour faire évoluer le langage. Le J3 est composé de fabricants de matériel, d'éditeurs de compilateurs, d'utilisateurs issus aussi bien de l'industrie que du monde académique.
Chaque révision de la norme peut ajouter de nouveaux paradigmes ou fonctionnalités, éventuellement déjà implémentées par les compilateurs sous forme d'extensions au langage, clarifier des points restés ambigus, mais aussi rendre obsolescentes d'anciennes fonctionnalités. En effet, depuis Fortran 90, les normes comportent systématiquement en annexes une liste des fonctionnalités supprimées et une liste des fonctionnalités obsolètes et donc susceptibles d'être supprimées dans une prochaine révision de la norme. Les compilateurs continuent néanmoins généralement de supporter ces fonctionnalités pour assurer la pérennité des codes déjà développés. Enfin, il s'écoule généralement plusieurs années entre la publication d'une nouvelle norme et la prise en charge intégrale de ses nouvelles fonctionnalités dans les compilateurs[40],[41].
En 1995, le WG5 met en place desrapports techniques de type 2 pour travailler sur des fonctionnalités importantes qui n'auront pas le temps d'être intégrées à la norme en cours de rédaction, mais en constitueront une extension qui pourra être intégrée dans la norme suivante.
En 2019, un dépôtGitHub[42] est créé afin que tous les utilisateurs du langage puissent proposer facilement au comité J3 des évolutions pour les normes futures. Il sert actuellement à proposer des nouveautés pour la norme Fortran 202Y qui succédera à Fortran 2023, comme l'amélioration de la programmation générique, des valeurs par défaut pour les arguments optionnels, etc.
En 1955, IBM crée le groupe d'utilisateurs SHARE afin que ses clients puissent échanger entre eux. John Backus y fait des présentations régulières durant le développement du premier compilateur FORTRAN[43]. En avril 1957, des ingénieurs deWestinghouse y rapportent la compilation du premier programme FORTRAN en dehors d'IBM. Alors que le langage se diffuse, un sous-groupe SHARE y est consacré : leFORTRAN Standard Commitee.
En 1970, laBritish Computer Society crée leFortran Specialist Group[44], toujours en activité en 2023, afin de promouvoir le langage, participer à ses évolutions et organiser des échanges entre utilisateurs.
Créé en juillet 1982, le bulletin mensuelFORTRAN Forum[45] a été publié par le SIGPLan(Special Interest Group in Programming Languages) de l'ACM(Association for Computing Machinery) trois fois par an, jusqu'en avril 2020.
Le 29 novembre 1983, un groupe de discussionnet.lang.f77 est créé surUsenet. Le 7 novembre 1986, il est renommécomp.lang.fortran et est toujours l'un des principaux canaux de communication de la communauté Fortran.
La liste de diffusion comp-fortran-90[46] est consacrée aux questions concernant le Fortran à partir de la norme Fortran 90. On peut en consulter les archives jusque 1997, mais l'activité y est désormais très réduite avec seulement six messages postés en 2020.
Début 2020, une nouvelle communauté d'utilisateurs fortran-lang.org est créée[47],[48] afin de fédérer les efforts dans l'écosystème Fortran, sur le modèle de langages plus jeunes. En s'appuyant sur GitHub[49], elle développe en particulier une bibliothèque standard Fortran (stdlib) similaire à celle du C, un gestionnaire de paquets Fortran (fpm) faisant également office de système de compilation, le compilateur interactif LFortran, ainsi que des tutoriels pour apprendre le Fortran moderne. Certaines pages sont traduites en français. La communauté édite une lettre mensuelle résumant ses activités en cours et diffuse des informations sur Twitter. Une visioconférence mensuelle permet à ses membres de discuter des projets à mener. Son forum Fortran Discourse[50] est devenu un lieu central de discussion pour la communauté Fortran. Les projets de la communauté ont reçu l'aide de cinq étudiants lors duGoogle Summer of Code 2021 (GSoC 2021)[51], et de même pour leGSoC 2022.
L'International Fortran Conference (FortranCon)[52] est créée en 2020. Initialement prévue à Zurich début juillet 2020, elle a lieu en visioconférence à cause de la pandémie deCovid-19. La seconde édition, FortranCon 2021, a également lieu en visioconférence les 23 et 24 septembre 2021. Les vidéos des conférences sont disponibles sur la chaîne YouTube FortranCon. La troisième édition,FortranCon 2025, a lieu les 4 et 5 novembre 2025 sur Zoom.
En avril 2021, Fortran commence à refaire des apparitions dans le top 20 de l'indice TIOBE[53]. En 2024, il a passé les huit derniers mois dans le top 10.
Écoulement autour d'un cylindre calculé à l'aide d'un code Fortran avec OpenCL (Université de Bristol).
Fortran est toujours l'un des langages les plus utilisés pour le calcul intensif, que ce soit pour l'astronomie, la modélisation climatique, la modélisation chimique, la modélisation en économie, lamécanique des fluides numérique, laphysique numérique, l'analyse de données, la modélisation hydrologique, l'algèbre linéaire numérique et les bibliothèques numériques (LAPACK, IMSL et NAG), l'optimisation, la simulation de satellites, l'ingénierie des structures et lesprévisions météorologiques. Les calculs peuvent aussi bien être réalisés sur des ordinateurs de bureau que sur des supercalculateurs.
Température de surface et vitesse des courants océaniques, calculées avec le code Fortran NEMO (Nucleus for European Modelling of the Ocean,) au Barcelona Supercomputing Center (2020).
De nombreuxtests de performance (benchmarks) destinés à évaluer les performances des nouveaux microprocesseurs sont écrits en Fortran.
Contrairement aux idées reçues[54], les logiciels internes des sondes Voyager 1 et Voyager 2 de la NASA n'ont pas été écrits en FORTRAN mais enlangage assembleur[55], contrairement à une partie des logiciels au sol.
Avant la normeFortran 90, le FORTRAN, créé à l'époque descartes perforées (en particulier avec le systèmeFMS), utilise une mise en page adaptée à ces supports :
la colonne 1 peut contenir la lettre C indiquant un commentaire. Le caractère * est aussi accepté ;
les colonnes 1 à 5 peuvent contenir une étiquette numérique (facultative) de l'instruction, dont la valeur peut être limitée à 32 767 ou 9 999 suivant le compilateur ;
la colonne 6 indique une suite de l'instruction précédente ;
les colonnes 73 à 80 servent à l'identification et la numérotation des cartes perforées (souvent les trois initiales du projet, du chef de projet ou du programmeur, suivies de numéros de cinq chiffres attribués de dix en dix pour permettre des insertions de dernière minute).
Les extensions de fichiers les plus courantes pour le format fixe sont.f et.for, mais ce n'est qu'une convention adoptée par la plupart des compilateurs. Rien n'empêche de les utiliser avec le format libre à condition d'en avertir le compilateur à l'aide de l'option adéquate.
Depuis la norme Fortran 90, le code source est écrit suivant un format dit libre : il n'y a plus de colonne particulière, les lignes font au maximum 132 caractères (mais elles peuvent être continuées à l'aide du caractère&), les commentaires sont introduits par un point d'exclamation (éventuellement disposé à la suite d'une instruction Fortran). L'extension de nom de fichier la plus courante est alors.f90[note 5], même si le programme utilise des fonctionnalités de normes plus récentes telles que Fortran 2018.
programdegrad! =================================================! Imprime une table de conversion degrés -> radians! avec 32 chiffres significatifs (réels 128 bits)! =================================================use,intrinsic::iso_fortran_env,only:wp=>real128implicit none! Déclaration des variablesinteger::degreal(wp)::radians(0:90)! Déclaration des constantesreal(wp),parameter::pi=4.0_wp*atan(1.0_wp)real(wp),parameter::coeff=(2.0_wp*pi)/360.0_wpcharacter(*),parameter::ligne_horizontale="(49('-'))"! Remplissage du tableau :radians=[(coeff*deg,deg=0,90)]! En-tête de la tablewrite(*,ligne_horizontale)write(*,"('| Degrés |', 15(' '), 'Radians', 16(' '), '|')")write(*,ligne_horizontale)! Affichage formatédodeg=0,90write(*,"('| ', I2,' | ', F34.32,' |')")deg,radians(deg)end do! Fin de la tablewrite(*,ligne_horizontale)end programdegrad
Notes :
ce programme est écrit en Fortran moderne[56]. Il nécessite un compilateur implémentant les bases de la norme Fortran 2008 ;
l'instructionuse permet d'importer le module intrinsèqueiso_fortran_env qui définit des constantes, en particulier pour les types de réels disponibles (real32, real64, real128). Ici seule est importée la constantereal128 qui sera désignée par l'aliaswp(working precision). Les nombres réels apparaissant dans le programme sont suffixés par cet alias afin de définir leur type. Il suffirait ainsi de remplacerreal128 parreal64 oureal32 pour modifier de façon cohérente la précision numérique utilisée dans l'ensemble du programme, pour autant que le compilateur prenne en charge la précision correspondante ;
l'instructionimplicit none, introduite dans la norme Fortran 90, rend la déclaration des variables obligatoire. Historiquement, celle-ci est en effet facultative : les variables dont le nom commence par une des lettres I, J, K, L, M ou N sont par défaut de typeinteger, les autres de typereal. Ce mécanisme est désormais fortement déconseillé et l'instructionimplicit none doit donc être systématiquement utilisée ;
la déclaration se fait en début de routine. Le type de données et les noms de variables sont séparés par::. On utilise les entiers par défaut pourdeg. La numérotation des tableaux commence par défaut à 1 en Fortran mais ici on la fait commencer à 0 pour le tableauradians(0:90). Les constantes, qui peuvent être calculées, sont spécifiées par l'attributparameter. Les chaînes de caractères sont de longueur fixe, mais ici l'étoile indique que la longueur de la chaîne doit être définie en fonction de la longueur de son contenu ;
le contenu du tableauradians() est calculé à l'aide d'un constructeur, avecdeg pour variable de boucle variant de 0 à 90. Le Fortran permettant de calculer directement sur des tableaux, on aurait pu écrire égalementradians = coeff * [ (deg, deg=0,90) ] ;
l'instructionwrite se réfère à une unité d'entrée-sortie (* désigne le terminal) et une spécification de format. Ce format est ici stocké dans la chaîneligne_horizontale et décrit qu'il faudra afficher 49 tirets. On aurait également pu utiliser une déclarationformat située sur une autre ligne et précédée d'un label numérique ;
l'instructiondo deg = 0, 90 indique de répéter en boucle les instructions qui suivent (jusqu'auend do) pour toutes les valeurs dedeg de 0 à 90 par pas de 1 ;
lewrite à l'intérieur de la boucle permet d'écrire sur le terminal les valeurs des variablesdeg etradians(deg) en utilisant deux caractères pourdeg (qui est un entier) et 34 caractères dont 32 après la virgule pourradians(deg) qui est un réel.
Avant sa version 4.0, le compilateur libreGCC incluait le compilateur g77[57] pour le FORTRAN 77, qui a été remplacé en 2005[58],[59] par le compilateur GFortran[60], issu d'unfork de G95 réalisé en 2003. En décembre 2022, GFortran prend en charge quasiment intégralement Fortran 2003[61] et Fortran 2008[62] et environ 40 % de Fortran 2018[63]. Contrairement aux compilateurs Intel et Cray, il ne gère pas encore de façon native la programmation parallèle avec les co-tableaux mais nécessite l'installation de la bibliothèque OpenCoarrays[64].
Omni Compiler[65] est un méta-compilateur C et Fortran destiné à transformer du code contenant des directives XcalableMP et OpenACC en code parallèle natif.
On trouve de nombreux compilateurs commerciaux :Portland Group(en)[66] (filiale deNVidia),NAG, etc. La plupart des fabricants de stations de travail ou d'ordinateurs destinés au calcul intensif proposent également un compilateur Fortran : Intel[67], IBM[68],Oracle (à la suite du rachat deSun Microsystems[69]), HPE Cray[70] (Cray a été racheté par HP en 2019), etc.
Certains de ces compilateurs commerciaux ont des versions gratuites pour une utilisation non commerciale : c'est le cas d'Oracle[71], Portland Group[72]. On peut télécharger le compilateur BiSheng[73] queHuawei a développé pour sa plateforme Kunpeng : pour le Fortran, il utilise Flang en frontal.
Quant aux compilateurs Intel[74], ils sont depuis janvier 2021 gratuits pour tous les développeurs : le nouveau compilateur ifx[75], basé surLLVM, implémente depuis sa version 2023.0.0 l'intégralité de la norme Fortran 2018 et offre désormais les mêmes fonctionnalités que le compilateur classique ifort, qu'il remplacera progressivement[76]. Le compilateur Intel Visual Fortran est l'héritier de DEC Visual Fortran, devenu Compaq Visual Fortran puis HP Visual Fortran.
De nouveaux compilateurs Fortran basés sur LLVM sont en développement : LFortran[77] qui vise à permettre de tester du code de façon interactive et Flang[78].
Le Fortran fait partie des langages proposés par certains compilateurs en ligne, tels que codingground[79], OnlineGDB[80], JDOODLE[81], godbolt Compiler Explorer[82] et le Fortran Playground[83] de la communauté Fortran-lang. Certains proposent le choix entre plusieurs compilateurs Fortran ou plusieurs versions d'un compilateur, ou permettent d'analyser le code avec un débogueur et de voir le langage machine généré. Ces outils permettent donc d'apprendre le langage sans installer de compilateur sur sa machine, ils permettent également de collaborer en ligne sur un projet.
Les systèmes de construction de projet tels queCMake et Meson gèrent généralement le Fortran. L'utilitaire makedepf90[89] permet de générer des fichiersMake pour un projet Fortran.
Fonctionnalités du gestionnaire de paquets Fortran fpm.
Mais Fortran dispose depuis fin 2020 du gestionnaire de paquets fpm(Fortran Package Manager)[90], qui fait office également de système de construction de projet. Il est inspiré par l'outilCargo du langageRust. Il permet en particulier de gérer les dépendances, qu'il peut télécharger automatiquement depuisGitHub. Et il est lui-même écrit essentiellement en Fortran et dispose d'un mécanisme de greffon permettant d'étendre ses fonctionnalités. La version 0.12 est sortie en mai 2025.
fpt[91] est un outil d'analyse de code Fortran. On peut également citer CamFort[92], un projet universitaire libre, ftncheck[93], qui est limité au FORTRAN 77 et qui n'est plus développé depuis 2005. findent[94] est un indenteur de code source qui peut également transformer l'ancien format fixe du Fortran en format libre.
Plusieurs analyseurs de typelint sont disponibles : Flint[95] et fortran-linter[96], logiciels libres écrits en Python, et FortranLint[97], produit commercial.
Lizard[98] est un analyseur decomplexité cyclomatique qui prend en charge une vingtaine de langages, dont le Fortran.
Fypp[100] est un préprocesseur Python qui peut être utilisé avec n'importe quel langage, tout en étant avant tout destiné au langage Fortran. Il utilise la syntaxe du Python.
PFUnit(en) est un framework detests unitaires, libre et initialement développé par la NASA[101]. Le framework test-drive[102] est utilisé dans les projets fpm et stdlib, et il prend en charge Meson,CMake et fpm. On peut également citer vegetables[103] et FRUIT[104].
Quickstart Fortran[107] permet d'installer facilement sousMicrosoft Windows, sans nécessiter les droits d’administration, les outils essentiels pour développer en Fortran : GCC-GFortran, Fortran Package Manager, Git for Windows, OpenBLAS (BLAS/LAPACK), GNU make. Il peut également faciliter l'installation d'Intel OneAPI et de la librairie stdlib en cours de développement.
De nombreuses bibliothèques de calcul ont été développées en Fortran. Certaines sont développées, utilisées, testées et donc déboguées depuis des décennies, ce qui leur assure une très grande fiabilité.
LAPACK[108] (Linear Algebra Package) est une bibliothèque consacrée comme son nom l'indique à l'algèbre linéaire numérique.
Basic Linear Algebra Subprograms (BLAS) est un ensemble de fonctions standardisées réalisant des opérations de base de l'algèbre linéaire. Il fait partie des dix codes informatiques ayant le plus marqué la science, d'après la revue Nature[10].
NAG Fortran Library propose plus de 1700 routines mathématiques et statistiques.
SLATEC[109] est une bibliothèque dans le domaine public proposant 1400 fonctions mathématiques, initialement développée en Fortran 77. Le code source a été adapté en Fortran moderne avec une version 4.2 datée de 2019[110].
Les normes Fortran n'incluant pas d'instructions graphiques ou d'instructions pour construire des interfaces graphiques, la visualisation peut se faire après exécution avec des outils externes tels queParaView, ou en appelant des outils de tracé tels queGnuplot via l'instructionEXECUTE_COMMAND_LINE(), ou enfin à l'aide debibliothèques :
DISLIN[111], créé par le Max Planck Institute for Solar System Research, permet de tracer des données et de réaliser des interfaces graphiques. Multiplate-formes (UNIX, Linux,FreeBSD, OpenVMS, Windows et MS-DOS). Fonctionne avec de nombreux compilateurs, ainsi que d'autres langages que le Fortran. Téléchargeable gratuitement depuis la version 11.3 de mars 2020.
GINO[112] permet de tracer des données et de réaliser des interfaces graphiques. Logiciel commercial pour Windows et Linux.
GrWin Graphics Library[113] : logiciel libre pour Windows.
gtk-fortran[114] est une bibliothèque sous licence libre GPL 3 permettant de créer des interfaces graphiquesGTK en Fortran, grâce aux fonctionnalités d'interopérabilité Fortran / C introduites depuis la norme Fortran 2003. Multi-plateforme (Linux, Windows, macOS, FreeBSD, Raspberry Pi...). Supporte GTK 4, la bibliothèque généralisteGLib et la bibliothèquePLplot. Peut être utilisée comme dépendance fpm.
JAPI (Java Application Programming Interface)[115] : interface Java/Fortran permettant de créer une interface graphique complète pour les programmes Fortran. Multiplate-formes (Windows, Linux,Solaris). Fonctionne avec de nombreux compilateurs (entre autres gfortran, Compaq Visual Fortran…). Logiciel libre sous licence LGPL.
MATFOR[116] : construction d'interfaces graphiques et bibliothèques numériques et graphiques pour Fortran et d'autres langages. Logiciel commercial pour Windows et Linux.
ogpf[117] permet d'accéder facilement à gnuplot depuis un programme Fortran, grâce à l'utilisation de la programmation orientée objet. Il peut être utilisé comme paquet fpm.
PLplot(en)[118] : bibliothèque permettant de dessiner des graphiques scientifiques. Multilangage et multiplate-formes (Linux,OpenSolaris, Unix, MS-DOS, Windows, Mac OS X). Logiciel libre sous licence LGPL.
Quickwin[119] : bibliothèque graphique fournie avec le Compaq Visual Fortran (désormais Intel Visual Fortran). Ne fonctionne que sous Windows.
Winteracter[120] : construction d'interfaces graphiques et d'outils de visualisation. Logiciel commercial pour Windows, Linux et MacOS X.
Début 2021, les bibliothèques suivantes ne sont plus maintenues depuis au moins 10 ans :
f90gl : interface du Fortran 90 avec OpenGL, GLU et GLUT. Multiplate-formes. Fonctionne avec de nombreux compilateurs. Licence : domaine public.
Depuis Fortran 2003, l'interopérabilité du Fortran avec lelangage C est normalisée. Le module intrinsèque ISO_C_BINDING définit des constantes de types telle quec_int ouc_double, des procédures et constantes permettant en particulier de gérer l'interopérabilité des pointeurs C et Fortran, ainsi que des constantes pour les caractères telles quec_null_char pour gérer l'échange des chaînes de caractères. Cette partie du langage a reçu des améliorations avec la norme Fortran 2018.
Cette interopérabilité normalisée facilite d'une part l'appel des innombrables bibliothèques écrites en C, et d'autre part l'utilisation par d'autres langages de bibliothèques écrites en Fortran.Julia sait ainsi appeler des fonctions Fortran de manière native avec la functionccall().Python peut utiliser des bibliothèques Fortran grâce à F2PY[121](Fortran to Python interface generator), qui fait partie deNumPy.
R (langage), axé statistiques et analyse de données,
des logiciels tels queScilab,MATLAB ouGNU Octave. Scilab et MATLAB incorporent d'ailleurs les bibliothèquesBLAS etLAPACK, développées en Fortran[122],[123]. MATLAB était à l'origine un programme en Fortran, distribué aux universités et aux centres de recherche[124].
↑On notera toutefois que dans lepremier manuel de Fortran (1956), le nom est écrit avec un F en capitale d'imprimerie et les autres lettres en petites capitales d'imprimerie.
↑Interrogé à ce sujet, John Backus expliqua dans un entretien, qu'il ne pouvait en être autrement, bien qu'en 1990 tout binôme d'étudiants en informatique puisse en écrire un en quelques mois :« Nous n'avions pas les concepts. Nous n'avions pas davantage les outils ». Il explique dans le même entretien[réf. souhaitée] que ce qui avait donné le plus de travail à l'équipe était la génération d'un code indexant de façon pas trop inefficace les tableaux.
↑Le concept de pointeur en Fortran est beaucoup plus restrictif qu'en C. Un pointeur ne pointe pas vers une adresse mais vers une cible possédant l'attributTARGET, et il possède un type et un rang.
↑Attention, écrireDO 10 I=1.5 sans espace (DO10I=1.5) affecterait la valeur 1.5 à la variableDO10I.
↑Les extensions avec un F majuscule, telles que.F90 sont généralement interprétées par les compilateurs comme indiquant la nécessité d'utiliser avant compilation un préprocesseur Fortran.
ClaudeDelannoy,Programmer en fortran - Fortran 90 et ses évolutions - fortran 95, 2003 et 2008, Librairie Eyrolles,(ISBN978-2-212-14020-0,lire en ligne)
Richard J.Hanson et TimHopkins,Numerical Computing with Modern Fortran, Philadelphia, PA, Society for Industrial and Applied Mathematics,(ISBN978-1-61197-312-9,lire en ligne)
Robert W.Numrich,Parallel Programming with Co-arrays, First edition. | Boca Raton, FL : CRC Press/Taylor & Francis, Chapman and Hall/CRC,,1reéd.(ISBN978-0-429-43718-2,lire en ligne)