web-dev-qa-db-fra.com

Quels avantages le Modern Fortran a-t-il dépassé le C ++ moderne?

J'essaie de décider entre Fortran et C++ pour une application en informatique scientifique. Ce n'est pas clair pour moi si Fortran présente toujours des avantages par rapport aux autres langues lorsqu'il s'agit de la performance. Par exemple, je crois, car Fortran applique un aliasing strict, de meilleures optimisations pourraient être apportées par le compilateur par rapport au C avant C99. Je ne sais pas comment C++ convient ici.

Des directives?

30
royco

J'ai regardé - ne partie des choses dans les dernières normes Fortran , et franchement, je suis impressionné. Beaucoup de ce que je détestais sur la langue il y a 20 ans est parti maintenant. Plus de numéros de ligne et de colonnes spéciales (peuvent-ils brûler en enfer).

Fortran a été fortement utilisé dans les cercles d'ingénierie pendant 50 ans maintenant. Cela vous donne deux avantages si vous travaillez dans ces cercles. Tout d'abord, ces personnes CAREY Beaucoup sur l'optimisation. Cela signifie que les compilateurs de fortrain ont tendance à avoir les meilleurs optimiseurs autour. La langue elle-même est beaucoup plus optimisable que les langues cish aussi, grâce à son manque d'aliasing.

Le deuxième avantage est que la prise en charge de la bibliothèque de Fortran au nombre de chiffres ne peut tout simplement pas être battu. Le meilleur code va presque toujours être le code bien débogué que vous n'avez pas à écrire .

Si votre demande ne relève pas de la science, l'ingénierie ou le nombre de crunches en général, aucun de ce qui précède ne sera un gros problème pour vous, afin que vous soyez peut-être mieux à regarder ailleurs.

46
T.E.D.

L'autre problème majeur est la courbe d'apprentissage qui est très énorme pour C++ et exceptionnellement petite pour Fortran (90 et ultérieure). Fortran est comme Matlab avec des opérations comme ...

  • B'DB est matmul( matmul(transpose(B), D), B )
  • La norme L2 d'un vecteur est norm2(x)
  • SVD d'une matrice à l'aide de Lapack est call gesvd(A,S,u,vt)

Fortran a également des pointeurs, une mémoire dynamique, des types de données définis par l'utilisateur, etc.

Il est bien soutenu par les principaux vendeurs (Intel/Sun/IBM/Cray/PGI/NAG, etc.), des communautés Open Source (Gortan/G95) et des développeurs de bibliothèques/API numériques telles que PETSC, MPI etc.] .

Heck La nouvelle norme (Fortran 2008) a même des co-tableaux pour effectuer une programmation parallèle sans la nécessité de MPI/OpenMP et certains compilateurs de Fortrans le soutiennent déjà (G95 et Cray).

Fondamentalement, il a toutes les bonnes qualités requises pour l'informatique numérique, est plus facile que MATLAB, est normalisée, gratuite, évolutive (avec MPI/OpenMP et Co-tableaux), produit un code rapide/parallèle flamboyant.

Pour les numérics, rien ne bat le fortrain mais malheureusement pour toute autre chose qui bat fortan. Donc, si vous êtes un scientifique avec un travail sûr et que le calcul numérique/HPC ne colle que de Fortran autrement apprendre et utilisez C++ car il est largement utilisé pour les logiciels non numériques.

22
user4562

Fortran a été très optimisé pour les opérations mathématiques (en particulier matricielles) telles que des opérations.

C++ a été très optimisé pour l'utilisation de l'objet.

Qu'est-ce qui est le plus important pour toi.

Comme indiqué ci-dessous C++, une bibliothèque matricielle optimisée.
[.____] Mais l'objectif de Fortran est l'optimisation des processus mathématiques (en particulier des opérations matricielles). Le fait que ces optimisations soient intégrées à la fondation de la langue (plutôt qu'une bibliothèque) et d'environ deux décennies commencer à la recherche sur la recherche sur C++, je doute (mais je ne sais pas pour un fait) que dans cette zone fortran va gagner la main vers le bas.

12
Martin York

Avantages de Fortran95 et supérieur à C++ (2003):

  1. Comme précédemment (par User4562) mentionné une courbe d'apprentissage courte (ma langue maternelle était C et je ne peux toujours pas la maîtriser, similaire est vrai pour C++)
  2. (Mon opinion personnelle) Facile pour la transition de code d'octave (pour cette matière Matlab) Syntaxe similaire, même modularité [J'utilise Octave pour prototyper un programme et réécrire dans Fortran95 pour la vitesse], bien que vous puissiez utiliser directement le code d'octave en C++.
  3. l'allocation de la mémoire dynamique est assez simple. (F77 n'a pas du tout!)
  4. prise en charge des bibliothèques (vous pouvez également le faire en C++, mais son naturel à utiliser Fortran)
  5. Prise en charge de Co-Tarray pour l'informatique parallèle (Paix Seuls Cray les supporte à partir de Février 2011, le travail de Gfefan 2011 a commencé à partir de gfortran4.6 mais toujours un long chemin à parcourir)

en bref si votre programme ou votre application est purement informatique scientifique, utilisez Fortran 95 et plus si le calcul de quelques numéros ne fait qu'une partie de l'histoire utilise C++ (ou tout ce que vous jugez mieux)

8
fedvasu

Je suis nouveau à la programmation. Je suis programmée dans le domaine des éléments finis pendant environ un an. Après quelques recherches sur le net, j'ai décidé d'utiliser Fortran 2003.J'ai appris à programmer dans le style modulaire dans environ dix jours en étudiant le livre Chapman. C'est un an et j'ai écrit environ quatre milliers de lignes de code dans le format modulaire (codes de maintenance, réutilisables et soignées) et n'a utilisé aucune variable de caractère. Je ne pense pas qu'en étudiant C++, Matlab, Python, Java ... pendant dix jours, vous seriez capable d'écrire des codes numériques aussi efficaces qu'en Fortran. Fortran 2003 a également tout le nécessaire OOP capacités que je suis en train d'apprendre. Donc, en termes de force de la langue dans le fortan aspect numérique ne manque de rien (style modulaire, le style POO, les capacités de réseau puissantes, de puissantes bibliothèques, des libres et commerciaux aux compilateurs datés, très facile à apprendre, très efficace ...). Langues comme python/numpy a la plupart de ces capacités, mais l'efficacité manque. Des langages comme C++ a également la plupart des capacités de Fortran (bien que pour le calcul de la matrice qui est le noyau principal de calcul numérique, vous devez importer des bibliothèques !!), mais peut-être un programme écrit par quelqu'un comme moi en Fortran serait plus efficace que un écrit par un programmeur C++ avec 10 ans d'expérience.
Enfin, je fais mes calculs numériques lourds en Fortran (modulaire ou OOPFormat _), et l'utilisation python\numpy pour les calculs de petite taille (comme la création de parcelles, les petits calculs du tableau de taille ...).

5
user1591744

IMHO, le seul avantage qui compte vraiment est que la programmation Fortran vous permet de faciliter la réutilisation de nombreux codes et bibliothèques existants. Et si vous avez 50 programmeurs Fortrans à portée de main pour un projet et une période limitée, vous allez d'abord à leur apprendre tous C++ ou acceptez-vous de les laisser utiliser leur langue préférée?

4
Doc Brown

Compte tenu de l'existence de forfaits informatiques scientifiques tels quePACK ++, qui sont déjà très optimisés, Modern Fortran n'a même pas d'avantage de performance. C++ peut avoir ses défauts, mais la performance n'est pas l'une d'entre elles.

2
Daniel Gallagher