FORTRAN 90 vs C++ – une perspective éducative

Original: http://www.cts.com.au/compare

par John Prentice
Voici une note que je viens d’envoyer au Président d’un département de physique qui exige des étudiants de première année prendre un cours de programmation offert par le département d’ingénierie. Ce cours a traditionnellement enseigné Fortran77, mais il y a maintenant une poussée sur de l’école d’ingénieur pour passer à l’enseignement de C++. Comme d’habitude, les arguments étant rassemblés tournent autour de critiques du Fortran 77 par des gens qui sont trop hors du toucher de connaître grand-chose sur Fortran 90. Dans les deux cas, on m’a demandé par l’un de la faculté de physique principal de contribuer mes deux cents worth sur quelle langue ils devraient enseigner. La note ajoutée est celui que j’ai envoyé et il résume notre expérience de l’entreprise avec C++ et certains de nos sentiments au sujet de Fortran 90. D’autres peuvent trouver cela intéressant.
=== ma note pour le département de physique
Il a été mentionné pour moi que l’école du génie envisage de changer Eng 120 pour enseigner C++ au lieu de Fortran et que vous étaient sollicitant des observations à ce sujet en ce qui concerne les étudiants en physique. Même si je ne suis pas associé à l’Université, je voulais apporter mes pensées, qui proviennent d’un commercial, mais aussi une perspective de recherche.
Comme vous le savez Quetzal Computational Associates se spécialise dans la science computationnelle. Nous avons actuellement des projets en physique informatique, sciences de la terre et l’agriculture pour des clients aussi divers que les compagnies de déchets dangereux et les sociétés céréalières ainsi que les clients incluent les laboratoires DoE et DoD. Au cours de l’année dernière, nous avons développé des méthodes numériques et les codes fondés sur eux pour la modélisation des flux de contaminants dans les milieux poreux, modélisation de la mécanique des structures de résonance sonique, forage, modélisation bistatique sol pénétration radar propagation dans partiellement saturé des sols, modélisation solide dynamique à des vitesses de déformation élevées, modélisation du développement phénologique du maïs et des fèves de soja, l’ensoleillement dans le spectre de rayonnement photosynthétiquement actif de modélisation basée sur le premier principe physique de l’atmosphèreet développé des réseaux de neurones pour la détection des nuages de poussière de l’imagerie satellitaire.
Un de nos plus grands projets de physique informatique est le développement de méthodes avancées de modélisation solide dynamique basée sur le premier principe physique. Il s’agit d’un projet de plusieurs années, plusieurs millions de dollars. Ce code permet de résoudre numériquement des équations aux dérivées partielles pour dynamique solide de continuum en utilisant une technique d’élément finis volume/finis hybride couplée à des équations d’État et de modèles de comportement pour les solides et les liquides dans le calcul. Ce code et autres, avec que nous travaillons sont des codes de calcul énorme, une simulation 3d modeste prendra 100 ou plus des heures de Cray C-90 de remplir un seul calcul. De toute norme, ils sont parmi les plus grandes simulations physique informatique se faites partout dans le monde. En outre, nous sommes à l’avant-garde dans l’application du calcul parallèle à ces problèmes. Nous avons des projets pour développer des versions parallèles de nos codes pour une collection diversifiée d’ordinateurs, y compris les réseaux de stations de travail UNIX, l’IBM SP-2, le Cray T3D et le Paragon d’Intel.
Pour tous ces projets, nous employons Fortran 90 comme notre langue principale. Nous faisons un travail de développement Fortran 77, C et C++, mais nous nous éloignons de ces langues aussi rapidement que possible. Il ya plusieurs raisons pour notre choix de Fortran 90, mais tout d’abord, permettez-moi de dire un peu au sujet de pourquoi nous ne sommes pas enthousiasmés par C++. La plus grande force de C++ est sans doute la disponibilité des compilateurs C++ relativement peu coûteux et de grande qualité pour PC. Mais c’est un examen assez mineur dans notre entreprise et c’est compensé par l’énorme passif que nous avons observé avec C++. Tout d’abord nous considérons C++ comme les plus faibles de l’objet orienté langues. Objective C est un langage OOPS beaucoup plus solid et bien conçu, C++, c’est vraiment une capacité OOPS giflée sur le dessus de C. C++ est par conséquent extrêmement inefficace, incohérent, trop grandes et extrêmement difficile à programmer dans. L’expérience de nos clients reflète celle des nôtres, et en fait de nombreux laboratoires DoE et DoD trouvent que leur fuite en avant pour C++ a été une erreur horriblement cher. Je connais plusieurs C++ scientifique codage des projets dans le DoE qui a consumé en millions de dollars et des dizaines d’années-hommes, seulement pour être abandonnée parce que le code qui en résulte est extrêmement inefficace sur les deux ordinateurs séries traditionnelles et sur leurs grands supercalculateurs parallèles. Les histoires d’horreur semblable abondent dans l’ensemble de la programmation communautaire à ce stade. Bill Gates a affirmé que sa plus grande erreur dans la conception de leur nouveau système d’exploitation de NT adopte C++ pour le codage de graphiques, le code qui en résulte a pris années plus longues à écrire qu’il devrait avoir et a couru terriblement lent. OOPS est un développement massif dans la communauté scientifique de l’ordinateur, je pense que c’est juste de dire que C++ est destiné à être une mode passagère, tout comme Pascal et Ada devant elle.

La principale raison C++ a attiré l’attention dans la communauté scientifique est que Fortran 77 était une langue terriblement dépassée. Les nombreuses faiblesses du Fortran 77 ont été résolus avec Fortran 90 cependant. Fortran 90 a chaque fonction en C qui est important pour la programmation et la plupart des caractéristiques d’un objet scientifique axé sur la langue (il manque seulement héritage et c’est probablement aller à ajouter en Fortran 2000). Cependant, contrairement à C et C++, Fortran 90 est conçu pour générer des codes exécutables qui sont hautement optimisé et ainsi courir très vite. Pointeurs en est un exemple. Pointeurs font partie intégrante de la programmation C et C++ et parce que le compilateur ne peut pas déterminer si un pointeur est un alias, il est impossible de déterminer les dépendances interprocédurale. Il en résulte une dégradation sensible d’optimisation et des vitesses d’exécution extrêmement lente (pour les codes plus scientifiques, C et C++ généralement produisent du code qui est généralement plus lent que les codes de Fortran 90, basés sur les points de repère que nous et autres avons fait d’un ordre de grandeur). Fortran 90 pointeurs sont conçus pour donner la fonctionnalité des pointeurs, mais avec des restrictions qui éliminent les questions telles que l’aliasing. D’un point de vue programmation, cependant, un point encore plus important est que Fortran 90 a des moyens plus naturels d’exprimer la fonctionnalité nécessitant, C et C++, des pointeurs d’exprimer. Pour cette raison, Fortran 90 est un langage naturel plus au programme et le temps requis pour le débogage des codes est une fraction de celle requise par C et C++ (C++ est beaucoup pire que C, fourni vous employez vraiment un paradigme OOPS, puisque vous vous trouvez passer beaucoup de temps de débogage qui montent et descendent des arbres de l’héritage). Un autre point important est que le temps nécessaire pour apprendre le Fortran 90 est beaucoup moins que le temps d’apprendre le C ou C++.
Fortran 90 a un autre avantage majeur sur C ou C++. Calcul scientifique moderne et l’informatique en général, se dirige vers l’utilisation des ordinateurs parallèles. Même les PC et les stations de travail viennent maintenant avec plusieurs processeurs, parallélisme est donc quelque chose que tout le monde d’un comptable pour un physicien rencontre maintenant. Cependant, un problème majeur dans la programmation des ordinateurs parallèles est le modèle de mémoire linéaire qui est inhérent à tous les langages de programmation procédurales, à l’exception singulière de Fortran 90. Un modèle de mémoire linéaire est celle qui suppose que les éléments consécutifs d’un tableau soient suivent dans la mémoire. Il s’agissait d’une hypothèse raisonnable sur les ordinateurs traditionnels, mais il est totalement incorrect sur un ordinateur parallèle. Seulement Fortran 90 a abordé ce problème et soutien langage standardisé pour le parallélisme. Ce soutien comprend la syntaxe de tableau et de nombreux éléments intrinsèques pour opérations de tableau variant entre les opérations de réduction comme des sommes de tableau et opérations de matrice. Avec l’utilisation de la surcharge d’opérateur Fortran 90 et le polymorphisme, on peut considérablement étendre le nombre d’opérations qui évitent tout recours sur le modèle de mémoire linéaire. Le fait que Fortran 90 s’est éloigné un modèle linéaire de mémoire est la principale raison qu’il est devenu la base pour tant de données parallèles, par exemple Vienne Fortran, Fortran D, artisanat et haute Performance Fortran. La disponibilité des dialectes parallèle de données du Fortran 90 est un facteur particulièrement important en faveur de Fortran 90. Par exemple, les compilateurs de haute Performance Fortran, sont maintenant à venir sur le marché pour pratiquement toutes les machines là-bas (y compris les réseaux de stations de travail) et l’écriture de codes parallèles dans cette langue sont simple. Une importance particulière est qu’un code de Fortran 90 en High Performance Fortran est extrêmement simple et codes rédigés en High Performance Fortran peuvent être exécutés inchangés sur un compilateur Fortran 90 (à l’exception d’une construction de HPF, le forall, qui est mise en Fortran 95).
Mon opinion est que les scientifiques doivent aujourd’hui de connaître plusieurs langues ou paradigme informatique. Et je pense qu’il est tout à fait raisonnable que les élèves apprennent C++ avant l’obtention de leur diplôme, mais encore plus important, c’est qu’ils apprennent la programmation MATLAB et un système d’algèbre informatique tels que l’érable ou Macsyma. Mais la question est ce qu’étudiants de première année doivent apprendre comme langue maternelle et pour que je recommanderais Fortran 90 haut la main. C’est un meilleur langage pour la programmation scientifique et est à la fois plus facile à apprendre et à utiliser que les solutions de rechange. Il est également beaucoup plus susceptible d’être les élèves de langue vont être employant leur emploi sur le repére et c’est la plus prometteuse en train d’élaborer pour la programmation des ordinateurs parallèles.
Dr John K Prentice, Quetzal Computational Associates, 3455 Main Ave., Suite 4, Durango, CO 81301-0201
Télécopieur : 970-382-8981 E-mail:john@quetzalcoatl.com.

Comments are closed.