Dans certains environnements scientifiques, vous ne pouvez souvent pas aller sans Fortran, car la plupart des développeurs ne savent que l'idiome, et il y a beaucoup de code hérité et d'expérience associée. Et franchement, il n'y a pas beaucoup d'autres options multi-plateformes pour Programmation haute performance (C++ ferait la tâche, mais la syntaxe, les tableaux de démarrage zéro, et les pointeurs ne sont pas compatibles avec certaines personnes).
Ainsi, supposons que un nouveau projet doit Utilisez Fortran 90, mais je souhaite construire l'architecture logicielle la plus moderne, tout en étant compatible avec le plus récent compilateurs (Intel Ifort, mais également comprenant les compilateurs Sun/HP/IBM)
Je pense donc à imposer des choses qui sont largement connues comme un bon sens commun, mais pas encore une norme dans mon environnement:
implicit none
, etc.#ifdef DEBUG
) Avec plus de vérifications et de tous les compilateurs Intel possibles possibles (limites de tableau, interfaces de sous-programme, etc.)Le but avec tout ce qui est d'avoir un code digne de confiance, maintenu et modulaire. ATTENDU QUE, dans de nombreux codes hérités, la réévaluation n'était pas une cible importante.
J'ai cherché des références sur le Fortran orienté objet, la programmation par contrat (assertions/conditions préalables/etc.), Et n'a trouvé que des documents laids et obsolètes, des syntaxes et des papiers effectués par des personnes sans implication de projet à grande échelle et des projets morts .
Toutes les bonnes URL, conseils, papier de référence/livres sur ce sujet?
Mes 5 cents.
Le wiki Fortran est un bon point de départ. Il contient des articles sur différents aspects de la programmation à l'aide Fortran moderne. Test de l'unité, débogage, programmation générique, etc. Traitement très intéressant tablea sur prise en charge du compilateur pour la norme FORTRAN 2003 est disponible. (Comme Blklight déjà mentionné, certaines fonctionnalités de 2003 ne sont pas disponibles dans les compilateurs. C'est un bon endroit pour comparer différents compilateurs.)
Je suis un gars C++ mais je suis coincé avec des projets F90.
Je recommande de lire ce cours: Introduction à Modern Fortran . M. S. B. mentionné fameux " Fortran 95/2003 Explained ", 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 également un coup d'œil à n cours de programmation interactif de 90 9 de l'Université de Liverpool.
erreurs dans les programmes de Fortran 90 qui pourraient vous surprendre . Ce titre de page se dit sur lui-même. =)
Hmmm ... Je aussi ai dans mes favoris un lien vers PSTI RECHERCHE SÉRIE DE CONFÉRENCES " SCIENTIFIQUE AVEC COMPUTING FORTRAN 95 " . Essaie.
J.f. Sebastian a mentionné F2py et donner conseil à l'apprentissage de Python. Je m'abonne à son avis. Python n'est pas ma langue préférée. Mais il est suffisamment utile pour l'enseigner. En l'addition à déjà mentionné les préprocesseurs (dont beaucoup écrit en python) et F2py ne pas passer Scons - Outil de construction de logiciels moderne.
P.s. La semaine dernière, j'ai acheté un e-book à lulu.com. Développement de logiciels scientifiques en Fortran par Drew McCormack. J'espère que c'est une bonne lecture mais soudainement n'a pas de temps. L'auteur est le développeur de FORPEDO (un des préprocesseurs spécifiques à la Fortrane mentionnés dans Fortran Wiki) et auteur de nombreux livres et tutoriels sur Objective-C et Python programmation.
Je suggère que l'OP goutte à l'attitude que Fortran est quelque chose de méchant d'être enduré dans l'informatique scientifique et les plongées scientifiques hautes performances avec enthousiasme. Si OP conserve que l'état d'esprit plutôt reconditionnel, sa carrière de codage de Fortran est une lutte. Et vraiment, il n'y a rien que vous puissiez faire avec Fortran que vous ne pouvez pas faire avec C++ alors pourquoi déranger si vous ne voulez vraiment pas?
Il n'y a rien dans la liste des balles de l'OP que beaucoup d'entre nous qui travaillaient avec Fortran depuis 30 ans n'ont pas fait (depuis la disponibilité généralisée des compilateurs de Fortran 90, mais une partie de cela avant alors). Oui, il existe des scientifiques informatiques et des ingénieurs en logiciels scientifiques, qui comprennent les pointeurs, sachent que beaucoup de personnes (égarées) commencent à compter à 0 et que les variables mondiales sont une mauvaise chose.
Comme @MSB, je recommanderais METCALF et al 's livre comme une source d'informations sur les capacités et les caractéristiques de Modern Fortran. Et, comme @MSB, je soulevais un sourcil à l'idée d'utiliser C ou C++ pour envelopper des bibliothèques pour lesquelles il existe soit des équivalents de mandache, soit de meilleures approches. L'interopérabilité de la norme de 2003 avec des caractéristiques C, qui sont implémentées dans Intel Fortran, facilitent la tâche que jamais d'appeler des bibliothèques C directement.
Je prendrais un problème avec OP que le code modulaire est un objectif à part entière. Les objectifs sont, je suggère, correct, vérifiable et validable, du code robuste et fiable. La modularité est une façon de soutenir la réalisation de ces objectifs, mais c'est une tactique et non un point final. Si je pensais que nous pouvions écrire de bons programmes (dans les sens précédents), composé de 10 ^ 6 lignes de code sans modularité, je ne me soucierais pas de la modularité.
Ok, maintenant quelques conseils concrets pour ajouter à quel point l'opte a déjà l'intention de faire ou a été informé:
Et enfin, ces jours-ci, je pense que les programmes et les programmeurs Fortrans sont mieux informés par des idées de la programmation fonctionnelle que des idées de la programmation orientée objet.
Fortran 90/95/2003 est conçu de sorte que l'on puisse écrire un code modulaire, si l'on veut, via l'ajout de modules, des types définis par l'utilisateur privé/public, etc. ForTran 2003 introduit des fonctionnalités orientées d'objet. Cela n'a aucun sens de se connecter à C pour ajouter MALLOC lorsque FORTRAN 90 a "allouer" à allouer directement de manière dynamique des tableaux de fortrane de manière plus sûre. Placer vos procédures (fonctions et sous-programmes) dans les modules, puis sur "Utilisation" Les modules feront vérifier les interfaces. On peut utiliser les nombreuses options de débogage/de vérification des compilateurs, telles que la vérification des bornes de l'indice.
Un excellent livre pour en savoir plus sur ces fonctionnalités et d'autres: "Fortran 95/2003 a expliqué" par Metcalf, Reid et Cohen. Il est certainement une bonne idée d'apprendre les meilleures caractéristiques du Fortran moderne plutôt que de continuer à écrire Fortran 77 - si nécessaire, d'écriture de normes de codage/guide.
Au cours des dernières années, un collègue et j'ai développé une bibliothèque de calcul assez importante à partir de zéro entran moderne avec de nombreuses fonctionnalités que vous mentionnez - Orientation de l'objet, modulaire/réutilisable, style de code cohérent et plus (nous n'avons pas fait de super Job avec des tests unitaires, mais doit-il y arriver), puis enveloppez tout cela pour fournir des interfaces avec C++, Python et plus encore. D'autres ici ont indiqué que tous les livres et liens que je recommanderais (et plus), donc je ne les répète pas. Ma raison de poster est juste de dire que cela est vraiment possible de faire ces choses avec Fortran et de créer quelque chose de grand, alors soyez-vous.
Je vais également souligner à quel point vous devez commencer une chance après une grande partie de la norme Fortran 2003 a été mise en œuvre dans tous les compilateurs principaux. Vous trouverez beaucoup de ces fonctionnalités (les pointeurs de procédure par exemple) seront très utiles.
Je suis assez pressé, alors pardonnez-moi si je fais cette réponse sous forme de points de contrôle au lieu de phrases raisonnables.
Quelques commentaires sur votre texte:
(Ceci peut tous sembler des hypothèses de programmation modernes "évidentes", mais dans un monde de la Héritage pour le fortrange, la plupart d'entre eux sont de gros changements dans le flux de travail de programmeur typique)
Même dans un monde fortrain moderne, certaines de ces hypothèses sont discutables ... N'oubliez pas que les programmeurs de Fortran ne sont pas des programmeurs (je le répète sous forme condensée; j'ai déjà écrit cela sur ce forum tant) mais des ingénieurs, des scientifiques etc. Pour eux (US?) Le code n'est pas un objectif, mais simplement un outil ... au code des programmeurs professionnels est tout; Ils n'ont rien "au-delà" ... Par conséquent, ils le chérissent tellement. Pour les ingénieurs américains, il est simplement un moyen d'obtenir le résultat que nous voulons ... avec cela à l'esprit, bien que de bonnes pratiques de programmation payent plus tard, ne pas l'insister sur eux où il n'y a pas de besoin évident pour eux.
Le but avec tout ce qui est d'avoir un code digne de confiance, maintenu et modulaire. ATTENDU QUE, dans la modularité typique, la modularité n'est souvent pas un objectif principal et que le code est digne de confiance que si le développeur original était très intelligent et que le code n'a pas été changé depuis! (Je suis un peu plaisant ici, mais pas beaucoup)
Quelqu'un a dit une fois, et vous ne croyez pas à quel point c'est vrai:
[.____] "Il n'y a rien de plus permanent qu'un correctif temporaire".
Toute bonne URL, conseils, papier de référence/livres sur le sujet?
Donné plusieurs ci-dessus.
En outre, en écrivant cette réponse, je vois haute perf. Mark a posté une très belle réponse, avec laquelle je suis surtout d'accord ... cela va un peu plus en détail à propos de l'adhérence standard.
En outre, ma recommandation serait de publier définitivement cette question également sur Comp.lang.fortran ... Je rassemble, vous pouvez obtenir beaucoup plus de réponses de qualité là-bas, puis ici (je crois qu'il n'y a pas plus de 20 programmeurs Fortrans sur ensemble de Stackoverflow).
Il y avait un ensemble de directives écrivantes de code publiées librement par un comité de l'Union européenne; Ils seraient très utiles dans le cadre de cette réponse, mais malheureux, je ne peux pas les trouver dans ma recherche de Google rapide et je n'ai pas le temps de regarder de manière approfondie. Essayez de la recherche ... Peut-être que tu auras mieux chanceux.
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 de grands exemples et explique tout très clairement.
Si vous souhaitez regarder un grand programme Fortran in OO Go sur www.mohid.com. C'est GPL. Je suis d'accord que d'écrire Fortran moderne OO= n'est plus suffisant, il est obligatoire d'incorporer des concepts de programmation fonctionnelle. Je fais des recherches à ce sujet et je pense que la principale caractéristique manquante est la fonction Lambda (anonyme). De l'autre côté, je pense que faire la parallélisation, il vaut mieux aller le MPI route plutôt que OpenMP.