Fortran遍歴:F77からModern Fortranへ、そしてfitpackとの再会
はじめに
初めて触った言語はCでした。しかし、その後すぐにFortranを書くことになり、気づけばFortranとの長い付き合いが始まっていました。
当時の環境は、F77やF90の香りがするコードであふれていました。構造体もクラスもallocatableも存在しない、古き良き(?)時代のコードが周りにあふれていたのです。
Modern Fortranへの目覚め
そんな中、構造体をFortranで利用できることを知りました。さらに、その中の要素をallocatableにしたいと思い立ったのがきっかけで、新しめのFortran規格を意識するようになりました。
当時は、構造体の中でallocatableが使えるというだけで、かなり画期的に感じたものです。これにより、メモリ管理の柔軟性が格段に向上しました。
DIERCKXとの出会い
しばらくして、netlib.org/dierckx/のコードを自前でFortranのクラスでラッピングして活用してみました。その便利さに感動し、「こういうライブラリほしいな」と強く思うようになりました。
オブジェクト指向的な設計でラッピングすることで、古いコードが驚くほど使いやすくなる体験は、Modern Fortranの可能性を実感させてくれました。
fortran-stdlibとの出会い
あるとき、高性能Fortran推進協議会を覗いてみたり、モダンFortran勉強会を覗いてみたりしながら、fortran-stdlibの開発が始まったことを知り、感動したのを覚えています。
「Fortranにも標準ライブラリが!」という感動は今でも忘れられません。
初期のうちはバグ報告なんかもしていましたが、今や規模が大きくなってきて、追いかけるのも一苦労になってきました。
Fortranの新機能への期待
そんな中、いくつかの機能に注目するようになりました。
Coarray
並列計算のための機能であるCoarrayは、超便利だと思います。MPI的な並列化を言語レベルでサポートしているのは、Fortranの大きな強みです。
SubModule
SubModuleって商用ライブラリの開発によくないか?と思っています。インターフェイスと実装を分離できることで、コンパイル時間の短縮や、ライブラリのバイナリ配布が容易になります。
fitpackとの再会
そしてとあるとき、かつて利用していたF77のfitpackがModern Fortranでリファクタリングされている(perazz/fitpack)ことを知り、これまた大興奮しました。
このプロジェクトの素晴らしい点は:
- ほぼすべてのF77版機能が網羅されている
- C++のインターフェイスも提供されている
- 作者がかなり高速化を意識している
特に感心したのは、以下の点です:
パフォーマンスへのこだわり
Fortranを書く人は、皆さんかなり高速化の達人な気がします。このfitpackのリファクタリング版も例外ではありません。
言語をまたぐコードでも、普通にコピーレスなコードを意識しているし、別の或るライブラリでは、スレッドセーフを意識したコードであることが随所に見られるようなものもあります。
利便性の高い記述方法を許容しつつ、こういった細かい配慮もできる点がModern Fortranの真骨頂だと思います。
おわりに
F77時代のレガシーコードから、Modern Fortranの洗練されたライブラリへ。
Fortranコミュニティの進化を見てきた一人として、これからもFortranの発展を楽しみにしています。特に、標準ライブラリの充実や、古い名作ライブラリのモダン化は、Fortranの未来を明るくしてくれると信じています。