一部の科学的環境では、ほとんどの開発者がそのイディオムしか知らないため、多くのレガシーコードと関連する経験があるため、FORTRANなしではうまくいかないことがよくあります。そして率直に言って、high performanceプログラミングには他の多くのクロスプラットフォームオプションはありません(C++がタスクを実行しますが、構文、ゼロから始まる配列、およびポインターは一部の人々と互換性がありません)。
では、新しいプロジェクトを想定してみましょうmust Fortran 90を使用しますが、最新のコンパイラ(Intel ifortと互換性がありますが、Sun/HP/IBMコンパイラ)
だから私は常識として広く知られているものを課すことを考えていますが、私の環境ではまだ標準ではありません:
implicit none
など.#ifdef DEBUG
)より多くのチェックと可能なすべてのインテルコンパイラチェック(配列の境界、サブルーチンインターフェイスなど)を使用これらすべての目標は、信頼できる、保守可能なモジュール式のコードを作成することです。一方、多くのレガシーコードでは、再利用性は重要な目標ではありませんでした。
オブジェクト指向のFortran、契約によるプログラミング(アサーション/前提条件など)に関するリファレンスを探したところ、大規模なプロジェクトに関わっていない人が行った醜く古くなったドキュメント、構文、および論文、そして死んだプロジェクトしか見つかりませんでした。
このテーマに関する適切なURL、アドバイス、参考資料/本など
私の5セント。
Fortran Wiki は良い出発点です。最新のFortranを使用したプログラミングのさまざまな側面に関する記事があります。ユニットテスト、デバッグ、汎用プログラミングなど。Fortran2003標準のコンパイラサポートについても非常に興味深い table が利用可能です。 (Blklightがすでに言及したように、2003の機能の一部はコンパイラーでは使用できません。異なるコンパイラーを比較するのに適した場所です。)
私はC++の人ですが、いくつかのF90プロジェクトで立ち往生しています。
このコースを読むことをお勧めします: Introduction to Modern Fortran 。 M. S. B.は有名な "Fortran 95/2003 Explained"に言及しましたが、この本は十分に大きく、詳細に満ちています。逆に、上記のコースは開始するのに適しています。また、リバプール大学の インタラクティブなFortran 90プログラミングコース もご覧ください。
あなたを驚かせるかもしれないFortran 90プログラムの誤り 。このページのタイトルはそれ自体が物語っています。 =)
うーん...ブックマークにも PSTI RESEARCH LECTURE SERIES "SCIENTIFIC COMPUTING WITH FORTRAN 95" へのリンクがあります。試してみる。
J.F.セバスチャンはF2Pyに言及し、Pythonを教えるためのアドバイスを与えました。私は彼の意見に同意します。 Pythonは私の好きな言語ではありません。しかし、それを教えるには十分に便利です。すでに述べたプリプロセッサ(その多くはPythonで書かれています)とF2Pyは合格しません SCons -最新のソフトウェア構築ツール。
追伸先週、lulu.comで電子書籍を購入しました。 Fortranでの科学的ソフトウェア開発 Drew McCormack著。良い読書になるといいのですが、突然時間がありません。著者はForpedo(Fortran Wikiで言及されているFortran固有のプリプロセッサーの1つ)の開発者であり、Objective-CおよびPythonプログラミング)に関する多くの本やチュートリアルの著者です。
OPは、Fortranは高性能の科学計算に耐えるには厄介なものであるという態度を落とし、熱狂的にそれに没頭することをお勧めします。 OPがそのかなり否定的な考え方を保持している場合、彼/彼女のFortranコーディングキャリア全体が苦労することになります。そして、実際には、FortranでC++ではできないことは何もできないので、本当にやりたくない場合は、なぜ迷惑をかけるのでしょうか。
OPの箇条書きのリストには、過去30年間Fortranで作業してきた多くの人が行っていないことが何もありません(Fortran 90コンパイラーが広く利用可能になったためですが、それ以前にもいくつかあります)。はい、計算科学者がいます。ポインタを理解する科学ソフトウェアエンジニアは、多くの(見当違いの)人が0からカウントを開始し、グローバル変数は悪いことであることを知っています。
@MSBと同様に、現代のFortranの機能と特徴に関する情報源として、Metcalfet alの本をお勧めします。そして、@ MSBのように、CまたはC++を使用して、Fortranの同等物またはより優れたアプローチがあるライブラリーを完全にラップするという考えに眉をひそめます。 2003標準とC機能との相互運用性は、インテルFortranに実装されているため、Cライブラリを直接呼び出すことがこれまでになく簡単になっています。
私はOPに関して、モジュラーコードを持つこと自体が目標であることを指摘します。目標は、正しい、検証可能で検証可能な、堅牢で信頼性の高いコードです。モジュール性はこれらの目標の達成をサポートする1つの方法ですが、それは戦術であり、エンドポイントではありません。モジュール化せずに10 ^ 6行のコードで構成される(前述の意味で)優れたプログラムを記述できると思っていれば、モジュール化を気にする必要はありません。
さて、OPがすでにやろうとしていることや言われたことを追加するためのいくつかの具体的なヒント:
そして最後に、最近では、Fortranプログラムとプログラマーは、オブジェクト指向プログラミングからのアイデアよりも、関数型プログラミングからのアイデアに、よりよく情報を得ていると思います。
Fortran 90/95/2003は、モジュール、プライベート/パブリック、ユーザー定義型などを追加して、必要に応じてモジュール式コードを記述できるように設計されています。Fortran2003では、オブジェクト指向の機能がさらに導入されています。 Fortran 90が安全に直接Fortran配列を動的に割り当てる「割り当て」を行っている場合、Cに接続してmallocを追加しても意味がありません。プロシージャ(関数とサブルーチン)をモジュールに配置し、モジュールを「使用」すると、インターフェイスがチェックされます。添え字境界検査など、コンパイラーの多くのデバッグ/検査オプションを使用できます。
これらおよびその他の機能について学ぶための優れた本:Metcalf、Reid、Cohenによる「Fortran 95/2003 Explained」。 FORTRAN 77を書き続けるのではなく、最新のFortranの最良の機能を学ぶことは間違いなく良い考えです-必要であれば、コーディング標準/ガイドを書いてください。
ここ数年で、同僚と私は、オブジェクト指向、モジュラー/再利用可能、一貫したコードスタイルなど、言及した多くの機能を備えた、現代のFortranでゼロからかなり大きな計算ライブラリを開発しました(私たちは素晴らしいことをしていません)ただし、単体テストでの作業-それを実行する必要があります)、そしてそれらすべてをラップして、C++、Pythonなどのインターフェースを提供します。ここにある他の人たちは、私が推薦するすべての本とリンク(およびそれ以上)を指摘しているので、それらを繰り返すことはしません。私が投稿する理由は、これらのことをFortranで実行して素晴らしいものを作成することは本当に可能であるということです。
また、Fortran 2003標準の多くがすべての主要なコンパイラに実装された後、あなたがどれだけ幸運に始められるかについても指摘します。これらの機能の多く(たとえば、手順ポインタ)が非常に役立ちます。
私は急いでいるので、合理的な文章ではなくチェックポイントの形でこの回答をする場合は許してください。
あなたのテキストに関するいくつかのコメント:
(これはすべて「明白な」現代のプログラミングの仮定に思えるかもしれませんが、レガシーFortranの世界では、これらのほとんどは典型的なプログラマーのワークフローにおける大きな変更です)
現代のFortranの世界でさえ、これらの仮定のいくつかは疑わしい...覚えておいてください、Fortranプログラマーはプログラマーではありません(私はこれを凝縮された形で繰り返しています。私はこれをこのフォーラムで何度も書いています)が、エンジニア、科学者等々。彼らにとって(私たちの?)コードは目標ではなく、単なるツールです...プロのプログラマーにとってのコードはすべてです。彼らは「それを超える」ものは何もありません...したがって、彼らはそれをとても大切にしています。私たちのエンジニアにとって、それは私たちが望む結果を得るための単なる手段です...それを念頭に置いて、優れたプログラミング実践は後で支払うものの、明白な必要がないところに彼らを主張する必要はありません。
すべての目標は、信頼できる、保守可能なモジュール式のコードを作成することです。一方、典型的なFortranでは、モジュール性は主な目的ではないことが多く、元の開発者が非常に賢く、それ以来コードが変更されていない場合にのみ、コードは信頼できます。 (私はここで少し冗談を言っていますが、それほどではありません)
誰かがかつて言った、そしてあなたはそれがどれほど真実であるか信じられないでしょう:
「一時的な修正以外に永続的なものはありません」。
この件に関する適切なURL、アドバイス、参考資料/本はありますか?
上記のいくつかを考えます。
また、この回答を書いているときに、高いパフォーマンスがわかります。マークは非常にいい答えを投稿しましたが、私はそれにほぼ同意します...標準の接着についてもう少し詳しく説明します。
また、私の推奨事項は、この質問をcomp.lang.fortranにも確実に投稿することです。私はここではるかに質の高い回答を得ることができるので、ここで(20以上のFortranプログラマはいないと思います) stackoverflow全体)。
一部の欧州連合委員会が自由に発行した一連のコード作成ガイドラインがありました。これらはこの回答の一部として非常に役立ちますが、残念ながら、Googleのクイック検索でそれらを見つけることができず、十分に調べる時間もありません。トピックで検索してみてください...多分あなたはより幸運になるでしょう。
F2003でのオブジェクト指向プログラミングに関するこの2部構成のシリーズを見つけました。ここにたくさんの素晴らしいものがあります:
パート1: http://www.pgroup.com/lit/articles/insider/v3n1a3.htm
パート2: http://www.pgroup.com/lit/articles/insider/v3n2a2.htm
すばらしい例があり、すべてを非常に明確に説明しています。
大規模なFortranプログラムをOOで参照したい場合は、www.mohid.comにアクセスしてください。これはGPLです。最新のFortranを作成することに同意しますOOもはや十分ではありません。関数型プログラミングの概念を組み込むことは必須です。私はこれについていくつかの調査を行っており、欠けている主な機能はラムダ(匿名)関数だと思います。反対側では、並列化を行う方が良いと思いますOpenMPではなくMPIルート。