12/04/05 03:02:15.16
COMMON文は、メモリー領域の共有だから、並べた順番に意味があって、名前には意味がない。
subroutine1
COMMON/A,B,C/
subroutine2
COMMON/C,B,A/
とある時、A=C、B=B、C=Aとなる。
これにたいし、MODULEの場合は元々の名前が引用される側でそのまま使われるので、最近の新参言語に慣れた人や初心者の直観像に近い。
COMMON文は元々メモリーの一滴が血の一滴だった頃に、メモリー領域をぎりぎりまで共有して使うための機能。なれれば気持ちいい。
ところが最近の言語しか知らないちびっ子は大域変数と混同してトンチンカンで間抜けな寝言をほざいている。
手動で領域確保とガベージコレクションをやっているようなもんと言えばありがたがるかもしれんw
とはいえ、最近はCOMMON文は、コンパイラの自動最適化の障害になるので使わなくて済むなら、
使わないほうが速いプログラムが出来るという理由で避けたほうがいいとされる。
EQUIVALENCEも同じく最適化の障害になるので、TRANSFER関数を使えと言われている。
MODULEは、F77までは裸でサブルーチンを並べていたのを、箱に入れておくような物。ありがたい点は、分割コンパイルしても
引数の型チェックなどが可能になること。C言語みたいに自分でインターフェースを書かなくても、コンパイラが自動でヘッダーファイルに
相当するものを作ってくれる。MODULEは便利なので、サブルーチンの箱と思って使うとよろしい。
また、これにより大域最適化も昔より用意になっていると言われている。
オブジェクト指向は、引数の型チェックを緩める仕掛けというのが最大の使い道の気がするw