Fortran

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Fortran
Logo.
Date de première version 1954
Auteur John Backus
Développeur John Backus & IBM
Dernière version Fortran 2008 (ISO/IEC 1539-1:2010)Voir et modifier les données sur Wikidata
Paradigme Multi-paradigme : impératif (procédural, structuré, orienté-objet), générique
Typage fort, statique
Influencé par Speedcoding
A influencé Algol 58, BASIC, C, PL/I, PACT I, MUMPS, Ratfor
Implémentations Absoft, Cray, Gfortran, G95, IBM, Intel, Lahey/Fujitsu, Open Watcom, PathScale, PGI, Silverfrost, Oracle, XL Fortran, Visual Fortran etc.

Fortran (FORmula TRANslator) est un langage de programmation utilisé principalement pour le calcul scientifique. Inventé en 1954, c'est le plus ancien langage de programmation de haut niveau, suivi notamment par Lisp (1958), Algol (1958) et COBOL (1959). Le nombre de bibliothèques scientifiques écrites en Fortran, et les efforts continus consacrés aux compilateurs pour exploiter au fil des décennies les nouvelles possibilités des calculateurs (vectorisation, coprocesseurs, parallélisme) ont maintenu l'usage de ce langage, non sans d'importantes évolutions. Les premières versions de CATIA étaient elles-même écrites en Fortran.

Historique[modifier | modifier le code]

John Backus, ingénieur en radiophonie recruté quatre ans plus tôt par IBM, publie en 1954 un article intitulé Preliminary Report, Specifications for the IBM Mathematical FORmula TRANslating System, FORTRAN[1]. Il faut ensuite deux ans d'efforts à l'équipe qu'il dirige au sein d'IBM pour écrire le premier compilateur Fortran (25 000 lignes[2], pour l'IBM 704)[3]

Le nom du langage est parfois écrit conventionnellement en majuscules (FORTRAN) pour désigner les versions du langage jusqu'au Fortran 77, par opposition aux versions à syntaxe libre, depuis Fortran 90[4]. Par ailleurs, dans le standard Fortran 77, les lettres minuscules ne font pas partie du langage, même si la plupart des compilateurs les prennent en charge, en extension au standard.

Aujourd'hui encore (années 2010), le langage Fortran reste très utilisé pour plusieurs raisons :

  • la présence de très nombreuses bibliothèques de fonctions, mises au point et améliorées durant de nombreuses années ;
  • l'existence de logiciels en Fortran ayant demandé des ressources très importantes pour leur développement, et dont le passage à un autre langage est jugé trop coûteux ;
  • l'existence de compilateurs performants qui produisent des exécutables très rapides ;
  • le langage est plus facilement accessible (que par exemple le C++) à un scientifique n'ayant pas eu un cursus spécialisé en informatique.

Toutefois, beaucoup de programmes scientifiques sont à présent écrits en C et C++[5], dont les compilateurs sont disponibles sur la plupart des machines. D'autres langages compilés sont parfois utilisés pour le calcul scientifique, et surtout des logiciels tels que Scilab ou Matlab. Ces derniers incorporent d'ailleurs les bibliothèques BLAS et LAPACK, développées en Fortran[6],[7]. Matlab était à l'origine un programme en Fortran, distribué aux universités et aux centres de recherche[8].

Le Fortran, créé à l'époque des cartes perforées (en particulier avec le système FMS), optimise la mise en page de ses sources dans cette optique, jusqu'au Fortran 90 qui introduit une syntaxe « libre ». Avant Fortran 90, le code commence à partir de la 7e colonne et ne doit pas dépasser la 72e. Il se présente alors ainsi :

  • 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 (en Fortran II des ordinateurs Advanced Scientific Instruments ASI 210 et ASI 2100) ;
  • 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).

Il faut également noter qu'avant Fortran 90, les espaces n'ont pas de signification entre la 7e et la 72e colonne. Ainsi, la boucle DO 10 I=1,5 peut aussi s'écrire DO10I=1,5. En revanche, DO 10 I=1.5 est équivalent à DO10I=1.5, affectation de la valeur 1.5 à la variable DO10I. Le 10 représente ici le label de fin de boucle, obligatoire avant Fortran 90 : ce dernier a introduit le END DO, qui était déjà pris en charge par de nombreux compilateurs sous forme d'extension au standard Fortran 77. L'extension MIL-STD-1753 du département de la Défense américain avait déjà introduit ce END DO en Fortran 77 (à la place d'une instruction ou de CONTINUE), dès 1978, mais le label restait obligatoire[9].

De nombreux codes industriels ont été écrits en Fortran (Nastran, bibliothèques NAG et IMSL, etc.) et la compatibilité des nouvelles versions avec les précédentes est indispensable, au prix de conserver des notions qui ne s'imposent plus. Pour cette raison, Fortran 90 est complètement compatible avec Fortran 77. Les versions suivantes du standard ont cependant introduit des incompatibilités.

Le langage BASIC, dans sa version originale (1964), a été conçu comme un petit langage à caractère pédagogique permettant d'initier les étudiants à la programmation, avant de passer aux langages « sérieux » de l'époque : Fortran et Algol. On y retrouve donc quelques traits du langage Fortran.

Logiciel en Fortran 77 avec sortie du compilateur (ordinateur : CDC 175 de l'Université technique de Rhénanie-Westphalie à Aix-la-Chapelle).

Compilateurs[modifier | modifier le code]

Le compilateur libre GCC permet de compiler le Fortran 77 (compilateur g77[10],[11], jusqu'à gcc 3.4.6). Le compilateur gfortran[12] apparaît avec GCC 4.0.0, en 2005[13],[14]. Il est issu d'un fork réalisé en 2003 de G95 (en), un autre compilateur libre, dont le développement a débuté en 2000. Le développement de G95 est arrêté depuis janvier 2013 (date de la dernière mise à disposition du code source). En 2013, gfortran prend pleinement en charge le standard Fortran 95, et une partie de Fortran 2003[15] et Fortran 2008[16]. Il n'a d'ailleurs pas à rougir devant les compilateurs commerciaux, pour le support de ces deux « nouveaux » standards[17],[18], les fabricants étant parfois plus intéressés par l'amélioration de la vitesse du code produit que par les dernières fonctionnalités offertes par le standard.

Open64 (en)[19] est un autre compilateur libre de Fortran 95, à ne pas confondre avec AMD x86 Open64[20], lui aussi libre. On trouve également le compilateur libre Open Watcom[21], mais il ne compile que du Fortran 77, et aucune évolution vers un standard plus récent n'est prévue.

On trouve de nombreux compilateurs commerciaux[22], parmi lesquels : Lahey[23], Absoft[24], PathScale (en)[25], Portland Group (en)[26] (filiale de NVidia), NAG, etc. La plupart des fabricants de stations de travail ou d'ordinateurs destinés au calcul intensif, proposent également un compilateur de Fortran : Intel[27], IBM[28], HP[29], SGI[30], Oracle (à la suite du rachat de Sun Microsystems[31]), Unisys[32], Cray[33], etc. Cela comprend aussi les fabricants aujourd'hui disparus[34], tels que CDC ou DEC. Ce dernier a d'ailleurs été racheté par Compaq, qui a plus tard fusionné avec HP ; le compilateur Intel Visual Fortran est le successeur de DEC Visual Fortran puis Compaq Visual Fortran.

Certains de ces compilateurs commerciaux ont des versions gratuites pour une utilisation non commerciale : c'est le cas d'Intel[35], Oracle[36], PathScale[37]. IBM a également mis à disposition une version beta de son compilateur XL Fortran pour MacOS X (sur PowerPC), jusqu'à la sortie de la version commerciale.

Exemple[modifier | modifier le code]

      PROGRAM DEGRAD 
! 
! Imprime une table de conversion degrés -> radians 
! ================================================= 
! 
! Déclaration des variables 
      INTEGER DEG 
      REAL RAD, COEFF 
! 
! En-tête de programme 
      WRITE (*, 10) 
   10 FORMAT (' ',20('*') /                                             &
     &        ' * Degres * Radians *' /                                 &
     &        ' ', 20('*') )                                       
! 
! Corps de programme 
      COEFF = (2.0 * 3.1416) / 360.0 
      DO DEG = 0, 90 
         RAD = DEG * COEFF 
         WRITE (*, 20) DEG, RAD 
   20 FORMAT (' *  ',I4,'  * ',F7.5,' *') 
      END DO 
! 
! Fin du tableau 
      WRITE ( *, 30) 
   30 FORMAT (' ',20('*') ) 
! 
! Fin de programme 
      STOP 
      END PROGRAM DEGRAD

Notes :

  • Ce programme est écrit en Fortran 90, en « forme fixe » et dans un style favorisant la compatibilité avec Fortran 77.
  • Le symbole « ! » indique un commentaire. Il peut être remplacé par les caractères « C » ou « * » lorsqu'il sont utilisés comme premier caractère.
  • La déclaration des variables est facultative en Fortran, mais sans déclaration, la variable DEG serait alors de type REAL (les variables dont le nom commence par une des lettres I, J, K, L, M ou N sont par défaut de type INTEGER, les autres de type REAL).
  • L'instruction WRITE se réfère à une unité d'entrée-sortie (ici * désigne le terminal) et une spécification de format. Par exemple le format d'étiquette 20 indique qu'il faut écrire une espace, une étoile et deux espaces, un entier (la valeur de DEG) sur 4 caractères, puis deux espaces, une étoile, une espace, puis la valeur de RAD sur 7 caractères dont 5 après le point décimal et enfin une espace et une étoile. Une déclaration de FORMAT peut être n'importe où ; une habitude est de la mettre juste après le WRITE à laquelle elle se réfère, une autre est de les mettre toutes à la fin de l'unité de programme. Plus d'une instruction WRITE peut faire référence à un même FORMAT.
  • Le caractère & à la fin d'une ligne indique une suite à la ligne suivante et le caractère & au début de la ligne indique la suite de la ligne précédente. Le deuxième est facultatif en Fortran 90, mais facilite la compatibilité avec Fortran 77 (une continuation de ligne y est indiquée par un caractère quelconque en colonne 6 des lignes suivant la première). C'est aussi pour faciliter la compatibilité que le & de la première ligne est placé après la colonne 72 : ainsi il n'est pas pris en compte par un compilateur de Fortran 77.
  • L'instruction « DO DEG = 0,90 » indique de répéter en boucle les instructions qui suivent (jusqu'au END DO) pour toutes les valeurs de DEG de 0 à 90 par pas de 1.

Différentes versions de Fortran[modifier | modifier le code]

Le langage Fortran a connu de nombreuses évolutions[38] :

  • 1956. Fortran I n'avait que des expressions arithmétiques et donc logiquement le branchement conditionnel était le « IF-arithmétique » à trois adresses : IF (A-B) 10, 20, 30 indiquait de sauter aux instructions d'étiquette 10, 20 ou 30 selon que A-B était négatif, nul ou positif.
  • 1958. Fortran II[39],[40] apportait les fonctions FUNCTION et les sous-programmes SUBROUTINE que l’on appelle par l’instruction CALL.
  • 1959. Fortran III permettait d’y insérer du langage assembleur symbolique, mais n'est jamais sorti sous forme de produit.
  • 1962. Fortran IV introduit, entre autres, l'instruction « IF-logique », permettant d'écrire IF (A .GE. B) GOTO 10 (aller à 10 si A est supérieur ou égal à B).
  • 1964. Fortran V était le nom envisagé au départ pour PL/I, langage de programmation universel d'IBM qui devait réunir les meilleurs aspects de Fortran (pour les applications scientifiques), de COBOL (pour les applications de gestion), avec quelques emprunts à Algol.
  • 1965. Le standard ECMA Fortran[41], situé à cheval entre le « Basic Fortran » et le « Fortran USASI »
  • 1966. Fortran 66 (USASI X3.9-1966)[42] est la première version officiellement standardisée (par l'American Standards Association) de Fortran. On la confond souvent avec Fortran IV.
  • 1978. Fortran 77 (ANSI X3.9-1978)[43],[44], entre autres améliorations, facilite la programmation structurée avec des blocs IF / THEN / ELSE / END IF. En 1978, une extension introduit entre autres DO WHILE / END DO[45].
  • 1992. Fortran 90 (ANSI X3.198-1992)[46] : modules, récursivité, surcharge des opérateurs, nouveaux types de données, etc. C'est une mise à jour importante pour mettre Fortran au niveau des autres langages modernes. Les restrictions concernant la mise en forme des programmes (colonnes 1 à 72) disparaissent : l'écriture se fait en format libre. En 1992 est également publié le volet Fortran du standard POSIX[47].
  • 1997. Fortran 95 (ISO/CEI 1539-1:1997)[48]
  • 2004. Fortran 2003 (ISO/CEI 1539-1:2004)[49] : comme le COBOL 2002, Fortran supporte maintenant la programmation orientée objet[50]. L'interface avec le langage C est assurée par le module interne ISO_C_BINDING et les mots-clés BIND et VALUE, qui permettent à un programme Fortran d'accéder facilement aux bibliothèques disponibles en C.
  • 2010. Fortran 2008 (ISO/CEI 1539-1:2010)[51].
  • La prochaine version prévue, connue sous le nom « Fortran 2015 », apportera des modifications mineures au langage[52],[53].

Bibliothèques[modifier | modifier le code]

Bibliothèques graphiques[modifier | modifier le code]

Les normes Fortran n'incluent pas d'instructions graphiques. Pour pallier ce manque, il faut utiliser des bibliothèques :

  • gtk-fortran : interface GTK+ 2 et 3 / Fortran, entièrement écrite en Fortran 2003 standard grâce au module ISO_C_BINDING. Multiplateforme (Linux, Windows, Mac OS X...) Projet lancé en janvier 2011. Logiciel libre sous licence GPL 3.
  • pilib (Platform Independent Library for Fortran) : interface Fortran 90-95 / GTK. Développement arrêté. Logiciel libre.
  • Quickwin : bibliothèque graphique fournie avec le Compaq Visual Fortran (désormais Intel Visual Fortran). Ne fonctionne que sous Windows.
  • Winteracter : interface graphique et outils de visualisation. Logiciel commercial pour Windows, Linux et MacOS X.
  • SansGUI : interface commerciale pour Windows et Compaq Visual Fortran.
  • DISLIN : bibliothèque graphique créée par le Max Planck Institute for Solar System Research. Multiplate-formes (UNIX, Linux, FreeBSD, OpenVMS, Windows et MS-DOS). Fonctionne avec de nombreux compilateurs. Gratuit pour un usage non-commercial.
  • JAPI (Java Application Programming Interface) : 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.
  • Ftcl : interface Fortran-Tcl/TK. Gratuit, open-source.
  • f90gl : interface du Fortran 90 avec OpenGL, GLU et GLUT. Multiplate-formes. Fonctionne avec de nombreux compilateurs. Licence : domaine public.
  • GrWin Graphics Library : logiciel libre pour Windows.
  • Xeffort : bibliothèque graphique pour Visual Fortran. logiciel libre pour Windows.
  • g2 graphical library : pour Linux, AIX, Digital Unix, SunOS, IRIX, OpenVMS, Windows. Logiciel libre sous licence LGPL.
  • PLplot : bibliothèque pour tracer des courbes scientifiques. Multiplate-formes (Linux, OpenSolaris, Unix, MS-DOS, Windows, Mac OS X). Logiciel libre sous licence LGPL.
  • PGPLOT : bibliothèque de routines graphiques, interactive, gratuite, multiplate-forme, gère beaucoup de périphériques de sortie.
  • PSPLOT, pour générer des dessins en PostScript.

Bibliothèques de calcul scientifique[modifier | modifier le code]

  • Linear Algebra Package alias LAPACK[54]
  • Basic Linear Algebra Subprograms (BLAS)
  • Physics Analysis Workstation (PAW)
  • IMSL (International Mathematics and Statistics Library) Fortran Library (commerciale)

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Bibliographie[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. Preliminary Report, Specifications for the IBM Mathematical FORmula TRANslating System, FORTRAN [PDF]
  2. « John Backus », sur IBM Archives (consulté le 10 novembre 2014)
  3. Interrogé à ce sujet, John Backus expliqua dans une interview, 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 la même interview[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.
  4. Toutefois, on trouve déjà l'écriture « Fortran » dans le premier manuel de Fortran, remontant à 1956.
  5. Par exemple la GSL écrite en C, et Blitz++ ou IML++, en C++.
  6. MATLAB Incorporates LAPACK.
  7. Computation in Scilab.
  8. Code source de la première version de Matlab.
  9. MIL-STD-1753
  10. Copie de l'ancien site de g77
  11. g77 pour Windows sur le site de l'USGS
  12. GCC Wiki - GFortran
  13. GCC 4.0 Release Series - Changes, New Features, and Fixes
  14. Code source de GCC 4.0.0
  15. gfortran - 4.1 Fortran 2003 status
  16. gfortran - 4.2 Fortran 2008 status
  17. Compiler Support for the Fortran 2003 Standard
  18. Compiler Support for the Fortran 2008 Standard
  19. Il est aujourd'hui abandonné, la dernière version remonte à novembre 2011
  20. AMD - x86 Open64 Compiler Suite, la dernière version date de mars 2013
  21. Open Watcom
  22. Polyhedron Software - Fortran Compiler Comparisons
  23. Lahey Fortran
  24. Absoft Fortran
  25. PathScale EKOPath
  26. Portland Group Fortran
  27. Intel Fortran Compilers
  28. IBM - Fortran Compilers family
  29. HP Fortran for OpenVMS documentation
  30. SGI - Fortran MP Applications Development
  31. Oracle Solaris Studio
  32. Unisys - Documentation Libraries
  33. CrayDoc - Customer Documentation
  34. Bitsavers - documentation d'ordinateurs anciens
  35. Intel - Téléchargement de logiciels à usage non commercial
  36. Téléchargement de Oracle Solaris Studio
  37. Pathscale EKOPath pour Linux, version du 18 juillet 2016
  38. Voir aussi les sites du Working Group 5 et du comité J3 pour plus d'informations sur l'évolution actuelle du standard
  39. (en) John Backus, « The history of FORTRAN I, II, and III », ACM SIGPLAN Notices, vol. 13, no 8,‎ , p. 165-180 (DOI 10.1145/960118.808380, lire en ligne)
  40. (en) Irving N. Rabinowitz, « Report on the algorithmic language FORTRAN II », Communications of the ACM, vol. 5, no 6,‎ , p. 327-337 (DOI 10.1145/367766.368151)
  41. [PDF] Standard ECMA Fortran
  42. [PDF] Standard Fortran 66
  43. [PDF] Standard Fortran 77
  44. (en) Frank Engel, Jr., « Draft proposed ANS FORTRAN BSR X3.9 X3J3/76 », ACM SIGPLAN Notices, vol. 11, no 3,‎ , p. 1-212 (DOI 10.1145/956013.1070892)
  45. [PDF] MIL-STD-1753, Military Standard: Fortran, DOD Supplement to American National Standard X3.9-1978
  46. [PDF] Standard Fortran 90
  47. IEEE 1003.9-1992 - POSIX(R) FORTRAN 77 Language Interfaces - Part 1: Binding for System Application Program Interface (API)
  48. [PDF] Standard Fortran 95
  49. [PDF] Standard Fortran 2003
  50. initiée par Simula 67 et popularisée par C++ et Java.
  51. [PDF] Standard Fortran 2008
  52. Doctor Fortran Goes Dutch: Fortran 2015
  53. [PDF] F2015 Working Document, J3,
  54. http://www.netlib.org/lapack/#_presentation