63 votes

Écrire du code Fortran robuste et "moderne"

Dans certains milieux scientifiques, souvent, vous ne peut pas aller sans FORTRAN comme la plupart des développeurs sais seulement que l'idiome, et il y a beaucoup de code hérité et l'expérience. Et franchement, il n'y a pas beaucoup d'autres de la croix-plate-forme options de haute performance de la programmation (C++ serait faire le travail, mais la syntaxe, zéro de départ les tableaux et les pointeurs ne sont pas compatibles avec certaines personnes).

Ainsi, supposons un nouveau projet doit utiliser Fortran 90, mais je veux construire la plus moderne de l'architecture du logiciel en dehors de ça, tout en étant compatible avec la plupart des compilateurs récents (Intel ifort, mais aussi y compris le Soleil/HP/IBM compilateurs)

Donc je pense que d'imposer des trucs qui est largement connu sous le nom commun de bon sens, mais pas encore un standard dans mon environnement:

  • variable globale interdit, pas de gotos, pas de saut étiquettes, implicit none, etc.
  • "programmation orientée objet" (modules avec les types de données et liées à des sous-routines)
  • modulaire/réutilisables fonctions, bien documenté, bibliothèques réutilisables
  • les assertions/conditions/invariants (mis en œuvre à l'aide du préprocesseur états)
  • les tests unitaires pour tous (la plupart) des sous-routines et des "objets"
  • un intense "mode debug" (#ifdef DEBUG) avec plus de contrôles et de toutes les Intel compilateur vérifie possible (les limites du tableau, sous-routine interfaces, etc.)
  • uniforme et appliquées lisible style de codage, en utilisant le code d'outil de traitement des aides.

Le but de tout est d'avoir confiance, maintenable et du code modulaire. Alors que, dans beaucoup d'anciens codes de ré-utilisabilité n'était pas une cible importante.

J'ai cherché autour de références à propos de l'orienté objet Fortran, programmation par contrat (assertions/conditions/etc.), et trouvé seulement laid et documents périmés, de syntaxes et de documents faites par des gens sans projet à grande échelle de la participation, et la mort de projets.

Toutes les bonnes adresses Url, des conseils, des références, des livres sur ce sujet?

46voto

Je suggère que l'OP abandonne l'attitude que le Fortran est quelque chose de désagréable à subir, en haute-performance scientific computing et plonge dans il avec enthousiasme. Si l'OP conserve plutôt dédaigneux état d'esprit alors l'ensemble de sa Fortran codage de carrière va être une lutte. Et vraiment, il n'y a rien que vous pouvez faire avec Fortran que vous ne pouvez pas faire avec le C++, alors à quoi bon si vous ne voulez vraiment pas ?

Il n'y a rien à l'OP de la liste des balles que beaucoup d'entre nous qui ont travaillé avec Fortran pour les 30 dernières années n'a pas fait (depuis la généralisation de la disponibilité des compilateurs Fortran 90, mais certains de avant de trop). Oui, il y a de calcul des scientifiques, des scientifiques et des ingénieurs en logiciels, qui comprennent les pointeurs, sachez que beaucoup de (erronée), les gens commencent à compter à 0 et que les variables globales sont UNE MAUVAISE CHOSE.

Comme @MSB je le recommande Metcalf et al'livre comme une source d'information sur les capacités et les caractéristiques de moderne Fortran. Et, comme @MSB, je lève un sourcil à l'idée d'utiliser le C ou C++ pour envelopper les bibliothèques pour laquelle il y a soit des Fortran équivalents ou meilleurs approches entièrement. Le 2003 de la norme de l'interopérabilité avec les C de fonctionnalités, qui sont mis en œuvre dans Intel Fortran, il est plus facile que jamais à l'appel de bibliothèques C directement.

Je prendrais le problème avec l'OP que d'avoir le code modulaire est un but dans son propre droit. Les objectifs sont, à mon avis, corriger, vérifiables et de traitement pouvant être validé, robuste, fiable code. La modularité est une façon de soutenir la réalisation de ces objectifs, mais c'est une tactique, pas une fin en soi. Si je pensais que nous pourrions écrire des bon (dans ce sens) les programmes comprenant 10^6 lignes de code sans modularité, je ne vous embêtez pas avec la modularité.

OK, maintenant certains des conseils concrets à ajouter à ce que l'OP déjà l'intention de le faire ou qui a été dit:

  • utilisation de Types sur les déclarations de variables pour faire respecter la précision dont vous avez besoin; ne laissez pas cela dans les options du compilateur ou de conjectures sur ce que ce compilateur peut faire sur ce processeur;
  • utiliser les opérations de matrice dans la mesure du possible plutôt qu'explicite des boucles, ce qui contribue à rendre le code plus sûr, parfois au détriment de la performance, mais vous avez besoin de vérifier cela au cas par cas;
  • écrire une fonction PURE;
  • ne dépendent pas de pré-traitement ou d'autres non-Fortran approches de l'exactitude du code (etc), écrire vos affirmations et les conditions préalables (etc) en Fortran; les pré-processeurs (etc) ne seront pas survivre aussi longtemps que bien écrit en Fortran programmes et sera un obstacle majeur à la portabilité, maintenant et dans l'avenir;
  • si vous avez accès à Intel Fortran obtenir l'accès à Intel MKL (et de l'IPP) et l'utilisation de ces bibliothèques plutôt que d'écrire votre propre code;
  • plan de lutte contre OpenMP et MPI pour la parallélisation, ils s'Fortran très bien; oh, et un plan pour aller parallèle dès que possible, c'est beaucoup plus amusant que de la programmation en série;
  • cet ensemble de Fortran Normes de Codage est un bon début, mais probablement pas plus que ça, la 1ère édition de Code Complet a beaucoup plus sur le Fortran (77) la programmation de l'édition actuelle, mais la plupart de ses conseils peuvent être appliquées quelle que soit la langue que vous écrivez.

Et, enfin, ces jours, je pense que le Fortran programmes et les programmeurs sont mieux informés par les idées de la programmation fonctionnelle, que les idées de la programmation orientée objet.

39voto

Wildcat Points 4786

Mes 5 cents.

Le Fortran Wiki est un bon point de départ. Il contient des articles sur les différents aspects de la programmation à l'aide modernes Fortran. Unité de tests, le débogage, la programmation générique, etc. Également très intéressant de table sur la prise en charge du Compilateur pour le langage Fortran 2003 Standard est disponible. (Comme Blklight déjà mentionné quelques-uns 2003 fonctionnalités ne sont pas disponibles dans les compilateurs. C'est un bon endroit pour comparer les différents compilateurs.

Je suis une C++ gars, mais je suis coincé avec une F90 projets.

Je vous recommande de lire ce cours: Introduction à la modernisation de Fortran. M. S. B. mentionné célèbre "Fortran 95/2003 Expliqué," mais ce livre est assez grand et plein de détails. Le cours mentionné ci-dessus, au contraire, est un bon endroit pour commencer. Jetez aussi un oeil à Un Interactive Fortran 90 Cours de Programmation de l'Université de Liverpool.

Des erreurs dans le Fortran 90 Programmes Qui Pourraient Vous Surprendre. Cette page titre parle de lui-même. =)

Hmmm... j'ai aussi dans mes favoris un lien quelconque avec PSTI de la RECHERCHE CONFÉRENCE de la SÉRIE "CALCUL SCIENTIFIQUE AVEC FORTRAN 95". Lui donner un essai.

J. F. Sebastian mentionné F2Py et donner les conseils pour enseigner Python. - Je m'abonner à son avis. Python n'est pas ma langue préférée. Mais c'utiles de l'enseigner. En plus de cette déjà mentionné les préprocesseurs (écrit en Python) et F2Py ne pas passer SCons - logiciel moderne de la construction de l'outil.

P. S. La semaine dernière j'ai acheté un e-book lulu.com. Scientifique de Développement Logiciel en Fortran par Drew mc cormack. J'espère qu'elle sera bonne lecture mais tout à coup, n'ont pas le temps. L'auteur est le développeur de Forpedo (l'un des Fortran spécifiques préprocesseurs mentionné dans le Fortran Wiki) et auteur de nombreux livres et des didacticiels sur l'Objective-C et de programmation Python.

13voto

M. S. B. Points 19509

Fortran 90/95/2003 est conçu de telle sorte que l'on peut écrire du code modulaire, si l'on veut, via l'ajout de modules, privé/public, les types définis par l'utilisateur, etc. Fortran 2003 introduit les nouvelles fonctionnalités orientées objet. Il ne fait aucun sens pour vous connecter à C pour ajouter malloc quand Fortran 90 a "allouer" à directement allouer dynamiquement des tableaux Fortran de façon plus sécuritaire. Placer vos procédures (fonctions et sous-routines) dans les modules et "à l'aide" les modules vont provoquer les interfaces de contrôle. On peut utiliser les nombreux debug / options de contrôle des compilateurs, comme indice de la vérification de limites.

Un excellent livre pour tout savoir sur ces et d'autres caractéristiques: "Fortran 95/2003 Expliquée" par Metcalf, Reid et Cohen. C'est vraiment une bonne idée d'apprendre les meilleures caractéristiques de moderne Fortran plutôt que de continuer à écrire FORTRAN 77 -- si nécessaire, écrire les normes de codage / guide.

4voto

ldigas Points 19740

Je suis un peu pressé, donc pardonnez-moi si je fais cette réponse sous la forme de points de contrôle au lieu de raisonnable phrases.

  • essayez adhérant à la norme (Fortran est un langage normalisé, et en adhérant à la norme fonctionnalités de la langue, et en évitant les fournisseurs des extensions spécifiques, vous aurez un portable entre les plates-formes de programme, pour lequel vous pouvez être sûr que le compilateur ne donnera pas de problèmes). Je ne sais pas où j'ai téléchargé ma copie, mais je suis sûr que vous pouvez télécharger la dernière version (attention; de nombreuses fonctionnalités de fortran 2008 ou 2003 pour que la matière ne sont pas encore mises en œuvre dans le currect compilateur, bien que beaucoup sont presque là aujourd'hui ... Cray étant l'un) à partir de J3 de la page
  • pour toutes questions concernant ce qui précède, je recommande chaleureusement comp.lang.fortran groupe usenet - pas seulement quelques très de personnes bien informées (par exemple. mr. Richard Maine ... seront probablement disposés à répondre à toutes les questions de conformité au standard, vous pouvez demander, avec beaucoup de détails, si demandé gentiment ... en va de même pour beaucoup d'autres), mais il a aussi des personnes qui ont travaillé sur les grands problèmes et certanly savoir et être prêt à donner des conseils sur votre sujet
  • livres - en plus de tous ceux déjà mentionnés (Metcalf, Reid et Cohen livre a aussi ma recommandation, aussi "Fortran 2003 manuel" en Maine et d'autres ...), essayez de trouver vous-même une copie de Stephen J. Chapman est "Fortran 95/2003 pour les scientifiques et les ingénieurs" ... prend un peu trop confiants de se tenir sur certains sujets, mais encore, dans l'ensemble un très beau livre, avec beaucoup de "bonnes pratiques de programmation" mentionné)
  • aussi, je ne sais pas si vous avez comed à travers celui-ci "orientée Objet de la programmation Fortran 90/95"

Quelques commentaires sur votre texte:

( Cela peut tout semble "évident" de programmation moderne hypothèses, mais dans un héritage fortran monde, la plupart de ces sont de gros changements dans le typique programmeur de flux de travail )

Même dans un cadre moderne fortran monde, certaines de ces hypothèses sont discutables ... rappelez-vous, fortran programmeurs ne sont pas des programmeurs (je répète ce sous une forme condensée; j'ai déjà écrit sur ce forum afin de plusieurs fois), mais les ingénieurs, les scientifiques et ainsi de suite. (Nous?) le code n'est pas un but, mais seulement un outil ... pour les programmeurs professionnels de code est tout; ils n'ont rien "au-delà" ... par conséquent, ils chérissent tant. Pour nous, les ingénieurs, c'est simplement un moyen d'obtenir le résultat que nous voulons ... avec cela à l'esprit, bien que les bonnes pratiques de programmation de payer plus tard, ne pas nécessaire d'insister sur là où il n'y a pas de nécessité évidente pour eux.

Le but de tout est d'avoir confiance, maintenable et du code modulaire. Alors que, dans le typique fortran, la modularité n'est souvent pas un objectif principal, et le code est digne de confiance que si le développeur d'origine était très intelligent, et le code n'a pas été changé depuis ! (je suis un peu en plaisantant ici, mais pas beaucoup)

Quelqu'un a dit une fois, et vous ne croiriez pas combien il est vrai:
"Il n'y a rien de plus permanent que d'une solution temporaire".

Toute bonne URL, des conseils, des références, des livres sur le sujet?

Compte tenu de plusieurs ci-dessus.

Aussi, lors de l'écriture de cette réponse, je vois Haute Perf. Mark a posté une très belle réponse, avec qui j'avais le plus d'accord ... il va un peu plus dans les détails à propos de la standard adhérant.

Aussi, ma recommandation serait de poster cette question aussi sur la composition.lang.fortran ... je comprends que vous pouvez obtenir beaucoup plus de la qualité des réponses là, puis ici (je crois que il n'y a pas plus de 20 ou fortran programmeurs sur l'ensemble de stackoverflow).

Il y avait un ensemble de code de la rédaction de lignes directrices publiées librement par certains de l'union européenne comité; elles seraient très utiles dans le cadre de cette réponse, mais malheureusement, je ne peux pas les trouver dans ma recherche rapide sur google, et je n'ai pas eu le temps de regarder en profondeur. Essayez de faire une recherche sur le sujet ... peut-être que vous aurez plus de chance.

3voto

Brenton Huggins Points 11

Je viens de trouver cette série en deux parties sur la programmation orientée objet avec F2003. Beaucoup de choses intéressantes ici:

Partie 1: http://www.pgroup.com/lit/articles/insider/v3n1a3.htm

Partie 2: http://www.pgroup.com/lit/articles/insider/v3n2a2.htm

Il a d'excellents exemples et explique tout très clairement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X