J'ai lu que Fortran est encore largement utilisé pour le calcul scientifique. Pour le code déjà fortement investi dans Fortran, cela a du sens pour moi.
Mais y a-t-il une raison d'utiliser Fortran par rapport à d'autres langages modernes pour un nouveau projet? Y a-t-il des décisions de conception de langage dans Fortran qui le rendent beaucoup plus approprié pour le calcul scientifique par rapport aux langages les plus populaires (C++, Java, Python, Ruby, etc.)? Par exemple, y a-t-il des fonctionnalités linguistiques spécifiques de Fortran qui permettent peut-être une optimisation numérique dans les compilateurs à un degré beaucoup plus élevé par rapport aux autres langues que j'ai mentionnées?
Fortran est, pour le meilleur ou pour le pire, le seul langage majeur sur le marché spécifiquement conçu pour l'informatique numérique scientifique. Sa gestion de tableau est agréable, avec des opérations de tableau succinctes sur des tableaux entiers et sur des tranches, comparables à matlab ou numpy mais super rapides. Le langage est soigneusement conçu pour rendre très difficile l'écriture accidentelle de code lent - les pointeurs sont limités de telle sorte qu'il est immédiatement évident s'il peut y avoir un aliasing, comme l'exemple standard - et ainsi l'optimiseur peut aller en ville sur votre code. Les incarnations actuelles ont des choses comme le coarray fortran, et font simultanément et forall construit dans le langage, permettant la mémoire distribuée et le parallélisme de la mémoire partagée, et la vectorisation.
Les inconvénients de Fortran sont principalement le revers de l'un des avantages mentionnés; Fortran a une longue histoire. À l'envers: des tonnes de grandes bibliothèques. Inconvénients: tonnes de bagages historiques.
Si vous devez faire beaucoup de calculs, Fortran reste l'un des meilleurs choix, c'est pourquoi de nombreux codes de simulation les plus sophistiqués exécutés dans les centres de superinformatique du monde entier y sont écrits. Mais bien sûr, ce serait une langue terrible, terrible, pour écrire un navigateur Web. À chaque tâche son outil.
La principale raison pour moi est la notation de tableau Nice et de nombreuses autres décisions de conception qui facilitent l'écriture et le débogage du code scientifique. Le fait qu'il soit généralement le meilleur choix en termes de performances sur les tâches concernées (opérations de tableau) ne fait pas de mal non plus :)
Honnêtement, je ne considérerais pas la plupart des langages cités comme de vrais concurrents pour Fortran - Java et Ruby sont loin derrière en termes de commodité et de performance) , tandis que C++ est un langage beaucoup trop complexe et délicat à recommander à tous ceux dont le travail principal au cours des dernières années a été autre chose que la programmation quotidienne en C++. Python avec numpy pourrait être une option cependant .- Je ne suis personnellement pas un grand fan de la langue, mais je connais un certain nombre de personnes qui utilisent numpy régulièrement et semblent assez satisfaites.
La vraie concurrence que je vois ne vient pas de ceux-ci, mais de Matlab, R et de langages similaires, qui offrent une commodité similaire, combinée à de nombreuses bibliothèques standard. Heureusement, il est généralement possible de démarrer un projet dans R ou Matlab, et d'écrire des pièces critiques pour les performances dans Fortran plus tard.
Peu de projets sont des projets complètement nouveaux. Je ne suis pas sûr que ce soit spécifique au calcul scientifique, mais au moins dans ce domaine, vous avez tendance à construire vos applications sur la base de modèles (scientifiques) existants, peut-être produits par d'autres groupes/personnes. Vous devrez toujours gérer une certaine quantité de code hérité, que vous le vouliez ou non.
Fortran est ce avec quoi beaucoup de scientifiques ont appris et dans quel nombre de bibliothèques dont ils ont besoin sont implémentées. Un certain nombre d'entre eux ne sont pas des informaticiens ou des informaticiens, plus informatique scientifiques. Leur objectif principal est rarement l'informatique, c'est leur science d'abord. Alors qu'un grand nombre de programmeurs auraient tendance à apprendre un nouveau langage ou cadre de programmation chaque fois qu'ils en ont l'occasion (y compris pendant leur temps libre), la plupart des scientifiques utiliseraient ce temps pour explorer de nouvelles idées concernant leur science.
Un expert en domaine formé à Fortran (ou dans n'importe quelle langue) et entouré de personnes se trouvant dans une situation similaire ne sera pas incité à s'en éloigner. Ce n'est pas seulement que maintenant d'autres langues peuvent être aussi bonnes que Fortran en termes de performances, elles doivent être beaucoup meilleures: il doit y avoir une bonne raison pour vous éloigner de ce que vous avez et savez.
C'est aussi un cercle "vicieux" dans une certaine mesure. J'ai toujours trouvé les comparaisons entre Java et Fortran un peu difficiles, simplement parce qu'un certain nombre d'applications scientifiques Java ne sont pas programmées dans un Java façon. Certaines des applications de référence Java Grande ressemblent clairement à des programmes Fortran transformés en programmes C, copiés/collés/modifiés en Java programmes (en une méthode, en passant la longueur du tableau en tant que paramètre supplémentaire à côté du tableau lui-même donne un indice, si je me souviens bien. Pour cette raison, Java (par exemple) n'a pas obtenu une grande réputation dans la communauté scientifique, même si ses performances s'améliorent . En conséquence, il y a peu de chevauchement entre les experts HPC et Java experts, pour Par exemple, même auprès des fournisseurs de matériel ou des implémenteurs de bibliothèques, la faible demande des utilisateurs entraîne une faible assistance, ce qui dissuade à leur tour les utilisateurs qui seraient potentiellement intéressés à passer à d'autres langues.
Notez que cela n'empêche pas les mêmes (ou d'autres) scientifiques d'utiliser d'autres langages à d'autres fins (par exemple, gestion du flux de travail, gestion des données, modélisation plus rapide avec Matlab, Numpy, ...).
Si je comprends bien, il existe des bibliothèques qui sont parmi les implémentations les plus efficaces de leurs algorithmes disponibles, ce qui rend Fortran populaire pour ce type de travail malgré les limites du langage.