Quels sont les avantages de moderne Fortran ont plus de C++moderne?
Je suis en train de décider entre le Fortran et C++ pour une application dans le calcul scientifique. Il n'est pas clair pour moi si Fortran a encore des avantages par rapport à d'autres langues quand il s'agit de la performance. Par exemple, je crois que depuis le Fortran met en application stricte de l'aliasing, de meilleures optimisations pourrait en être faite par le compilateur lors de la comparaison de C avant de C99. Je ne suis pas sûr de la façon dont C++ s'inscrit dans ici.
Toute orientation?
- "Le FORTRAN, le "trouble infantile"--, maintenant près de 20 ans, est complètement inadéquat pour n'importe quel ordinateur que l'application que vous avez à l'esprit aujourd'hui: il est maintenant trop maladroit, trop risqué et trop coûteux à utiliser." -- Edsger Dijkstra, 1975.
- Je dois aller avec ce que Jacques a dit, vraiment. Si elle a des avantages, ils sont hors de propos aujourd'hui.
- McNellis - Dijkstra était un peu un cremudgeon. Si vous pouvez me trouver une citation de Dijkstra, où il vient en complément d'une langue, je vais accepter que comme un argument.
- a été, en plaisantant, décrit comme "le moyen le plus intelligent de la mauvaise utilisation d'un ordinateur". Je pense que la description d'un grand compliment, parce qu'elle transmet toute la saveur de la libération: il a aidé un certain nombre de nos plus talentueux frères humains dans la pensée auparavant impossible pensées." - Apparemment, il aimait Lisp...
- "L'Arrogance de la science informatique est mesurée dans les nano-Dijkstras" -- Alan Kay, 1997.
- Juste un peu.
(Whatever (his (attitude (might (have (been, (he (does (have (a (fair (point (against (LISP (syntax)))))))))))))))
.- Celle-ci est plus le cas : "Quand j'ai lu le premier manuel, le manuel Lisp 1.5, publié en 1961, je ne pouvais pas en croire mes yeux. C'était une très mauvaise langue. Maintenant c'est devenu le standard de facto de l'IA de la communauté, qui souffre maintenant de Lisp, la façon dont le reste du monde a souffert de Fortran"
- Je ne peux pas m'empêcher de me demander lequel de ces deux citations, qui est venu en premier... 🙂
- Un indice important est que l'on a donné dans le passé et l'autre pas. La réponse exacte est que l'on vous a donné est à partir de 1972, et celui que j'ai donné à partir de 1985.
- Ok, donc Dijkstra en 1985 a été de critiquer Lisp sur le Lisp 1.5 manuel de 1961? Comment en temps opportun.
- Je pense que les langages de programmation un peu comme Churchill a pensé quand il a dit que "la Démocratie est le pire régime de tous, à l'exception de tous les autres" (ou quelque chose comme ça).
Vous devez vous connecter pour publier un commentaire.
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 maintenant disparu. Pas plus les numéros de lignes et des colonnes spéciales (ils peuvent brûler en enfer).
Fortran a été très utilisé dans l'ingénierie des cercles depuis maintenant 50 ans. Qui vous donne deux avantages si vous travaillez dans ces milieux. Tout d'abord, ces gens-là soins beaucoup d'optimisation. Que signifie compilateurs Fortran ont tendance à avoir les meilleurs optimiseurs de autour de. La langue elle-même est beaucoup plus optimisable que Cish langues, grâce à son absence d'aliasing.
Le deuxième avantage est que le Fortran est prise en charge bibliothèque de calcul 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èvent pas scientifique, de l'ingénierie, ou de nombreux calculs en général, ni de la ci-dessus sera un gros problème pour vous, alors vous pouvez être mieux de regarder ailleurs.
restrict
. Mais +1.L'autre problème majeur est la courbe d'apprentissage qui est très grand pour le C++ et exceptionnellement faible pour le Fortran (90 et plus tard). Fortran est comme MATLAB, avec des opérations comme l' ...
matmul( matmul(transpose(B), D), B )
norm2(x)
call gesvd(A,S,u,vt)
Fortran a aussi des pointeurs, la mémoire dynamique, défini par l'utilisateur des types de données etc.
Il est bien pris en charge par les principaux fournisseurs (Intel/Soleil/IBM/Cray/IGP/NAG, etc.), open source (gfortan/g95) les communautés et les développeurs de la bibliothèque numérique/Api comme PETSc, MPI etc.
Diable la nouvelle norme (Fortran 2008) a même co-tableaux pour faire de la programmation parallèle, sans la nécessité pour MPI/OpenMP et certains compilateurs Fortran déjà le soutenir (g95 et Cray).
Fondamentalement, il a toutes les qualités requises pour le calcul numérique, est plus facile que MATLAB, est normalisé, gratuit, évolutif (avec MPI/OpenMP et co-tableaux), produit ultra-rapide/code parallèle.
Pour les objets numériques, rien ne vaut Fortran mais malheureusement pour autre chose tout beats Fortan. Donc, si vous êtes un scientifique avec un travail en toute sécurité et ne le faites numérique/HPC le calcul puis coller avec Fortran, autrement, d'apprendre et d'utiliser le C++, il est largement utilisé à des fins non les logiciels de calcul numérique.
Fortran permet à toute la gamme des opérations et également les opérations sur le tableau des sections. Il y a des classes C++ pour les tableaux, mais je ne pense pas que vous pouvez vous référer à une tranche tels que x(:,2:,1:N3:2) aussi facilement que dans le Fortran. Cela permet d'exprimer des algorithmes assez concise.
La commodité de Fortran du tableau des opérations s'étend à des tableaux de types dérivés. Supposons que vous disposez d'un tableau de dates:
type date
integer :: mois,jour,année
type de fin date de
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 faits précédemment au sujet de Fortran -- "vieux et dégoûtant" -- sont biaisées et devraient être actualisés en conséquence. Permettez-moi de au contraire. À mon avis, le format libre de Fortran 90, c'est mieux que la syntaxe de C et C++, avec les accolades et des points-virgules. De les laisser sortir ou mal de les mettre dans peut provoquer des erreurs en C et C++ qui n'ont pas d'équivalent dans le Fortran.
Fortran a été fortement optimisé pour les mathématiques (en particulier de la matrice) opérations.
C++ a été optimisé pour l'utilisation des objets.
Qui est plus important pour vous.
Comme indiqué ci-dessous C++ a une optimisation de la matrice de la bibliothèque.
Mais Fortran du tout le but est l'optimisation de processus mathématiques (en particulier les opérations matricielles). Le fait que ces optimisations sont intégrés dans la fondation de la langue (plutôt que d'une bibliothèque) et ont environ deux décennie longueur d'avance sur la recherche au cours de C++, j'en doute (mais ne savez pas par un fait) que, dans ce domaine Fortran va gagner haut la main.
Avantages de fortran95 et au-dessus de c++(2003):
en bref, si votre programme ou d'application est purement scientifique calcul utiliser fortran 95 et au-dessus, si le calcul de quelques chiffres 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 le Fortran est qu'il est facile à apprendre, propre (très modulaire), et donc bien adapté à un non-programmeur dont le principal souci est de faire hautement optimisé des calculs numériques. Bien que l'égalité d'optimisation peut être réalisée en c++, (peut-être même à une plus grande mesure), il faut beaucoup de instrinsic de la compréhension, à la réalisation de ces le niveau d'optimisation. Quand il s'agit de calculs de matrice, hors de la boîte un compilateur Fortran normalement hors d'effectuer un compilateur c++. Je voudrais aussi ajouter que le Fortran a des mots clés qui sont spécifiquement conçus pour aider le programmeur à serrer les performances d'un numérique de routine. C++ a cela aussi, mais pas dans la mesure Fortran n'.
Un autre avantage est que le Fortran est pas le système d'exploitation ou de l'architecture spécifique. En d'autres termes, le code Fortran vous écrivez sur un système d'exploitation ou de l'architecture devrait facilement port à l'autre, où il y a un compilateur Fortran.
Un autre avantage est que moderne Fortran est normalement compatible avec les anciennes bases de code de Fortran. Et le code de base qui a été construit au fil des ans dans le Fortran est énorme et extrêmement sophistiqué (le plus souvent faite 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. De nombreuses autres fonctions intégrées dans le Fortran sont conçus pour permettre à ce confort. C++ offre principalement des blocs de construction pour ce faire, et cela nécessite un peu de transpiration juste pour lire un fichier de données b/c vous avez besoin de savoir quelque chose au sujet de séparateurs (où Fortran permet de spécifier le délimiteur).
Au-delà de ça, je pense pas que des avantages. Plus rien d'autre serait les manipulations de chaînes, ou de l'algorithmique de base d'opérations pour que le c++ comme langage, et en général c'est des compilateurs, sont mieux adapté et le plus souvent un meilleur rendement. Un bon programmeur compétent sera probablement préférer c++ comme elle/il devrait comprendre comment optimiser numérique de routine dans une manière qui pourrait probablement faire mieux que une Fortran compilé routine. En outre de bonnes fiable compilateurs Fortran ne sont pas aussi faciles à trouver que les bonnes fiable compilateurs C++.
Je suis nouveau en 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 modèle modulaire dans une dizaine de jours par l'étude de l'Chapman livre. C'est un an et j'ai écrit à propos de quatre milliers de lignes de code en format modulaire(maintenable,réutilisable et soigné codes) et n'avez pas utilisé variable de caractère à tous. Je ne pense pas que par l'étude de C++,matlab,python,java ... pour dix jours, vous pouvez écrire des codes numériques aussi efficace que dans le fortran. fortran 2003 a aussi tout le nécessaire de la programmation orientée objet capacités de qui j'apprends maintenant.
Donc, en termes de langage de la force dans l'aspect numérique fortan ne manque pas de quelque chose(modèle modulaire,OOP style,de puissantes capacités puissantes bibliothèques, libre et commercial jusqu'à daté de compilateurs,très facile à apprendre, très efficace ...). Des langages comme python/numpy a le plus de ces fonctionnalités, mais le manque d'efficacité. Les langages tels que C++ a également la plupart des capacités de fortran(bien que pour le tableau de calcul qui est la principale base de calcul numérique, vous devez importer certaines bibliothèques!!), mais peut-être un programme écrit par quelqu'un comme moi en fortran qui serait plus efficace que celle écrite par certains programmeur c++ avec+ de 10 ans d'expérience.
Enfin je fais de mon lourds calculs numériques en fortran(modulaire ou de la programmation orientée objet format), et l'utilisation de python\numpy pour la petite taille des calculs(comme la création de parcelles,la petite taille de la matrice de calculs ... ).
À mon humble avis, le seul avantage qui compte vraiment, c'est que la programmation FORTRAN permet de vous faciliter la réutilisation d'un lot de l'existant code FORTRAN et les bibliothèques. Et si vous avez 50 FORTRAN programmeurs à portée de main pour un projet et un laps de temps limité, vous allez d'abord tout leur apprendre le C++, ou allez-vous accepter de les laisser utiliser leur langue préférée?
Compte tenu de l'existence de l'informatique scientifique paquets comme LAPACK++, qui sont hautement optimisé déjà, moderne Fortran ne dispose même pas d'un avantage de performance. C++ peut avoir ses défauts, mais la performance n'est pas l'un d'eux.
Avec l'émergence du modèle de la méta-programmation (surtout l'expression de modèles), C++ atteint FORTRAN de la ligue dans les calculs numériques, de sorte vitesse ne devrait pas être un problème plus. Cependant, il y a encore des choses à dire à propos d'autres questions:
Pro FORTRAN: Les personnes âgées connais peut-être mieux que le C++.
Contre FORTRAN: C'est dégoûtant, vieux, et en grande partie abandonné la langue, c'est déjà obsolète le moment de démarrer votre projet. Celui qui apprend à programmer maintenant, est très rare d'apprendre FORTRAN, de sorte que vous pouvez exécuter dans des problèmes à trouver des programmeurs pour le projet par la suite.
Pro C++: Il est relativement moderne, avec les compilateurs encore s'améliorer dans d'énormes progrès. Il vous permet d'écrire assez expressif code.
Contra C++: Certains de ces modèle des messages d'erreur va vous faire pleurer.
m1 * m2 * m3
sans avoir une matrice temporaire de l'objet - c'est ce que TMP est pour.m3 = m1 * m2
est vraiment dur à battre. Otoh, que, cette expressivité décompose le moment où vous faites quelque chose de mal et le compilateur aboie à vous dans un de 23,8 k message d'erreur. La question est de savoir si vous souhaitez mettre en place avec ceci ou cela, de peser un de ces plus ou de l'autre. Personne, mais les OP peuvent le faire.