On ne fait pas de la magie

«Toute technologie suffisamment avancée est indiscernable de la magie.» Arthur C. Clarke

Fortran est moderne !

« 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 95CC++PythonC#Java
TableauxBoucles implicites sur les tableauxOuiNonNonNon (Oui avec Numpy)NonNon
Constructeur de tableauxOuiNonNonOui (list/numpy)OuiOui
Modification de forme d’un tableauOui (reshape)NonNonNon
(Oui avec numpy)
Partiel (LINQ)Non
Slicing de tableau, tableau d’indicesOuiNonNonOuiPartiel (Range)Non
Conditions sur tableauOui (where)NonNonPartiel (list comp.)Partiel (LINQ)Non
Opérations arithmétiques entre tableauxOuiNonNonNon
(Partiel avec NumPy)
NonNon
Fonctions appliquées sur les tableauxOui (Fonctions intrinsèques / elemental)NonNonNon
(Partiel avec NumPy)
NonNon
Allocation dynamique de tableauxOuimalloc/freenew/deleteAutomatiquenew/GCnew/GC

PointeursOuiOuiOuiNonNonNon
FonctionsInterface de fonctionsOuiNonOuiNonOuiOui
Contrôle des arguments d’une fonctionOui (intent in, out, inout)Partiel (const)Partiel (const/ref)NonPartiel (in/ref)Partiel (final)
Arguments nommésOuiNonOui (C++20)OuiNonNon
Arguments optionnelsOui (optional)NonOui (valeurs par défaut)OuiOui (valeurs par défaut)Non
Surcharge de fonctionsOui (Interface générique)NonOuiNonOuiOui
Fonctions localesOui (contains)NonOui (classe locale)OuiOui (méthode locale)Oui (classe locale)

portabilité des types numériquesOui (kind, select_real_kind)NonNonPartiel (ctypes)Partiel (types explicites)Partiel (types explicites)

type complex intégré au langageOuiOui (C99 complex.h)Oui (std::complex)Oui (complex)Non (bibliothèque)Non (bibliothèque)
Variables composéesregroupement de champs hétérogènesOui (type)Oui (struct)Oui (struct/class)Oui (dataclass)Oui (struct/class)Oui (class/record)
Surcharge d’opérateursOuiNonOuiOuiOuiNon

Modules (variables + visibilité)OuiNonOui (C++20)Oui (package)NonOui (package)

Rupture de boucles imbriquéesOui (exit/cycle et label)Oui (goto+label)Oui (goto+label)NonOuiOui

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 !

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *