Fortran - Fortran

Fortran
Fortran logo.svg
Paradigme Multi-paradigme : structuré , impératif ( procédural , orienté objet ), générique , tableau
Conçu par Jean Backus
Développeur John Backus et IBM
Première apparition 1957 ; il y a 64 ans ( 1957 )
Version stable
Fortran 2018 (ISO/IEC 1539-1:2018) / 28 novembre 2018 ; il y a 2 ans ( 2018-11-28 )
Discipline de frappe fort , statique , manifeste
Extensions de nom de fichier .f, .for,.f90
Site Internet Fortran lang- .org
Les principales mises en œuvre
Absoft , Cray , GFortran , G95 , IBM XL Fortran, Intel , Hitachi , Lahey/Fujitsu, Numerical Algorithms Group , Open Watcom , PathScale , PGI , Silverfrost , Oracle Solaris Studio , autres
Influencé par
Codage rapide
Influencé
ALGOL 58 , BASIC , C , Chapelle , CMS-2 , DOPE , Forteresse , PL/I , PACT I , MUMPS , IDL , Ratfor
Le système de codage automatique Fortran pour l' IBM 704 (15 octobre 1956), le premier manuel de référence du programmeur pour Fortran

Fortran ( / f ɔːr t r æ n / , anciennement FORTRAN ) est un usage général, compilé impératif langage de programmation qui est particulièrement adapté au calcul numérique et le calcul scientifique .

Fortran a été développé à l'origine par IBM dans les années 1950 pour des applications scientifiques et d'ingénierie, et a par la suite dominé le calcul scientifique. Il est utilisé depuis plus de six décennies dans des domaines à forte intensité de calcul tels que la prévision météorologique numérique , l' analyse par éléments finis , la dynamique des fluides numérique , la géophysique , la physique numérique , la cristallographie et la chimie numérique . C'est un langage populaire pour le calcul haute performance et il est utilisé pour les programmes qui évaluent et classent les supercalculateurs les plus rapides au monde .

Fortran a eu de nombreuses versions, chacune ayant ajouté des extensions tout en conservant largement la compatibilité avec les versions précédentes. Les versions successives ont ajouté la prise en charge de la programmation structurée et du traitement des données à base de caractères (FORTRAN 77), de la programmation matricielle , de la programmation modulaire et de la programmation générique (Fortran 90), du Fortran haute performance (Fortran 95), de la programmation orientée objet (Fortran 2003), programmation concurrente (Fortran 2008) et capacités de calcul parallèles natives (Coarray Fortran 2008/2018).

La conception de Fortran a servi de base à de nombreux autres langages de programmation. Parmi les plus connus se trouve BASIC , qui est basé sur FORTRAN II avec un certain nombre de nettoyages de syntaxe , notamment de meilleures structures logiques, et d'autres changements pour fonctionner plus facilement dans un environnement interactif.

En Août 2021, Fortran a été classé 13 e dans l' indice TIOBE , une mesure de la popularité des langages de programmation, de l' escalade 29 positions de son classement des 42 e en Août à 2020.

Appellation

Le nom FORTRAN est dérivé de Formula Translating System , Formula Translator, Formula Translation ou Formulaic Translation. Les noms des versions antérieures de la langue via FORTRAN 77 étaient orthographiés de manière conventionnelle en majuscules (FORTRAN 77 était la dernière version dans laquelle le jeu de caractères Fortran ne comprenait que des lettres majuscules). Les normes de langue officielles pour Fortran font référence à la langue comme « Fortran » avec des majuscules initiales (plutôt que « FORTRAN » en majuscules) depuis Fortran 90.

Histoire

À la fin de 1953, John W. Backus a soumis une proposition à ses supérieurs chez IBM pour développer une alternative plus pratique au langage assembleur pour programmer leur ordinateur central IBM 704 . L'équipe FORTRAN historique de Backus était composée des programmeurs Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt , Robert Nelson, Irving Ziller, Harold Stern, Lois Haibt et David Sayre . Ses concepts comprenaient une entrée plus facile des équations dans un ordinateur, une idée développée par J. Halcombe Laning et démontrée dans le système de Laning et Zierler de 1952.

Un projet de spécification pour le système de traduction de formules mathématiques IBM a été achevé en novembre 1954. Le premier manuel pour FORTRAN est apparu en octobre 1956, avec le premier compilateur FORTRAN livré en avril 1957. Ce fut le premier compilateur d'optimisation , car les clients étaient réticents à utiliser un langage de programmation de haut niveau à moins que son compilateur ne puisse générer du code avec des performances proches de celles du langage assembleur codé à la main.

Alors que la communauté était sceptique quant à la possibilité que cette nouvelle méthode puisse surpasser le codage manuel, elle a réduit le nombre d' instructions de programmation nécessaires pour faire fonctionner une machine d'un facteur 20 et a rapidement été acceptée. John Backus a déclaré lors d'une interview en 1979 avec Think , le magazine des employés d'IBM, "Une grande partie de mon travail est due à ma paresse. Je n'aimais pas écrire des programmes, et donc, quand je travaillais sur l' IBM 701 , écrire des programmes pour l'informatique trajectoires de missiles, j'ai commencé à travailler sur un système de programmation pour faciliter l'écriture de programmes."

Le langage a été largement adopté par les scientifiques pour écrire des programmes à forte intensité numérique, ce qui a encouragé les auteurs de compilateurs à produire des compilateurs capables de générer un code plus rapide et plus efficace. L'inclusion d'un type de données de nombres complexes dans le langage a rendu Fortran particulièrement adapté aux applications techniques telles que l'ingénierie électrique.

En 1960, des versions de FORTRAN étaient disponibles pour les ordinateurs IBM 709 , 650 , 1620 et 7090 . De manière significative, la popularité croissante du FORTRAN a incité les fabricants d'ordinateurs concurrents à fournir des compilateurs FORTRAN pour leurs machines, de sorte qu'en 1963, plus de 40 compilateurs FORTRAN existaient. Pour ces raisons, FORTRAN est considéré comme le premier langage de programmation multiplateforme largement utilisé .

Le développement de Fortran a été parallèle à l' évolution précoce de la technologie des compilateurs , et de nombreuses avancées dans la théorie et la conception des compilateurs ont été spécifiquement motivées par le besoin de générer un code efficace pour les programmes Fortran.

FORTRAN

La version initiale de FORTRAN pour l'IBM 704 contenait 32 instructions , dont :

  • DIMENSIONet EQUIVALENCEdéclarations
  • Déclarations d'affectation
  • Instruction arithmétique à IF trois voies , qui a passé le contrôle à l'un des trois emplacements du programme selon que le résultat de l'instruction arithmétique était négatif, zéro ou positif
  • IFinstructions pour vérifier les exceptions ( ACCUMULATOR OVERFLOW, QUOTIENT OVERFLOW, et DIVIDE CHECK); et des IFinstructions pour manipuler les commutateurs de détection et les lumières de détection
  • GO TO, calculé GO TO, ASSIGN, et affectéGO TO
  • DO boucles
  • E/S formatées : FORMAT, READ, READ INPUT TAPE, WRITE, WRITE OUTPUT TAPE, PRINT, etPUNCH
  • E/S non formatées : READ TAPE, READ DRUM, WRITE TAPE, etWRITE DRUM
  • Autres E/S : END FILE, REWIND, etBACKSPACE
  • PAUSE, STOP, etCONTINUE
  • FREQUENCY(pour fournir des conseils d' optimisation au compilateur).

L' IFinstruction arithmétique rappelait (mais pas facilement implémentable par) une instruction de comparaison à trois voies (CAS - Comparer l'accumulateur avec le stockage) disponible sur le 704. L'instruction offrait le seul moyen de comparer les nombres - en testant leur différence, avec un accompagnateur. risque de débordement. Cette lacune a été surmontée plus tard par des fonctionnalités "logiques" introduites dans FORTRAN IV.

L' FREQUENCYinstruction a été utilisée à l'origine (et facultativement) pour donner des probabilités de branche pour les trois cas de branche de l'instruction arithmétique IF. Le premier compilateur FORTRAN a utilisé cette pondération pour effectuer au moment de la compilation une simulation Monte Carlo du code généré, dont les résultats ont été utilisés pour optimiser le placement des blocs de base en mémoire, une optimisation très sophistiquée pour l'époque. La technique de Monte Carlo est documentée dans l'article de Backus et al. sur cette implémentation originale, The FORTRAN Automatic Coding System :

L'unité fondamentale du programme est le bloc de base ; un bloc de base est un tronçon de programme qui a un point d'entrée et un point de sortie. Le but de la section 4 est de préparer pour la section 5 une table des prédécesseurs (table PRED) qui énumère les blocs de base et répertorie pour chaque bloc de base chacun des blocs de base qui peuvent être son prédécesseur immédiat dans le flux, ainsi que la fréquence absolue de chacun de ces liens de bloc de base. Ce tableau est obtenu en exécutant le programme une fois à la manière de Monte-Carlo, dans lequel le résultat des transferts conditionnels résultant des instructions de type IF et des GO TO calculés est déterminé par un générateur de nombres aléatoires convenablement pondérés en fonction des instructions FREQUENCY fournies. .

De nombreuses années plus tard, l' FREQUENCYinstruction n'a eu aucun effet sur le code et a été traitée comme une instruction de commentaire, car les compilateurs ne faisaient plus ce genre de simulation à la compilation. Un sort similaire est arrivé aux astuces du compilateur dans plusieurs autres langages de programmation, par exemple le mot - clé en C . register

Le premier compilateur FORTRAN rapportait des informations de diagnostic en arrêtant le programme lorsqu'une erreur était détectée et en affichant un code d'erreur sur sa console. Ce code pourrait être recherché par le programmeur dans un tableau de messages d'erreur dans le manuel de l'opérateur, en leur fournissant une brève description du problème. Plus tard, un sous-programme de gestion des erreurs pour gérer les erreurs de l'utilisateur telles que la division par zéro, développé par la NASA, a été incorporé, informant les utilisateurs de la ligne de code contenant l'erreur.

Disposition fixe et cartes perforées

Code FORTRAN sur une carte perforée , montrant les utilisations spécialisées des colonnes 1 à 5, 6 et 73 à 80

Avant le développement des fichiers de disques, éditeurs de texte et les terminaux, les programmes ont été le plus souvent inscrits sur une perforatrice clavier sur 80 colonnes cartes perforées , une ligne sur une carte. Le jeu de cartes résultant serait introduit dans un lecteur de cartes pour être compilé. Les codes de carte perforés ne comprenaient pas de lettres minuscules ni de nombreux caractères spéciaux, et des versions spéciales du keypunch IBM 026 ont été proposées pour imprimer correctement les caractères spéciaux réutilisés utilisés dans FORTRAN.

Reflétant la pratique d'entrée des cartes perforées, les programmes Fortran étaient à l'origine écrits dans un format à colonnes fixes, les 72 premières colonnes étant lues en douze mots de 36 bits.

Une lettre "C" dans la colonne 1 a fait que la carte entière a été traitée comme un commentaire et ignorée par le compilateur. Sinon, les colonnes de la carte étaient divisées en quatre champs :

  • 1 à 5 étaient le champ d'étiquette : une séquence de chiffres ici a été prise comme étiquette à utiliser dans les instructions DO ou de contrôle telles que GO TO et IF, ou pour identifier une instruction FORMAT référencée dans une instruction WRITE ou READ. Les zéros non significatifs sont ignorés et 0 n'est pas un numéro d'étiquette valide.
  • 6 était un champ de continuation : un caractère autre qu'un blanc ou un zéro faisait ici considérer la carte comme une continuation de l'énoncé de la carte précédente. Les cartes de continuation étaient généralement numérotées 1, 2, etc. et la carte de départ pouvait donc avoir zéro dans sa colonne de continuation - qui n'est pas une continuation de sa carte précédente.
  • 7 à 72 ont servi de champ de déclaration.
  • 73 à 80 ont été ignorés (le lecteur de carte de l'IBM 704 n'utilisait que 72 colonnes).

Les colonnes 73 à 80 pourraient donc être utilisées pour des informations d'identification, telles que la perforation d'un numéro de séquence ou d'un texte, qui pourraient être utilisées pour réorganiser les cartes si une pile de cartes était abandonnée ; bien qu'en pratique, cela ait été réservé aux programmes de production stables. Un IBM 519 pourrait être utilisé pour copier un jeu de programmes et ajouter des numéros de séquence. Certains des premiers compilateurs, par exemple les IBM 650, avaient des restrictions supplémentaires en raison des limitations de leurs lecteurs de cartes. Les frappes au clavier pouvaient être programmées pour tabuler jusqu'à la colonne 7 et sauter après la colonne 72. Les compilateurs ultérieurs ont assoupli la plupart des restrictions de format fixe, et l'exigence a été éliminée dans la norme Fortran 90.

Dans le champ de déclaration, les caractères d'espacement (blancs) ont été ignorés en dehors d'un littéral de texte. Cela a permis d'omettre les espaces entre les jetons pour des raisons de concision ou d'inclure des espaces dans les identifiants pour plus de clarté. Par exemple, AVG OF Xétait un identificateur valide, équivalent à AVGOFX, et était une instruction valide, équivalente à parce que le zéro dans la colonne 6 est traité comme s'il s'agissait d'un espace (!), tandis que était à la place , l'affectation de 1,101 à une variable appelée . Notez la légère différence visuelle entre une virgule et un point. 101010DO101I=1,10110101 DO 101 I = 1, 101101010DO101I=1.10110101 DO101I = 1.101DO101I

Les chaînes Hollerith , autorisées à l'origine uniquement dans les instructions FORMAT et DATA, étaient préfixées par un nombre de caractères et la lettre H (par exemple, 26HTHIS IS ALPHANUMERIC DATA.), permettant de conserver des blancs dans la chaîne de caractères. Les erreurs de compte étaient un problème.

FORTRAN II

Le FORTRAN II d' IBM est apparu en 1958. La principale amélioration était de prendre en charge la programmation procédurale en autorisant des sous-routines et des fonctions écrites par l'utilisateur qui renvoyaient des valeurs avec des paramètres passés par référence . L'instruction COMMON permettait aux sous-routines d'accéder aux variables communes (ou globales ). Six nouvelles déclarations ont été introduites :

  • SUBROUTINE, FUNCTION, etEND
  • CALL et RETURN
  • COMMON

Au cours des prochaines années, FORTRAN II ajoutera également la prise en charge des types de données DOUBLE PRECISIONet COMPLEX.

Les premiers compilateurs FORTRAN ne prenaient en charge aucune récursivité dans les sous-routines. Les premières architectures informatiques ne supportaient aucun concept de pile, et lorsqu'elles supportaient directement les appels de sous-programme, l'emplacement de retour était souvent stocké dans un emplacement fixe adjacent au code de sous-programme (par exemple l' IBM 1130 ) ou un registre de machine spécifique ( IBM 360 et seq ), qui n'autorise la récursivité que si une pile est gérée par un logiciel et que l'adresse de retour est stockée sur la pile avant que l'appel ne soit effectué et restaurée après le retour de l'appel. Bien que cela ne soit pas spécifié dans FORTRAN 77, de nombreux compilateurs F77 prenaient en charge la récursivité en option, et les mainframes Burroughs , conçus avec la récursivité intégrée, le faisaient par défaut. Il est devenu un standard en Fortran 90 via le nouveau mot-clé RECURSIVE.

Programme FORTRAN II simple

Ce programme, pour la formule de Heron , lit les données sur une bobine de bande contenant trois nombres entiers à 5 chiffres A, B et C en entrée. Il n'y a pas de déclarations de "type" disponibles : les variables dont le nom commence par I, J, K, L, M ou N sont à " virgule fixe " (c'est-à-dire des entiers), sinon à virgule flottante. Comme des entiers doivent être traités dans cet exemple, les noms des variables commencent par la lettre "I". Le nom d'une variable doit commencer par une lettre et peut continuer avec des lettres et des chiffres, jusqu'à une limite de six caractères en FORTRAN II. Si A, B et C ne peuvent pas représenter les côtés d'un triangle en géométrie plane, alors l'exécution du programme se terminera par un code d'erreur "STOP 1". Sinon, une ligne de sortie sera imprimée montrant les valeurs d'entrée pour A, B et C, suivie de la ZONE calculée du triangle sous forme de nombre à virgule flottante occupant dix espaces le long de la ligne de sortie et affichant 2 chiffres après la virgule décimale , le .2 dans F10.2 de l'instruction FORMAT avec l'étiquette 601.

C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
C INPUT - TAPE READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C 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, AND IC MAY NOT BE NEGATIVE OR ZERO
C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
      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 1
C USING HERON'S FORMULA WE CALCULATE THE
C 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
      END

FORTRAN III

Une reproduction d'un formulaire de codage FORTRAN, imprimé sur papier et destiné à être utilisé par les programmeurs pour préparer des programmes pour la perforation sur des cartes par des opérateurs de frappe . Désormais obsolète.

IBM a également développé un FORTRAN III en 1958 qui a permis le code d' assemblage en ligne parmi d'autres fonctionnalités ; cependant, cette version n'a jamais été publiée en tant que produit. Comme les 704 FORTRAN et FORTRAN II, FORTRAN III incluait des fonctionnalités dépendantes de la machine qui rendaient le code écrit intransportable d'une machine à l'autre. Les premières versions de FORTRAN fournies par d'autres fournisseurs souffraient du même inconvénient.

IBM 1401 FORTRAN

FORTRAN a été fourni pour l' ordinateur IBM 1401 par un compilateur innovant à 63 phases qui s'exécutait entièrement dans sa mémoire centrale de seulement 8000 caractères (six bits). Le compilateur peut être exécuté à partir d'une bande ou d'un jeu de 2 200 cartes ; il n'a utilisé aucun autre stockage sur bande ou sur disque. Il a gardé le programme en mémoire et chargé des superpositions qui l'ont progressivement transformé, en place, en une forme exécutable, comme décrit par Haines. Cet article a été réimprimé, édité, dans les deux éditions de Anatomy of a Compiler et dans le manuel IBM "Fortran Specifications and Operating Procedures, IBM 1401". La forme exécutable n'était pas entièrement en langage machine ; au lieu de cela, l'arithmétique à virgule flottante, les sous-scripts, les entrées/sorties et les références de fonction ont été interprétés, précédant le code P Pascal UCSD de deux décennies.

IBM a fourni plus tard un compilateur FORTRAN IV pour la série 1400 d'ordinateurs.

FORTRAN IV

IBM a commencé le développement de FORTRAN IV à partir de 1961, à la suite des demandes des clients. FORTRAN IV a supprimé les fonctionnalités dépendantes de la machine de FORTRAN II (telles que READ INPUT TAPE), tout en ajoutant de nouvelles fonctionnalités telles qu'un LOGICALtype de données , des expressions booléennes logiques et l' instruction logique IF comme alternative à l' instruction arithmétique IF. FORTRAN IV a finalement été publié en 1962, d'abord pour l' ordinateur IBM 7030 ("Stretch"), suivi par des versions pour l' IBM 7090 , IBM 7094 , et plus tard pour l' IBM 1401 en 1966.

En 1965, FORTRAN IV était censé être conforme à la norme développée par le groupe de travail FORTRAN X3.4.3 de l' American Standards Association .

Entre 1966 et 1968, IBM a proposé plusieurs compilateurs FORTRAN IV pour son System/360 , chacun nommé par des lettres indiquant la quantité minimale de mémoire dont le compilateur avait besoin pour s'exécuter. Les lettres (F, G, H) correspondent aux codes utilisés avec les numéros de modèle System/360 pour indiquer la taille de la mémoire, chaque incrément de lettre étant un facteur de deux plus grand :

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

À peu près à cette époque, FORTRAN IV avait commencé à devenir un outil pédagogique important et des implémentations telles que WATFOR et WATFIV de l'Université de Waterloo ont été créées pour simplifier les processus complexes de compilation et de liaison des compilateurs précédents.

Fortran 66

Le développement le plus important au début de l'histoire du FORTRAN a peut-être été la décision de l' American Standards Association (maintenant American National Standards Institute (ANSI)) de former un comité parrainé par BEMA, la Business Equipment Manufacturers Association, pour développer un American Standard Fortran . Les deux normes résultantes, approuvées en mars 1966, définissaient deux langages, FORTRAN (basé sur FORTRAN IV, qui avait servi de norme de facto) et Basic FORTRAN (basé sur FORTRAN II, mais dépouillé de ses fonctionnalités dépendantes de la machine). Le FORTRAN défini par la première norme, officiellement notée X3.9-1966, est devenu connu sous le nom de FORTRAN 66 (bien que beaucoup aient continué à l' appeler FORTRAN IV, le langage sur lequel la norme était largement basée). FORTRAN 66 est effectivement devenu la première version standard de l'industrie de FORTRAN. Fortran 66 inclus :

  • Programme principal, SUBROUTINE, FUNCTION, et BLOCK DATAunités de programme
  • INTEGER, REAL, DOUBLE PRECISION, COMPLEXet LOGICAL types de données
  • COMMON, DIMENSION, et EQUIVALENCEdéclarations
  • DATA instruction pour spécifier les valeurs initiales
  • EXTERNALFonctions intrinsèques et (par exemple, bibliothèque)
  • Déclaration d'affectation
  • GO TO, calculé GO TO, affecté GO TOet ASSIGNinstructions
  • Logiques IFet arithmétiques (trois voies) IFdéclarations
  • DO instruction de boucle
  • READ, WRITE, BACKSPACE, REWINDet ENDFILEinstructions pour les E/S séquentielles
  • FORMAT déclaration et format assigné
  • CALL, RETURN, PAUSE, et STOPdéclarations
  • Constantes de Hollerith dans DATAet FORMATdéclarations, et comme arguments aux procédures
  • Identifiants jusqu'à six caractères
  • Lignes de commentaires
  • END ligne

FORTRAN 77

Programme FORTRAN-77 avec sortie de compilateur, écrit sur un CDC 175 à l' université RWTH d'Aix-la-Chapelle , Allemagne, en 1987
4.3 BSD pour Digital Equipment Corporation (DEC) VAX , affichant le manuel du compilateur FORTRAN 77 (f77)

Après la sortie de la norme FORTRAN 66, les fournisseurs de compilateurs ont introduit plusieurs extensions à la norme Fortran , incitant le comité ANSI X3J3 en 1969 à commencer à travailler sur la révision de la norme de 1966, sous le parrainage de CBEMA , la Computer Business Equipment Manufacturers Association (anciennement BEMA). Les versions finales de cette norme révisée ont circulé en 1977, conduisant à l'approbation formelle de la nouvelle norme FORTRAN en avril 1978. La nouvelle norme, appelée FORTRAN 77 et officiellement notée X3.9-1978, a ajouté un certain nombre de caractéristiques importantes pour répondre à de nombreux problèmes. défauts du FORTRAN 66 :

  • Bloc IFet END IFinstructions, avec des clauses ELSEet en option ELSE IF, pour fournir une meilleure prise en charge du langage pour la programmation structurée
  • DO extensions de boucle, y compris les expressions de paramètres, les incréments négatifs et le nombre de déclenchements nuls
  • OPEN, CLOSE, et INQUIREinstructions pour une capacité d'E/S améliorée
  • E/S de fichiers à accès direct
  • IMPLICIT instruction, pour remplacer les conventions implicites selon lesquelles les variables non déclarées sont des INTEGER si leur nom commence par I, J, K, L, M ou N (et REAL sinon)
  • CHARACTER type de données, remplaçant les chaînes Hollerith par des fonctionnalités considérablement étendues pour la saisie et la sortie de caractères et le traitement de données basées sur des caractères
  • PARAMETER instruction pour spécifier des constantes
  • SAVE instruction pour les variables locales persistantes
  • Noms génériques pour les fonctions intrinsèques (par exemple SQRTaccepte également des arguments d'autres types, tels que COMPLEXou REAL*16).
  • Un ensemble d'intrinsèques ( LGE, LGT, LLE, LLT) pour la comparaison lexicale de chaînes, basé sur la séquence de classement ASCII . (Ces fonctions ASCII ont été demandées par le département américain de la Défense , dans leur vote d'approbation conditionnelle.)

Dans cette révision de la norme, un certain nombre de fonctionnalités ont été supprimées ou modifiées d'une manière qui pourrait invalider les programmes anciennement conformes aux normes. (La suppression était la seule alternative autorisée à X3J3 à l'époque, car le concept de " dépréciation " n'était pas encore disponible pour les normes ANSI.) Alors que la plupart des 24 éléments de la liste de conflits (voir l'annexe A2 de X3.9-1978) corrigé des failles ou des cas pathologiques autorisés par la norme antérieure mais rarement utilisés, un petit nombre de capacités spécifiques ont été délibérément supprimées, telles que :

  • Constantes Hollerith et données Hollerith , telles queGREET = 12HHELLO THERE!
  • Lecture dans un descripteur d'édition H (champ Hollerith) dans une spécification FORMAT
  • Surindexation des limites du tableau par des indices
          DIMENSION A(10,5)
          Y=  A(11,1)
    
  • Transfert de contrôle hors et de retour dans la plage d'une boucle DO (également connue sous le nom de « plage étendue »)

Variantes : Fortran du Minnesota

Les ordinateurs de Control Data Corporation disposaient d'une autre version de FORTRAN 77, appelée Minnesota FORTRAN (MNF), conçue spécialement pour les étudiants, avec des variations dans les constructions de sortie, des utilisations spéciales des instructions COMMON et DATA, des niveaux de code d'optimisation pour la compilation, des listes d'erreurs détaillées, un avertissement détaillé messages et fonctionnalités de débogage. MNF a été développé par des personnes (Liddiard & Mundstock) à l' Université du Minnesota . MNF était disponible essentiellement gratuitement.

Transition vers la norme ANSI Fortran

Le développement d'une norme révisée pour succéder au FORTRAN 77 serait retardé à plusieurs reprises car le processus de normalisation luttait pour suivre les changements rapides dans les pratiques informatiques et de programmation. Entre-temps, en tant que "Fortran Standard" pendant près de quinze ans, le Fortran 77 allait devenir le dialecte historiquement le plus important.

Une extension pratique importante de FORTRAN 77 a été la publication de MIL-STD-1753 en 1978. Cette spécification, développée par le département américain de la Défense , a standardisé un certain nombre de fonctionnalités implémentées par la plupart des compilateurs FORTRAN 77 mais non incluses dans la norme ANSI FORTRAN 77 . Ces fonctionnalités seront éventuellement intégrées dans la norme Fortran 90.

La norme IEEE 1003.9 POSIX , publiée en 1991, a fourni aux programmeurs FORTRAN 77 un moyen simple d'émettre des appels système POSIX. Plus de 100 appels ont été définis dans le document, permettant d'accéder au contrôle de processus compatible POSIX, à la gestion des signaux, au contrôle du système de fichiers, au contrôle des périphériques, au pointage de procédure et aux E/S de flux de manière portable.

Fortran 90

Le successeur très retardé de FORTRAN 77, officieusement connu sous le nom de Fortran 90 (et avant cela, Fortran 8X ), a finalement été publié en tant que norme ISO/IEC 1539:1991 en 1991 et norme ANSI en 1992. En plus de changer le orthographe de FORTRAN à Fortran, cette révision majeure a ajouté de nombreuses nouvelles fonctionnalités pour refléter les changements importants dans les pratiques de programmation qui avaient évolué depuis la norme de 1978 :

  • Entrée source de forme libre , également avec des mots-clés Fortran minuscules
  • Identifiants jusqu'à 31 caractères (dans la norme précédente, il n'y avait que six caractères).
  • Commentaires en ligne
  • Capacité à opérer sur des tableaux (ou des sections de tableau) dans leur ensemble, simplifiant ainsi grandement les calculs mathématiques et techniques.
    • instructions d'affectation de tableau entier, partiel et masqué et expressions de tableau, telles que X(1:N)=R(1:N)*COS(A(1:N))
    • WHERE instruction pour l'affectation sélective de tableaux
    • constantes et expressions de type tableau,
    • fonctions et constructeurs de tableau définis par l'utilisateur.
  • RECURSIVE procédures
  • Modules , pour regrouper les procédures et les données associées, et les mettre à la disposition d'autres unités de programme, y compris la possibilité de limiter l'accessibilité à des parties spécifiques du module.
  • Un mécanisme de passage d'arguments considérablement amélioré, permettant de vérifier les interfaces au moment de la compilation
  • Interfaces écrites par l'utilisateur pour les procédures génériques
  • Surcharge de l'opérateur
  • Types de données dérivés (structurés)
  • Nouvelle syntaxe de déclaration de type de données, pour spécifier le type de données et d'autres attributs des variables
  • Allocation dynamique de mémoire au moyen de l' ALLOCATABLEattribut et des instructions ALLOCATEetDEALLOCATE
  • POINTERattribut, affectation de pointeur et NULLIFYinstruction pour faciliter la création et la manipulation de structures de données dynamiques
  • Constructions de boucle structurées, avec une END DOinstruction pour la fin de la boucle EXITet des CYCLEinstructions pour terminer les DOitérations de la boucle normale de manière ordonnée
  • SELECT. . . CASEconstruction pour la sélection multidirectionnelle
  • Spécification portable de la précision numérique sous le contrôle de l'utilisateur
  • Procédures intrinsèques nouvelles et améliorées.

Obsolescence et suppressions

Contrairement à la révision précédente, Fortran 90 n'a supprimé aucune fonctionnalité. Tout programme FORTRAN 77 conforme à la norme est également conforme à la norme sous Fortran 90, et l'une ou l'autre norme doit être utilisable pour définir son comportement.

Un petit ensemble de fonctionnalités ont été identifiées comme « obsolescentes » et devraient être supprimées dans une future norme. Toutes les fonctionnalités de ces premières versions sont assurées par les nouvelles fonctionnalités Fortran 95. Certains sont conservés pour simplifier le portage d'anciens programmes mais peuvent éventuellement être supprimés.

Obsolescence et suppressions
Fonctionnalité obsolète Exemple Statut/sort en Fortran 95
Instruction IF arithmétique
      IF (X) 10, 20, 30
Obsolète
Paramètres DO ou variables de contrôle non entiers
      DO 9 X= 1.7, 1.6, -0.1
Supprimé
Terminaison de boucle DO partagée ou
terminaison avec une instruction
autre que END DO ou CONTINUE  
      DO 9 J= 1, 10
          DO 9 K= 1, 10
  9       L=  J + K
Obsolète
Branchement vers END IF

de l'extérieur d'un bloc

 66   GO TO 77 ; . . .
      IF (E) THEN ;     . . .
 77   END IF
Supprimé
Retour alternatif
      CALL SUBR( X, Y, *100, *200 )
Obsolète
Instruction PAUSE
      PAUSE 600
Supprimé
Instruction ASSIGN
  et instruction GO TO affectée
 100   . . .
      ASSIGN 100 TO H
       . . .
      GO TO H . . .
Supprimé
Numéros d'instruction attribués et spécificateurs FORMAT
      ASSIGN 606 TO F ... WRITE ( 6, F )...
Supprimé
H modifier les descripteurs
 606  FORMAT ( 9H1GOODBYE. )
Supprimé
Instruction GO TO calculée
      GO TO (10, 20, 30, 40), index
(obsolète)
Fonctions d'instruction
      FOIL( X, Y )=  X**2 + 2*X*Y + Y**2
(obsolète)
Instructions DATA
  parmi les instructions exécutables
      X= 27.3
      DATA  A, B, C  / 5.0, 12.0, 13.0 /
      . . .
(obsolète)
CARACTÈRE* formulaire de déclaration CARACTÈRE
      CHARACTER*8 STRING   ! Use CHARACTER(8)
(obsolète)
Fonctions de longueur de caractère supposée
      CHARACTER*(*) STRING
(obsolète)
Code source de forme fixe La colonne 1 contient C ou * ou ! pour les commentaires.
Colonnes 1 à 5 pour les numéros d'instruction
N'importe quel caractère de la colonne 6 pour la continuation.
Colonnes 73 et plus ignorées
(obsolète)

"Bonjour le monde!" Exemple

program helloworld
     print *, "Hello, World!"
end program helloworld

Fortran 95

Fortran 95 , publié officiellement sous le nom ISO/IEC 1539-1:1997, était une révision mineure, principalement pour résoudre certains problèmes en suspens de la norme Fortran 90. Néanmoins, Fortran 95 a également ajouté un certain nombre d'extensions, notamment à partir de la spécification High Performance Fortran :

  • FORALLet WHEREconstructions imbriquées pour faciliter la vectorisation
  • Défini par l'utilisateur PUREet ELEMENTALprocédures
  • Initialisation par défaut des composants de type dérivé, y compris l'initialisation du pointeur
  • Extension de la possibilité d'utiliser des expressions d'initialisation pour les objets de données
  • Initialisation des pointeurs vers NULL()
  • Clairement défini que les ALLOCATABLEtableaux sont automatiquement désalloués lorsqu'ils sortent de la portée.

Un certain nombre de fonctions intrinsèques ont été étendues (par exemple, un dimargument a été ajouté à l' maxlocintrinsèque).

Plusieurs fonctionnalités notées dans Fortran 90 comme étant « obsolescentes » ont été supprimées de Fortran 95 :

  • DOinstructions utilisant REALet DOUBLE PRECISIONindexer les variables
  • Branchement vers une END IFinstruction depuis l'extérieur de son bloc
  • PAUSE déclaration
  • ASSIGNet GO TOinstruction attribuée , et spécificateurs de format attribués
  • H Hollerith modifier le descripteur.

Un complément important à Fortran 95 était le rapport technique ISO TR-15581: Enhanced Data Type Facilities , officieusement connu sous le nom de TR allocable. Cette spécification définissait l'utilisation améliorée des ALLOCATABLEtableaux, avant la disponibilité de compilateurs Fortran entièrement compatibles avec Fortran 2003. De telles utilisations incluent des ALLOCATABLEtableaux en tant que composants de type dérivé, dans des listes d'arguments factices de procédure et en tant que valeurs de retour de fonction. ( les ALLOCATABLEtableaux sont préférables aux POINTERtableaux basés sur - car les ALLOCATABLEtableaux sont garantis par Fortran 95 pour être désalloués automatiquement lorsqu'ils sortent de la portée, éliminant ainsi la possibilité de fuite de mémoire . De plus, les éléments des tableaux allouables sont contigus et l' alias n'est pas un problème pour optimisation des références de tableaux, permettant aux compilateurs de générer du code plus rapidement que dans le cas des pointeurs.)

Un autre complément important à Fortran 95 était le rapport technique ISO TR-15580: Floating-point exception handling , officieusement connu sous le nom d' IEEE TR. Cette spécification définit la prise en charge de l' arithmétique à virgule flottante IEEE et de la gestion des exceptions à virgule flottante .

Compilation conditionnelle et chaînes de longueur variable

En plus du "Langage de base" obligatoire (défini dans ISO/IEC 1539-1 : 1997), le langage Fortran 95 comprend également deux modules optionnels :

  • Chaînes de caractères de longueur variable (ISO/IEC 1539-2 : 2000)
  • Compilation conditionnelle (ISO/IEC 1539-3 : 1998)

qui, ensemble, composent la Norme internationale en plusieurs parties (ISO/IEC 1539).

Selon les développeurs de normes, « les parties facultatives décrivent des fonctionnalités autonomes qui ont été demandées par un nombre important d'utilisateurs et/ou d'implémenteurs, mais qui ne sont pas considérées comme suffisamment générales pour qu'elles soient requises dans toutes les normes conformes aux normes. compilateurs Fortran." Néanmoins, si un Fortran conforme à la norme fournit de telles options, alors elles « doivent être fournies conformément à la description de ces installations dans la partie appropriée de la norme ».

Fortran 2003

Fortran 2003, officiellement publié sous le nom ISO/IEC 1539-1:2004, est une révision majeure introduisant de nombreuses nouvelles fonctionnalités. Un résumé complet des nouvelles fonctionnalités de Fortran 2003 est disponible sur le site Web officiel du groupe de travail Fortran (ISO/IEC JTC1/SC22/WG5).

À partir de cet article, les principales améliorations apportées à cette révision incluent :

  • Améliorations des types dérivés : types dérivés paramétrés, contrôle amélioré de l'accessibilité, constructeurs de structure améliorés et finaliseurs
  • Prise en charge de la programmation orientée objet : extension de type et héritage , polymorphisme , allocation de type dynamique et procédures liées au type, fournissant une prise en charge complète des types de données abstraits
  • Améliorations de la manipulation des données : composants allouables (incorporant TR 15581), paramètres de type différé, VOLATILEattribut , spécification de type explicite dans les constructeurs de tableau et instructions d'allocation, améliorations de pointeur, expressions d'initialisation étendues et procédures intrinsèques améliorées
  • Améliorations d'entrée/sortie : transfert asynchrone , accès au flux, opérations de transfert spécifiées par l'utilisateur pour les types dérivés, contrôle spécifié par l'utilisateur de l'arrondi pendant les conversions de format, constantes nommées pour les unités préconnectées, l' FLUSHinstruction, la régularisation des mots-clés et l'accès aux messages d'erreur
  • Pointeurs de procédure
  • Prise en charge de l' arithmétique à virgule flottante IEEE et de la gestion des exceptions à virgule flottante (incorporant TR 15580)
  • Interopérabilité avec le langage de programmation C
  • Prise en charge d'une utilisation internationale : accès aux caractères ISO 10646 de 4 octets et choix de la virgule ou de la virgule en entrée/sortie au format numérique
  • Intégration améliorée avec le système d'exploitation hôte : accès aux arguments de ligne de commande , aux variables d'environnement et aux messages d'erreur du processeur

Un complément important à Fortran 2003 a été le rapport technique ISO TR-19767 : Enhanced module facility in Fortran. Ce rapport a fourni des sous-modules, qui rendent les modules Fortran plus similaires aux modules Modula-2 . Ils sont similaires aux sous-unités privées enfants Ada . Cela permet d'exprimer la spécification et la mise en œuvre d'un module dans des unités de programme distinctes, ce qui améliore l'empaquetage de grandes bibliothèques, permet la préservation des secrets commerciaux tout en publiant des interfaces définitives et empêche les cascades de compilation.

Fortran 2008

ISO/IEC 1539-1:2010, officieusement connu sous le nom de Fortran 2008, a été approuvé en septembre 2010. Comme pour Fortran 95, il s'agit d'une mise à niveau mineure, intégrant des clarifications et des corrections à Fortran 2003, ainsi que l'introduction de nouvelles fonctionnalités. Les nouvelles capacités comprennent :

  • Sous-modules — facilités de structuration supplémentaires pour les modules ; remplace ISO/IEC TR 19767:2005
  • Coarray Fortran — un modèle d'exécution parallèle
  • La construction DO CONCURRENT - pour les itérations de boucle sans interdépendances
  • L'attribut CONTIGUOUS — pour spécifier les restrictions de disposition de stockage
  • La construction BLOCK —peut contenir des déclarations d'objets avec une portée de construction
  • Composants allouables récursifs — comme alternative aux pointeurs récursifs dans les types dérivés

Le projet final de norme internationale (FDIS) est disponible sous le document N1830.

Un supplément à Fortran 2008 est la spécification technique (TS) 29113 de l' Organisation internationale de normalisation (ISO) sur la poursuite de l'interopérabilité de Fortran avec C , qui a été soumise à l'ISO en mai 2012 pour approbation. La spécification ajoute la prise en charge de l'accès au descripteur de tableau à partir de C et permet d'ignorer le type et le rang des arguments.

Fortran 2018

La dernière révision du langage (Fortran 2018) était auparavant appelée Fortran 2015. Il s'agit d'une révision importante et a été publiée le 28 novembre 2018.

Fortran 2018 intègre deux spécifications techniques précédemment publiées :

  • ISO/IEC TS 29113:2012 Interopérabilité accrue avec C
  • ISO/IEC TS 18508:2015 Fonctionnalités parallèles supplémentaires dans Fortran

Les modifications supplémentaires et les nouvelles fonctionnalités incluent la prise en charge de la norme ISO/IEC/IEEE 60559:2011 (la version de la norme à virgule flottante IEEE avant la dernière révision mineure IEEE 754-2019), l'entrée/sortie hexadécimale, les améliorations IMPLICIT NONE et d'autres modifications.

Caractéristiques linguistiques

Une description complète des fonctionnalités du langage Fortran depuis Fortran 95 est couverte dans l'article connexe, Fonctionnalités du langage Fortran 95 .

Sciences et ingénierie

Bien qu'un article de journal publié en 1968 par les auteurs de BASIC décrivait déjà le FORTRAN comme "à l'ancienne", les programmes sont écrits en Fortran depuis plus de six décennies et il existe un vaste corpus de logiciels Fortran utilisés quotidiennement dans les communautés scientifiques et d'ingénierie. Jay Pasachoff a écrit en 1984 que "les étudiants en physique et en astronomie doivent simplement apprendre le FORTRAN. Il existe tellement de FORTRAN qu'il semble peu probable que les scientifiques passent à Pascal, Modula-2 ou autre". En 1993, Cecil E. Leith a qualifié le FORTRAN de "langue maternelle du calcul scientifique", ajoutant que son remplacement par toute autre langue possible "peut rester un espoir perdu".

Simulation magnétohydrodynamique générale relativiste Fortran de l'accrétion de trous noirs à l'aide du code BHAC avec maillage adaptatif cartésien (www.bhac.science).

Il est la langue principale pour certains des plus intensifs superordinateurs tâches, comme dans l' astronomie , la modélisation du climat , la chimie computationnelle, l' économie de calcul , la dynamique des fluides , physique numérique , l' analyse de données, modélisation hydrologique , algèbre linéaire numérique et les bibliothèques numériques ( LAPACK , IMSL et NAG ), optimisation , simulation satellitaire , ingénierie structurelle et prévision météorologique . De nombreux benchmarks à virgule flottante pour évaluer les performances des nouveaux processeurs informatiques, tels que les composants à virgule flottante des benchmarks SPEC (par exemple, CFP2006 , CFP2017 ) sont écrits en Fortran. Les algorithmes mathématiques sont bien documentés dans Numerical Recipes .

En dehors de cela, les codes plus modernes de la science informatique utilisent généralement de grandes bibliothèques de programmes, telles que METIS pour le partitionnement de graphes, PETSc ou Trilinos pour les capacités d'algèbre linéaire, DUNE ou FEniCS pour la prise en charge des maillages et des éléments finis, et d'autres bibliothèques génériques. Depuis le début des années 2000, de nombreuses bibliothèques de support largement utilisées ont également été implémentées en C et, plus récemment, en C++ . D'autre part, les langages de haut niveau tels que MATLAB , Python et R sont devenus populaires dans des domaines particuliers de la science informatique. Par conséquent, une fraction croissante des programmes scientifiques est également écrite dans de tels langages de script de haut niveau. Pour cette raison, des fonctionnalités d'interopérabilité avec C ont été ajoutées à Fortran 2003 et améliorées par la spécification technique ISO/IEC 29113, qui a été intégrée à Fortran 2018 pour permettre une interopérabilité plus flexible avec d'autres langages de programmation.

Le logiciel des sondes de la NASA Voyager 1 et Voyager 2 a été initialement écrit en FORTRAN 5, puis porté en FORTRAN 77. Depuis le 25 septembre 2013, certains logiciels sont toujours écrits en Fortran et d'autres ont été portés en C.

Portabilité

La portabilité était un problème au début car il n'y avait pas de norme convenue, pas même le manuel de référence d'IBM, et les sociétés informatiques rivalisaient pour différencier leurs offres des autres en fournissant des fonctionnalités incompatibles. Les normes ont amélioré la portabilité. La norme de 1966 a fourni une syntaxe et une sémantique de référence , mais les fournisseurs ont continué à fournir des extensions incompatibles. Bien que des programmeurs prudents aient commencé à se rendre compte que l'utilisation d'extensions incompatibles causait des problèmes de portabilité coûteux et utilisaient donc des programmes tels que The PFORT Verifier, ce n'est qu'après la norme de 1977, lorsque le National Bureau of Standards (maintenant NIST ) a publié FIPS PUB. 69 , que les transformateurs achetés par le gouvernement américain étaient tenus de diagnostiquer les extensions de la norme. Plutôt que d'offrir deux processeurs, pratiquement chaque compilateur avait finalement au moins une option pour diagnostiquer les extensions.

Les extensions incompatibles n'étaient pas le seul problème de portabilité. Pour les calculs numériques, il est important de tenir compte des caractéristiques de l'arithmétique. Cela a été abordé par Fox et al. dans le cadre de la norme 1966 par la bibliothèque PORT . Les idées qu'il contient sont devenues largement utilisées et ont finalement été incorporées dans la norme de 1990 au moyen de fonctions d'enquête intrinsèques. L'adoption généralisée (maintenant presque universelle) de la norme IEEE 754 pour l'arithmétique binaire à virgule flottante a essentiellement éliminé ce problème.

L'accès à l'environnement informatique (par exemple, la ligne de commande du programme, les variables d'environnement, l'explication textuelle des conditions d'erreur) est resté un problème jusqu'à ce qu'il soit résolu par la norme de 2003.

De grandes collections de logiciels de bibliothèque qui pourraient être décrites comme étant vaguement liées à l'ingénierie et aux calculs scientifiques, telles que les bibliothèques graphiques, ont été écrites en C, et donc leur accès a présenté un problème de portabilité. Ce problème a été résolu par l'incorporation de l'interopérabilité C dans la norme de 2003.

Il est désormais possible (et relativement facile) d'écrire un programme entièrement portable en Fortran, même sans recourir à un préprocesseur.

Variantes

Jusqu'à ce que la norme Fortran 66 soit développée, chaque compilateur supportait sa propre variante de Fortran. Certains étaient plus divergents du courant dominant que d'autres.

Le premier compilateur Fortran a établi une norme élevée d'efficacité pour le code compilé. Cet objectif rendait difficile la création d'un compilateur, ce qui était généralement fait par les fabricants d'ordinateurs pour soutenir les ventes de matériel. Cela laissait un créneau important : des compilateurs rapides et offrant de bons diagnostics au programmeur (souvent un étudiant). Les exemples incluent Watfor, Watfiv, PUFFT et, à plus petite échelle, FORGO, Wits Fortran et Kingston Fortran 2.

Fortran 5

Fortran 5 a été commercialisé par Data General Corp à la fin des années 1970 et au début des années 1980, pour les gammes d'ordinateurs Nova , Eclipse et MV . Il avait un compilateur d'optimisation qui était assez bon pour les mini-ordinateurs de son époque. Le langage ressemble le plus au FORTRAN 66.

FORTRAN V

FORTRAN V a été distribué par Control Data Corporation en 1968 pour la série CDC 6600 . Le langage était basé sur FORTRAN IV.

Univac a également proposé un compilateur pour la série 1100 connu sous le nom de FORTRAN V. Athena FORTRAN était une retombée d'Univac Fortran V.

Fortran 6

Fortran 6 ou Visual Fortran 2001 a été concédé sous licence à Compaq par Microsoft . Ils ont licencié Compaq Visual Fortran et ont fourni l'interface d'environnement Visual Studio 5 pour Compaq v6 jusqu'à v6.1.

Variantes spécifiques

Les fournisseurs d'ordinateurs scientifiques hautes performances ( par exemple, Burroughs , Control Data Corporation (CDC), Cray , Honeywell , IBM , Texas Instruments et UNIVAC ) ont ajouté des extensions à Fortran pour tirer parti de fonctionnalités matérielles spéciales telles que le cache d'instructions , les pipelines CPU , et des tableaux vectoriels. Par exemple, l'un des compilateurs FORTRAN d'IBM ( H Extended IUP ) avait un niveau d'optimisation qui réorganisait les instructions du code machine pour occuper simultanément plusieurs unités arithmétiques internes. Un autre exemple est le CFD , une variante spéciale du FORTRAN conçue spécifiquement pour le supercalculateur ILLIAC IV , fonctionnant au centre de recherche Ames de la NASA . IBM Research Labs a également développé un langage étendu basé sur FORTRAN appelé VECTRAN pour le traitement des vecteurs et des matrices.

Le Fortran orienté objet était une extension orientée objet de Fortran, dans laquelle les éléments de données peuvent être regroupés en objets, qui peuvent être instanciés et exécutés en parallèle. Il était disponible pour Sun, Iris, iPSC et nCUBE, mais n'est plus pris en charge.

Ces extensions spécifiques à la machine ont soit disparu au fil du temps, soit ont intégré des éléments dans les principales normes. La principale extension restante est OpenMP , qui est une extension multiplateforme pour la programmation de mémoire partagée. Une nouvelle extension, Coarray Fortran, est destinée à prendre en charge la programmation parallèle.

POUR LE TRANSIT pour l'IBM 650

FOR TRANSIT était le nom d'une version réduite du langage FORTRAN d'IBM 704, qui a été implémenté pour l'IBM 650, à l'aide d'un programme de traduction développé à Carnegie à la fin des années 1950. Le commentaire suivant apparaît dans le manuel de référence d'IBM ( FOR TRANSIT Automatic Coding System C28-4038, Copyright 1957, 1959 by IBM) :

Le système FORTRAN a été conçu pour une machine plus complexe que le 650, et par conséquent, certaines des 32 déclarations trouvées dans le manuel de référence du programmeur FORTRAN ne sont pas acceptables pour le système FOR TRANSIT. De plus, certaines restrictions au langage FORTRAN ont été ajoutées. Cependant, aucune de ces restrictions ne rend un programme source écrit pour FOR TRANSIT incompatible avec le système FORTRAN pour le 704.

Les déclarations autorisées étaient :

  • Déclarations d'affectation arithmétique, par exemple, 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), ...

Jusqu'à dix sous-programmes peuvent être utilisés dans un programme.

Les déclarations FOR TRANSIT étaient limitées aux colonnes 7 à 56 uniquement. Des cartes perforées ont été utilisées pour l'entrée et la sortie sur l'IBM 650. Trois passages ont été nécessaires pour traduire le code source en langage « IT », puis pour compiler les instructions informatiques en langage assembleur SOAP, et enfin pour produire le programme objet, qui pouvait ensuite être chargé dans la machine pour exécuter le programme (en utilisant des cartes perforées pour la saisie des données et en publiant les résultats sur des cartes perforées).

Deux versions existaient pour les 650 avec un tambour mémoire de 2000 mots : FOR TRANSIT I (S) et FOR TRANSIT II, ​​cette dernière pour les machines équipées de registres d'indexation et d' arithmétique décimale automatique à virgule flottante ( bi-quinaire ). L'annexe A du manuel comprenait des schémas de câblage pour le panneau de commande du lecteur de carte/perforateur IBM 533 .

Langages basés sur Fortran

Avant FORTRAN 77, un certain nombre de préprocesseurs étaient couramment utilisés pour fournir un langage plus convivial, avec l'avantage que le code prétraité pouvait être compilé sur n'importe quelle machine avec un compilateur FORTRAN standard. Ces préprocesseurs prennent généralement en charge la programmation structurée , les noms de variables de plus de six caractères, les types de données supplémentaires, la compilation conditionnelle et même les capacités de macro . Les préprocesseurs populaires comprenaient FLECS , iftran , MORTRAN , SFtran , S-Fortran , Ratfor et Ratfiv . Ratfor et Ratfiv, par exemple, ont implémenté un langage de type C , produisant du code prétraité dans la norme FORTRAN 66. Malgré les progrès du langage Fortran, les préprocesseurs continuent d'être utilisés pour la compilation conditionnelle et la substitution de macros.

L'une des premières versions de FORTRAN, introduite dans les années 60, était couramment utilisée dans les collèges et les universités. Développé, soutenu et distribué par l' Université de Waterloo , WATFOR était largement basé sur FORTRAN IV. Un étudiant utilisant WATFOR pourrait soumettre son travail FORTRAN par lots et, s'il n'y avait pas d'erreurs de syntaxe, le programme passerait directement à l'exécution. Cette simplification a permis aux étudiants de se concentrer sur la syntaxe et la sémantique de leur programme, ou sur le flux logique d'exécution, plutôt que de traiter la soumission Job Control Language (JCL), le ou les processus successifs de compilation/liaison-édition/exécution, ou d'autres complexités du mainframe /environnement mini-ordinateur. Un inconvénient de cet environnement simplifié était que WATFOR n'était pas un bon choix pour les programmeurs ayant besoin des capacités étendues de leur(s) processeur(s) hôte(s), par exemple, WATFOR avait généralement un accès très limité aux périphériques d'E/S. WATFOR a été remplacé par WATFIV et ses versions ultérieures.

program; s=0 i=1,n; s=s+1; stop i; s='s'  Stop

(programmation en ligne)

LRLTRAN a été développé au Lawrence Radiation Laboratory pour prendre en charge l'arithmétique vectorielle et le stockage dynamique, entre autres extensions pour prendre en charge la programmation des systèmes. La distribution comprenait le système d'exploitation LTSS .

La norme Fortran-95 comprend une partie 3 facultative qui définit une capacité de compilation conditionnelle facultative . Cette capacité est souvent appelée "CoCo".

De nombreux compilateurs Fortran ont intégré des sous-ensembles du préprocesseur C dans leurs systèmes.

SIMSCRIPT est un préprocesseur Fortran spécifique à l'application pour la modélisation et la simulation de grands systèmes discrets.

Le langage de programmation F a été conçu pour être un sous-ensemble propre de Fortran 95 qui tentait de supprimer les fonctionnalités redondantes, non structurées et obsolètes de Fortran, telles que l' EQUIVALENCEinstruction. F conserve les fonctionnalités de tableau ajoutées dans Fortran 90 et supprime les instructions de contrôle qui ont été rendues obsolètes par des constructions de programmation structurées ajoutées à la fois à FORTRAN 77 et à Fortran 90. F est décrit par ses créateurs comme « un langage de programmation de tableau compilé, structuré et particulièrement bien adapté. à l'éducation et au calcul scientifique".

Lahey et Fujitsu se sont associés pour créer Fortran pour Microsoft .NET Framework . Silverfrost FTN95 est également capable de créer du code .NET.

Exemples de codes

Le programme suivant illustre l'allocation dynamique de mémoire et les opérations basées sur les tableaux, deux fonctionnalités introduites avec Fortran 90. L'absence de DOboucles et d' instructions IF/ THENdans la manipulation du tableau est particulièrement remarquable ; les opérations mathématiques sont appliquées au tableau dans son ensemble. L'utilisation de noms de variables descriptifs et d'un formatage de code général conforme au style de programmation contemporain est également apparente. Cet exemple calcule une moyenne sur les données saisies de manière interactive.

program average

  ! Read in some numbers and take the average
  ! As written, if there are no data points, an average of zero is returned
  ! While this may not be desired behavior, it keeps this example simple

  implicit none

  real, dimension(:), allocatable :: points
  integer                         :: number_of_points=0
  real                            :: average_points=0., &
                                     positive_average=0., &
                                     negative_average=0.

  write (*,*) "Input number of points to average:"
  read  (*,*) number_of_points

  allocate (points(number_of_points))

  write (*,*) "Enter the points to average:"
  read  (*,*) points

  ! Take the average by summing points and dividing by number_of_points
  if (number_of_points > 0) average_points = sum(points) / number_of_points

  ! Now form average over positive and negative points only
  if (count(points > 0.) > 0) then
     positive_average = sum(points, points > 0.) / count(points > 0.)
  end if

  if (count(points < 0.) > 0) then
     negative_average = sum(points, points < 0.) / count(points < 0.)
  end if

  deallocate (points)

  ! Print result to terminal
  write (*,'(a,g12.4)') 'Average = ', average_points
  write (*,'(a,g12.4)') 'Average of positive points = ', positive_average
  write (*,'(a,g12.4)') 'Average of negative points = ', negative_average

end program average

Humour

Au cours de la même réunion du comité des normes FORTRAN au cours de laquelle le nom « FORTRAN 77 » a été choisi, une proposition technique satirique a été incorporée dans la distribution officielle portant le titre « Lettre O Considéré Nocif ». Cette proposition visait à remédier à la confusion qui survient parfois entre la lettre « O » et le chiffre zéro, en éliminant la lettre des noms de variables admissibles. Cependant, la méthode proposée consistait à éliminer entièrement la lettre du jeu de caractères (en conservant ainsi 48 comme nombre de caractères lexicaux, que les deux points avaient augmenté à 49). Cela a été considéré comme bénéfique dans la mesure où cela favoriserait une programmation structurée, en rendant impossible l'utilisation de la GO TOdéclaration notoire comme auparavant. (Les FORMATdéclarations gênantes seraient également éliminées.) Il a été noté que cela "pourrait invalider certains programmes existants" mais que la plupart d'entre eux "étaient probablement non conformes, de toute façon".

Lorsque X3J3 s'est demandé si le nombre minimum de déclenchements pour une boucle DO devait être égal à zéro ou à un dans le Fortran 77, Loren Meissner a suggéré un nombre minimum de déclenchements de deux, en raisonnant (l'ironie) que s'il était inférieur à deux, il y aurait aucune raison pour une boucle!

Lorsque des tableaux de longueur supposée ont été ajoutés, il y a eu un différend quant au caractère approprié pour séparer les limites supérieure et inférieure. Dans un commentaire examinant ces arguments, le Dr Walt Brainerd a écrit un article intitulé "Astronomy vs. Gastroenterology" parce que certains partisans avaient suggéré d'utiliser l'étoile ou l'astérisque ("*"), tandis que d'autres préféraient le côlon (":").

Les noms de variables commençant par les lettres I-N ont un type par défaut d'entier, tandis que les variables commençant par toute autre lettre sont par défaut réelles, bien que les programmeurs puissent remplacer les valeurs par défaut par une déclaration explicite. Cela a conduit à la blague: "En FORTRAN, DIEU est RÉEL (sauf si déclaré ENTIER)."

Voir également

Les références

Lectures complémentaires

Normes linguistiques
Normes associées
Autre matériel de référence
Livres
Des articles

Liens externes