Quels sont les avantages du Fortran moderne par rapport au c++moderne? [fermé]
j'essaie de me décider entre Fortran et C++ pour une application en informatique scientifique. Je ne sais pas si Fortran a encore des avantages sur les autres langues en termes de performances. Par exemple, je pense que puisque Fortran impose un aliasing strict, de meilleures optimisations pourraient être faites par le compilateur par rapport à C avant C99. Je ne suis pas sûr de la place du C++ ici.
des conseils?
10 réponses
j'ai pris un coup d'oeil à certaines choses dans la dernière Fortran normes, et franchement, je suis impressionné. Beaucoup de ce que je détestais à propos de la langue il y a 20 ans est parti maintenant. Plus de numéros de ligne et de colonnes spéciales (qu'ils brûlent en enfer).
Fortran est largement utilisé dans les cercles de l'ingénierie depuis maintenant 50 ans. Qui vous donne deux avantages si vous travaillez dans ces milieux. Tout d'abord, ces gens de soins beaucoup a propos de l'optimisation. Cela signifie que le Fortran les compilateurs ont tendance à avoir les meilleurs optimiseurs. La langue elle-même est beaucoup plus optimisable que Cish langues, grâce à son absence d'aliasing.
le second avantage est que le support de bibliothèque de Fortran pour le nombre crunching ne peut tout simplement pas être battu. Le code est presque toujours le bien-débogué code que vous n'avez pas à écrire.
si votre application ne relève pas de la science, de l'ingénierie, ou du calcul en général, alors aucun des deux ci-dessus ne sera une grande affaire pour vous, de sorte que vous pourriez être mieux looking elsewhere.
l'autre problème majeur est la courbe d'apprentissage qui est très énorme pour C++ et exceptionnellement petite pour Fortran (90 et plus tard). 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 utilisant LAPACK est
call gesvd(A,S,u,vt)
Fortran possède é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 fournisseurs (Intel / Sun/IBM/Cray/PGI / NAG etc.), les communautés open source (gfortan/g95) et les développeurs de bibliothèques numériques/API telles que PETSc, MPI, etc.
Heck la nouvelle norme (Fortran 2008) a même des co-tableaux pour faire de la programmation parallèle sans avoir besoin de MPI/OpenMP et certains compilateurs Fortran le supportent déjà (g95 et Cray).
fondamentalement, il a toutes les bonnes qualités requises pour le calcul numérique, est plus facile que MATLAB, est normalisé, libre, évolutif (avec MPI / OpenMP et CO-matrices), produit un code flambant rapide / parallèle.
pour numerics rien ne bat Fortran mais malheureusement pour tout le reste tout Bat Fortan. Donc, si vous êtes un scientifique avec un emploi sûr et ne faites de calcul numérique/HPC puis coller avec Fortran autrement apprendre et utiliser C++ car il est largement utilisé pour les logiciels non numériques.
Fortran permet des opérations de réseau entier et aussi des opérations sur des sections de réseau. Il existe des classes C++ pour les tableaux, mais je ne pense pas que vous puissiez vous référer à une tranche telle que x(:,2:,1:N3:2) aussi facilement que dans Fortran. Cela permet d'exprimer des algorithmes assez concise.
la commodité des opérations des tableaux de Fortran s'étend aux tableaux de types dérivés. Supposons que vous ayez un tableau de dates:
date
entier :: Mois, Jour, Année
type de fin date
type (date):: x (1000)
Alors x se réfère au tableau de dates, x%d'un mois se réfère à l'ensemble des mois, et pack(x,x%d'un mois==1) se réfère à toutes les dates en janvier. Combien d'autres langages de programmation offrent ce confort?
certains des commentaires antérieurs au sujet de Fortran -- "vieux et dégoûtant" -- sont biaisés et devraient être écartés en conséquence. Permettez-moi de au contraire. À mon avis, le format Libre de Fortran 90 semble mieux que la syntaxe de C et C++, avec les accolades bouclées et les points-virgule. Les laisser dehors ou les mettre incorrectement peut causer des erreurs en C et C++ qui n'ont pas de contrepartie dans Fortran.
Fortran a été fortement optimisé pour les opérations mathématiques (en particulier matrix).
C++ a été optimisé pour l'utilisation des objets.
ce Qui est plus important pour vous.
comme indiqué ci-dessous, C++ a une bibliothèque matricielle optimisée.
Mais le but de Fortran est d'optimiser les processus mathématiques (en particulier les opérations matricielles). Le fait que ces optimisations sont intégrées à la base de la langue (plutôt qu'une je doute (mais je ne sais pas si c'est un fait) que dans ce domaine Fortran va gagner du terrain.
les Avantages de fortran95 et au-dessus de c++(2003):
- comme précédemment (par user4562) mentionné courbe d'apprentissage courte(ma première langue était C et je ne peux toujours pas le maîtriser , similaire est vrai pour C++)
- (mon opinion personnelle) facile pour la transition de code D'Octave(D'ailleurs Matlab)syntaxe similaire,même modularité[J'utilise Octave pour prototype un programme et réécrire dans fortran95 pour la vitesse],bien que u puisse directement utiliser le code d'octave en C++.
- dynamique l'attribution de la mémoire est très simple.(f77 n'avait pas ça du tout!)
- bibliothèques support (u peut faire cela aussi en c++, mais il est naturel d'utiliser fortran)
- Co-matrice de soutien pour le calcul parallèle (dommage que cray soutient février 2011 gfortran travail a commencé en tant que de gfortran4.6 mais encore un long chemin à parcourir)
en bref si votre programme ou votre application est purement Calcul scientifique utiliser fortran 95 et plus si calcul de quelques nombres c'est juste une partie de l'histoire de l'utilisation de C++ (ou quel que soit u se sentent mieux)
mon expérience avec Fortran est qu'il est facile à apprendre, propre (étant fortement modularisé), et donc bien adapté à un non-programmeur dont la principale préoccupation est de faire des calculs numériques hautement optimisés. Bien qu'une optimisation égale puisse être réalisée en c++, (peut-être même dans une plus grande mesure), il faut beaucoup de compréhension intrinsèque pour atteindre ce niveau d'optimisations. En ce qui concerne les calculs matriciels, un compilateur Fortran out-of-the-box exécute normalement un compilateur c++. J'ajouterais aussi que Fortran a des mots-clés qui sont spécifiquement conçus pour aider le programmeur à extraire plus de performance d'une routine numérique. C++ A ceci aussi, mais pas autant que Fortran.
un autre avantage est que Fortran n'est pas spécifique au système d'exploitation ou à l'architecture. En d'autres termes, le code Fortran que vous écrivez sur un système d'exploitation ou une architecture devrait facilement être porté vers un autre où il y a un compilateur Fortran.
un Autre avantage est que Fortran moderne est normalement rétro-compatible avec les anciennes bases de code de Fortran. Et la base de code qui a été construit au cours des années à Fortran est énorme et extrêmement sophistiqué (étant la plupart du temps fait par des scientifiques et des mathématiciens).
Aussi, personnellement, j'ai vraiment apprécié le fichier intégré des fonctions de gestion qui permettent de lire un fichier de données et effectuer des opérations sur presque instantanément. Beaucoup d'autres fonctions intégrées dans Fortran sont conçues pour permettre cette commodité. C++ offre principalement des blocs de construction pour le faire et cela nécessite un peu de sueur juste pour lire un fichier de données b/C vous devez savoir quelque chose sur les délimiteurs (où Fortran vous permet de spécifier le délimiteur).
au-delà de cela, je ne peux pas penser aux avantages. La plupart des autres choses seraient des manipulations de chaînes, ou des opérations basées sur des algorithmes pour lesquelles c++ en tant que langage, et en général ses compilateurs, sont mieux adaptés et le plus souvent performeront mieux. Un bon programmeur averti va probablement préférer c++ car il / elle pourrait comprendre comment optimiser une routine numérique d'une manière qui pourrait probablement donner de meilleurs résultats qu'une routine compilée par Fortran. En outre, les compilateurs fiables Fortran ne sont pas aussi faciles à trouver que les compilateurs fiables C++.
je suis nouveau dans la programmation.J'ai été la programmation dans le domaine des éléments finis pour 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 en environ dix jours en étudiant le livre Chapman. C'est un an après et j'ai écrit environ quatre milliers de lignes de code dans le format modulaire(maintenable,réutilisable et neat codes) et n'ai pas utilisé de variable de caractère du tout. Je ne pense pas qu'en étudiant C++,matlab,python,java ... pour dix jours vous seriez en mesure d'écrire des codes numériques aussi efficace que dans fortran. fortran 2003 dispose également de toutes les capacités OOP nécessaires que j'apprends maintenant.
Donc,en termes de force de langage dans l'aspect numérique fortan ne manque de rien(style modulaire,style OOP,puissantes capacités réseau, bibliothèques puissantes,compilateurs gratuits et commerciaux jusqu'à l'âge avancé, très facile à apprendre, très efficace ...). Les langages comme python / numpy possèdent la plupart de ces capacités mais manquent d'efficacité. Les langues comme C++ a également la plupart des capacités de fortran(bien que pour le calcul de tableau qui est le noyau principal du calcul numérique, vous devez importer quelques bibliothèques!!), mais peut-être qu'un programme écrit par quelqu'un comme moi dans fortran serait plus efficace qu'un programme écrit par un programmeur c++ avec plus de 10 ans d'expérience.
Enfin, je fais mes calculs numériques lourds en fortran (format modulaire ou OOP), et j'utilise python\numpy pour les calculs de petite taille(comme créer des tracés,petite taille tableau des calculs ... ).
compte tenu de l'existence de paquets de calcul scientifique comme LAPACK++, qui sont déjà fortement optimisés, le Fortran moderne n'a même pas d'avantage de performance. C++ peut avoir ses défauts, mais la performance n'en fait pas partie.
IMHO, le seul avantage qui compte vraiment est que programmer FORTRAN vous permet de réutiliser plus facilement un grand nombre de codes et de bibliothèques FORTRAN existants. Et si vous avez 50 programmeurs FORTRAN à portée de main pour un projet et un laps de temps limité, allez-vous d'abord leur enseigner tout le C++, ou allez-vous accepter de les laisser utiliser leur langue préférée?
avec l'émergence de la métaprogrammation de template-meta (surtout templates d'expressions), C++ atteint la Ligue de FORTRAN dans les calculs numériques, donc vitesse ne devrait pas être un problème plus maintenant. Cependant, il y a encore des choses à dire sur d'autres sujets:
Pro FORTRAN: les personnes âgées pourraient le savoir mieux que C++.
Contra FORTRAN: c'est un dégoûtant, vieux, et surtout abandonné la langue, c'est déjà obsolète le moment où vous commencez votre projet. Celui qui apprend la programmation maintenant, est très peu probable d'apprendre FORTRAN, de sorte que vous pourriez courir dans les problèmes de recherche de programmeurs pour le projet plus tard.
Pro C++: c'est relativement moderne, avec des compilateurs qui s'améliorent encore à pas de géant. Il vous permet d'écrire très expressif code.
Contra C++: Certains de ces message d'erreur du modèle vous fera pleurer.