数値計算ガラパゴス
物理等の数値計算の世界は未だにFORTRANが主流だったりする。理由はいくつかあると思うが私が思うに、一つはライブラリの移植が進んでいない。もう一つが偉い人達がFORTRANから移動しようとしない(のでそれに伴い需要が出てライブラリメンテやコンパイラの開発が未だに進む)。
まあそんなわけでC言語やC++ライブラリ整備が進んで世代が一回りしたらFORTRANが滅びる可能性もあるけどまあ当分先でしょうね。
でまあ何が言いたいかというと、最近、FORTRANのソースをC++に移植する外注をだした。正確にいうとF2CでC言語に翻訳されたソースを綺麗にするという外注をだした。C言語になおされているならそれでいいではないか?と思う人もいるかも知れないがそれでは大抵ダメである。FORTRANとC言語ではアーキテクトが違う。そのまま翻訳したのでは効率の悪いコードになる。あと、そのまま翻訳なので内容が暗号に等しい。メンテはほぼ無理。
時間があれば自分でやったのだが他の業務も多いので外注に出した。で、最近送られてきてびっくり。ラップしただけで中身がそのまんまだった。
とまあそんな事件(?)があったのだが、きれいにする&C++に最適化するというのは具体的にどうするか?ちょっとそのあたりを整理してみた。
- FORTRANの配列が1から始まるのでC++では0から始まるようにかえる。
- よくわからんがF2Cだと整数型が全部longになるので特に必要がなければintにする。
- FORTRANの関数(?)はすべて参照渡しなのでF2Cのコードはすべてポインタ渡しになってしまうので値渡しや参照渡しに返る。
- gotoが乱立するので不要なgotoを消す。
- 変数名は一文字とか乱立するのでちゃんと名前を付ける。
- FORTRANにない基本ライブラリがC++にはあるので有効活用する。
多分こんなところだろうか。とりあえずこの方針で頑張ってもらってみます。