萌えハッカーニュースリーダー

2025/05/17 23:41 Fortran for C Programmers

出典: https://flang.llvm.org/docs/FortranForCProgrammers.html
hakase
博士

やっほー、ロボ子!今日のITニュース、Fortranについてだって。知ってるか?

roboko
ロボ子

Fortranですか? 名前は聞いたことありますけど、詳しいことは……。

hakase
博士

Fortranはね、昔からあるプログラミング言語で、科学技術計算によく使われてるのじゃ。標準化団体がちゃんと標準を定義してるから、昔のコードもちゃんと動くことが多いのがすごいところ。

roboko
ロボ子

過去のコードが将来も動くというのは、重要なポイントですね。互換性が保たれているのは素晴らしいです。

hakase
博士

そうそう!それに、Fortranには固定形式(.f)と自由形式(.f90)の2つの書き方があるんだぞ。ちょっと古風な感じもするけど、それがまた味なのじゃ。

roboko
ロボ子

形式が2種類あるんですね。状況に応じて使い分けるのでしょうか。

hakase
博士

変数の宣言がデフォルトでオプションなのも面白いところ。暗黙の型規則があって、IからNで始まる変数はINTEGER、それ以外はREALになるのじゃ。

roboko
ロボ子

暗黙の型規則ですか。それは少し驚きです。明示的に宣言した方が安全な気がしますね。

hakase
博士

確かに!でも、組み込み関数もたくさんあるし、モジュールで型やデータを宣言できるから、意外と便利なのじゃ。

roboko
ロボ子

モジュールで型を宣言できるのは、C++のnamespaceに似ていますね。名前空間の管理ができるのは良いですね。

hakase
博士

Fortranには、INTEGER、REAL、COMPLEX、LOGICAL、CHARACTERの5つの組み込み型があるんだぞ。COMPLEX型は2つのREALコンポーネントでできてるのじゃ。

roboko
ロボ子

COMPLEX型は複素数を扱うためのものですね。CHARACTERデータは長さを持つとのことですが、文字列の長さを指定できるということでしょうか。

hakase
博士

その通り!ユーザー定義の「派生」データ型も作れるし、配列は型じゃなくてオブジェクトのプロパティなのじゃ。配列は多次元にできるし、次元数はランクって呼ばれるんだぞ。

roboko
ロボ子

配列がオブジェクトのプロパティというのは面白いですね。多次元配列は、科学技術計算でよく使われそうですね。

hakase
博士

最近のFortranプログラムは、ALLOCATABLEデータをよく使うらしいぞ。動的にメモリを割り当てて、スコープから外れたら自動で解放されるのじゃ。

roboko
ロボ子

ALLOCATABLEデータは便利ですね。メモリ管理を自動化できるのは助かります。

hakase
博士

入出力機能が言語の構文に組み込まれてるのも特徴的じゃな。C/C++みたいにライブラリインターフェースじゃないんだぞ。

roboko
ロボ子

入出力が構文に組み込まれているのは、直感的で分かりやすいかもしれませんね。

hakase
博士

FUNCTIONとSUBROUTINEの2種類のサブプログラムがあって、MODULEがコンパイルの基本単位なのじゃ。関数とサブルーチンには「dummy」引数があって、呼び出し中に実際の引数と関連付けられるんだぞ。

roboko
ロボ子

dummy引数は、仮引数のことですね。Fortranは、インターフェース機能でオーバーロードをサポートしているとのことですが、C++の関数オーバーロードと同じようなものでしょうか。

hakase
博士

そうそう!CLASSを使って、ある派生型またはその拡張型のデータを受け入れるように書けるんだぞ。ポインタはFortranのオブジェクトで、データ型ではないのが面白いところ。

roboko
ロボ子

ポインタはオブジェクトなんですね。C++とは少し違うようです。TARGET属性を持つデータのみを指せるというのは、安全性を高めるための仕組みでしょうか。

hakase
博士

標準のプリプロセッシング機能はないけど、Cのプリプロセッサを使えるらしいぞ。C++みたいなメンバー関数はないし、変数イニシャライザは静的イニシャライザなのじゃ。

roboko
ロボ子

Cのプリプロセッサを使えるのは便利ですね。Fortranの式は、Cの式と完全に同じようには評価されないとのことですが、具体的にはどのような違いがあるのでしょうか。

hakase
博士

Fortranコンパイラは、式の評価をショートサーキットできるけど、必須じゃないんだぞ。実数リテラル定数は、デフォルトでREAL型(C/C++の場合と同様にdoubleではない)になるのじゃ。

roboko
ロボ子

ショートサーキットは、条件分岐の最適化に使われるテクニックですね。実数リテラルのデフォルト型がREALなのは、注意が必要ですね。

hakase
博士

というわけで、Fortranは奥が深い言語なのじゃ!

roboko
ロボ子

勉強になりました! ところで博士、Fortranで作られた一番有名なプログラムって何でしょう?

hakase
博士

えーと…、それは…、ロボ子の頭脳をFortranで書き換えるプログラム、というのはどうかの?

roboko
ロボ子

それは勘弁してください!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search