アカウント名:
パスワード:
物理屋です。毎日Fortranを使ってます。他にはsh, C, Rubyがまあまあ書けます。さいきんのFortranはいろいろなことができるので使っていて楽しいです。gfortranとg95というfreeで使いやすいコンパイラもありますし。物理か化学をやるんなら、知っていて損はない言語なんじゃないでしょうか。
Fortranについて思いついたことを箇条書きにしてみます。* implicit none は使えよ* module は common の代わりに使うな* いいかげん大域変数(的なもの)を使うのはやめろ* 自由形式 (free form) で書け* 構造体 (type) を使え* 配列の範囲が自由 a(1:N), a(0:N-1), a(-N+1:N), a(3,0:N
同じく物理や化学で計算を生業にしている者です(某日本最大の計算機を作るプロジェクトでもお世話になっています)。20年近くやってきたゴリゴリの「高速計算屋」です。
* implicit none は使えよ→同意。ケアレスミスをふせげる。
* module は common の代わりに使うな* いいかげん大域変数(的なもの)を使うのはやめろ* module, interface を使えばsubroutoneの引数の不整合によるバグが避けられる→物理や化学の計算だと、一番重要な配列。たとえば、その系の原子の持つ情報は 大域変数で持つ方がプログラミングしやすいと思う。 同時にそれはパラメータスタディするときに可変となり、allocateするものだから、* 動的にallocateした配列は基本的にはsubroutineの最後で解放される→これは変だということになる。
* 自由形式 (free form) で書け* 配列の範囲が自由 a(1:N), a(0:N-1), a(-N+1:N), a(3,0:N-1,0:N-1) とか* 配列の演算が楽* 複素数がはじめから使える* 数学関数が豊富。C99と同じ数はあると思う→同意。FortranはFORTRAN77から見ると、かなり進歩した言語なのです。
* 構造体 (type) を使え→現状の並列計算環境においては、自動並列化に失敗することがあるので、typeは 今ひとつ信用できません。
* オブジェクト指向プログラミングしろ。Frotran2003ではもっと機能が強化される→まあ、そうですね。ただ、我々がFortranを使う理由は「大きな計算機で最適化されていて 速い」からであって、柔軟なプリ・ポスト処理にはrubyなどで対応したらいいと思っています。
* 拡張子を .F にしておけばCプリプロセッサが使える* make(1)にはFCとかFCFLAGSとかFortran用の機能もあるんだよ* autotoolsにも* LAPACKとかFFTWとかライブラリが豊富→これはそのとおり。結局、Cを使う理由はシステムコールを多用したりするプログラムであって、 ゴリゴリの数値計算はFortranで書いて、Cプロプロセッサで環境、計算条件に応じて コンパイルしなおせるようにしておけば十分だと。
* ポインタも使えるけど、そんなに必要ない。リスト構造を作るときぐらいかな* 基本、参照渡しだから→はい、そのとおり。あと、我々はとにかく不器用でも速いプログラムを書きたいので、 自動ベクトル化の阻害因子になるポインタの必要性はあまりないです。
* OpenMPで並列化できる→同意。というか、速い数値計算プログラムを楽に書く環境としてFortranは進歩してきたのだから当然。
* command_argument_countとget_command_argumentとでコマンドライン引数も扱えるようになった→まあ、数値計算プログラムは硬派なので、引数はパラメータを列記したファイルで十分なのですがね。
* スパコンで使える。Cも使えるけど→結局、ハイエンドの数値計算サーバのコンパイラのチューニングを、何言語で行うか、 ということに尽きるかと。現状では、Fortranがデフォルトです。
* いろいろな言語に挑戦してみてはどうか→物理や化学、あるいは流体などの数値計算以外の専門家になるんだったら、いろんな体験が必要でしょう。 あとは、プリ・ポストのためにいろんな言語は使えるほうがいいでしょう。 私は何よりFortranとrubyです。外国の人はFotranとpythonですので、国際的に活躍したければ他のものも。
という感じで、アルバイトでネット関係あるいはハードウェアにアプリケーションを書いたりする場合はともかく、数値計算屋として生きていくためにはFortranは大変便利なツールなのですね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike
さいきんのFortranは使っていて楽しい (スコア:5, 参考になる)
物理屋です。毎日Fortranを使ってます。
他にはsh, C, Rubyがまあまあ書けます。
さいきんのFortranはいろいろなことができるので使っていて楽しいです。
gfortranとg95というfreeで使いやすいコンパイラもありますし。
物理か化学をやるんなら、知っていて損はない言語なんじゃないでしょうか。
Fortranについて思いついたことを箇条書きにしてみます。
* implicit none は使えよ
* module は common の代わりに使うな
* いいかげん大域変数(的なもの)を使うのはやめろ
* 自由形式 (free form) で書け
* 構造体 (type) を使え
* 配列の範囲が自由 a(1:N), a(0:N-1), a(-N+1:N), a(3,0:N
love && peace && free_software
t-nissie
Re:さいきんのFortranは使っていて楽しい (スコア:5, 参考になる)
同じく物理や化学で計算を生業にしている者です(某日本最大の計算機を作る
プロジェクトでもお世話になっています)。
20年近くやってきたゴリゴリの「高速計算屋」です。
* implicit none は使えよ
→同意。ケアレスミスをふせげる。
* module は common の代わりに使うな
* いいかげん大域変数(的なもの)を使うのはやめろ
* module, interface を使えばsubroutoneの引数の不整合によるバグが避けられる
→物理や化学の計算だと、一番重要な配列。たとえば、その系の原子の持つ情報は
大域変数で持つ方がプログラミングしやすいと思う。
同時にそれはパラメータスタディするときに可変となり、allocateするものだから、
* 動的にallocateした配列は基本的にはsubroutineの最後で解放される
→これは変だということになる。
* 自由形式 (free form) で書け
* 配列の範囲が自由 a(1:N), a(0:N-1), a(-N+1:N), a(3,0:N-1,0:N-1) とか
* 配列の演算が楽* 複素数がはじめから使える* 数学関数が豊富。C99と同じ数はあると思う
→同意。FortranはFORTRAN77から見ると、かなり進歩した言語なのです。
* 構造体 (type) を使え
→現状の並列計算環境においては、自動並列化に失敗することがあるので、typeは
今ひとつ信用できません。
* オブジェクト指向プログラミングしろ。Frotran2003ではもっと機能が強化される
→まあ、そうですね。ただ、我々がFortranを使う理由は「大きな計算機で最適化されていて
速い」からであって、柔軟なプリ・ポスト処理にはrubyなどで対応したらいいと思っています。
* 拡張子を .F にしておけばCプリプロセッサが使える
* make(1)にはFCとかFCFLAGSとかFortran用の機能もあるんだよ* autotoolsにも
* LAPACKとかFFTWとかライブラリが豊富
→これはそのとおり。結局、Cを使う理由はシステムコールを多用したりするプログラムであって、
ゴリゴリの数値計算はFortranで書いて、Cプロプロセッサで環境、計算条件に応じて
コンパイルしなおせるようにしておけば十分だと。
* ポインタも使えるけど、そんなに必要ない。リスト構造を作るときぐらいかな* 基本、参照渡しだから
→はい、そのとおり。あと、我々はとにかく不器用でも速いプログラムを書きたいので、
自動ベクトル化の阻害因子になるポインタの必要性はあまりないです。
* OpenMPで並列化できる
→同意。というか、速い数値計算プログラムを楽に書く環境としてFortranは進歩してきたのだから当然。
* command_argument_countとget_command_argumentとでコマンドライン引数も扱えるようになった
→まあ、数値計算プログラムは硬派なので、引数はパラメータを列記したファイルで十分なのですがね。
* スパコンで使える。Cも使えるけど
→結局、ハイエンドの数値計算サーバのコンパイラのチューニングを、何言語で行うか、
ということに尽きるかと。現状では、Fortranがデフォルトです。
* いろいろな言語に挑戦してみてはどうか
→物理や化学、あるいは流体などの数値計算以外の専門家になるんだったら、いろんな体験が必要でしょう。
あとは、プリ・ポストのためにいろんな言語は使えるほうがいいでしょう。
私は何よりFortranとrubyです。外国の人はFotranとpythonですので、国際的に活躍したければ他のものも。
という感じで、アルバイトでネット関係あるいはハードウェアにアプリケーションを書いたり
する場合はともかく、数値計算屋として生きていくためにはFortranは大変便利なツールなのですね。
Re:さいきんのFortranは使っていて楽しい (スコア:1, 参考になる)
> * 動的にallocateした配列は基本的にはsubroutineの最後で解放される
> →これは変だということになる。
もちろんご存知とは思いますが、ここでポインタの出番ですね!
> * オブジェクト指向プログラミングしろ。Frotran2003ではもっと機能が強化される
> →まあ、そうですね。ただ、我々がFortranを使う理由は「大きな計算機で最適化されていて
> 速い」からであって、柔軟なプリ・ポスト処理にはrubyなどで対応したらいいと思っています。
最近、動的に多数の分子を生成するコードを書いて初めて Fortran で OOP する必要性を感じました。PC で10分~1時間程度の計算ですみましたが、もしこれを ruby 等の LL で書いてたら、この10~100倍以上の計算時間がかかるはず。多次元配列を使った多量の数値演算と、動的にオブジェクトを生成するような柔軟なモデル化の両方が必要な領域にはモダン Fortran は最適解ですね。
> * command_argument_countとget_command_argumentとでコマンドライン引数も扱えるようになった
> →まあ、数値計算プログラムは硬派なので、引数はパラメータを列記したファイルで十分なのですがね。
namelist を便利に使ってます。少々癖はありますが、自分でパラメタファイルのパーサを書くのに比べればどれほど楽なことか...
というわけで、物理、化学等々の数値計算にはモダン Fortran は最適です。学生さんは迷わず勉強して損はないと思いますよ。
# 他にも色々書きたいことがあるけど酔ってるのでとりあえず AC