« Pourquoi utiliser Fortran qui est un vieux langage alors qu’il y a des langages récents avec des fonctionnalités bien plus avancées ? »
C’est une question que les stagiaires des formations que j’anime entendent souvent de leur entourage quand ils disent qu’ils vont suivre une formation Fortran et qu’ils me posent parfois pendant la formation.
Ceux qui posent cette question ne connaissent pas les fonctionnalités du langage incluses dans les normes 90 et 95, c’est-à-dire il y a environ 30 ans, intégrées ensuite dans d’autres langages.
Fonctionnalités présentes en Fortran 95
Pour fixer les idées, voici une liste, non exhaustive, issue du support interactif de formation Fortran, des fonctionnalités présentes dans la norme Fortran 95.
Elles concernent d’une part des éléments liés au calcul (variables complexes, précision des variables, tableaux comme entités de première importance du langage) et d’autre part des éléments de programmation plus généraux (types composés, interface de fonction, surcharges de fonctions et d’opérateurs, allocation de mémoire dynamique, modules).
Remarquons que la notion de module n’a été introduite en C++ presque 30 ans après la norme Fortran 90.
| Fonctionnalité | Fortran 95 | C | C++ | Python | C# | Java | |
|---|---|---|---|---|---|---|---|
| Tableaux | Boucles implicites sur les tableaux | Oui | Non | Non | Non (Oui avec Numpy) | Non | Non |
| Constructeur de tableaux | Oui | Non | Non | Oui (list/numpy) | Oui | Oui | |
| Modification de forme d’un tableau | Oui (reshape) | Non | Non | Non (Oui avec numpy) | Partiel (LINQ) | Non | |
| Slicing de tableau, tableau d’indices | Oui | Non | Non | Oui | Partiel (Range) | Non | |
| Conditions sur tableau | Oui (where) | Non | Non | Partiel (list comp.) | Partiel (LINQ) | Non | |
| Opérations arithmétiques entre tableaux | Oui | Non | Non | Non (Partiel avec NumPy) | Non | Non | |
| Fonctions appliquées sur les tableaux | Oui (Fonctions intrinsèques / elemental) | Non | Non | Non (Partiel avec NumPy) | Non | Non | |
| Allocation dynamique de tableaux | Oui | malloc/free | new/delete | Automatique | new/GC | new/GC | |
| Pointeurs | Oui | Oui | Oui | Non | Non | Non | |
| Fonctions | Interface de fonctions | Oui | Non | Oui | Non | Oui | Oui |
| Contrôle des arguments d’une fonction | Oui (intent in, out, inout) | Partiel (const) | Partiel (const/ref) | Non | Partiel (in/ref) | Partiel (final) | |
| Arguments nommés | Oui | Non | Oui (C++20) | Oui | Non | Non | |
| Arguments optionnels | Oui (optional) | Non | Oui (valeurs par défaut) | Oui | Oui (valeurs par défaut) | Non | |
| Surcharge de fonctions | Oui (Interface générique) | Non | Oui | Non | Oui | Oui | |
| Fonctions locales | Oui (contains) | Non | Oui (classe locale) | Oui | Oui (méthode locale) | Oui (classe locale) | |
| portabilité des types numériques | Oui (kind, select_real_kind) | Non | Non | Partiel (ctypes) | Partiel (types explicites) | Partiel (types explicites) | |
| type complex intégré au langage | Oui | Oui (C99 complex.h) | Oui (std::complex) | Oui (complex) | Non (bibliothèque) | Non (bibliothèque) | |
| Variables composées | regroupement de champs hétérogènes | Oui (type) | Oui (struct) | Oui (struct/class) | Oui (dataclass) | Oui (struct/class) | Oui (class/record) |
| Surcharge d’opérateurs | Oui | Non | Oui | Oui | Oui | Non | |
| Modules (variables + visibilité) | Oui | Non | Oui (C++20) | Oui (package) | Non | Oui (package) | |
| Rupture de boucles imbriquées | Oui (exit/cycle et label) | Oui (goto+label) | Oui (goto+label) | Non | Oui | Oui |
Programmation orientée objet depuis 2003
Si vous regardez bien le tableau précédent, vous remarquerez qu’il n’y a aucune mention de Programmation Orientée Objet. C’est tout à fait vrai. Les fonctionnalités de programmation orientée objet ont été introduites dans les normes Fortran 2003/2008 : définition de fonctions dans un type dérivé, constructeurs et destructeurs, fonctions statiques, héritage, polymorphisme, détermination de type, classes et fonctions abstraites, copies d’objet…
Les seules fonctionnalités absentes en Fortran sont les notions d’exception et de généricité.
Programmation parallèle depuis 2008
Depuis la norme 2008, développée dans les normes 2018/2023, Fortran intègre directement dans le langage des mécanismes de parallélisation qui n’ont pas d’équivalent dans d’autres langages.
J’espère vous avoir montré que Fortran est un langage moderne, avec des fonctionnalités aussi avancées que de nombreux langages récents, spécialisé pour effectuer des calculs qui peuvent tourner des heures ou des jours.
En conclusion, ne posez plus la question dont j’ai parlé en préambule !
Laisser un commentaire