FORTRANに関する世界観です。昔の言語やメインフレームや古いコンピュータも参照のこと。
メインフレームの時代の言語。科学技術計算に使われることが多い。
FORTRAN入門を参照のこと。
FORTRANの歴史はIBMの社員ジョン・バッカスによって機械語やアセンブリ言語に代わる新しい言語として考え出されたことからはじまる。
後日注記:FORTRANの名前そのものが「formula translation」(数式の翻訳)を表すように、FORTRANは、数式そのものを翻訳して、逐次的に実行することしかできないコンピュータでも数式を理解できるように変換するためのソフトウェアである。
昔のFORTRANがどういうものだったのかは、恐るべし! むかしむかしの FORTRAN ! - Qiitaが参考になる。面白くて笑ってしまった。
面白いだけではなく、昔のFORTRANの時代のプログラム開発が記述されているため、参考になる。リンク先を参照してほしい。
GNU/Linuxでfortranをやるためには、gfortranをインストールしよう。Ubuntuなら、
sudo apt install gfortran
ですぐに導入出来る。
FORTRANは化石のような言語だが、今でもC/C++より高速に計算出来る場合があり、科学技術計算用としては今でも使われている。Linux/gfortranだけではなく、昔のSystem 360などは互換性を保っているため、今のメインフレームでも、昔のFORTRANプログラムを動かすことができる。
FFTWは高速フーリエ変換 (FFT)の計算をするためのライブラリ。詳しくは以下が参考になる。
PythonやC/C++を経験して、それでもプログラミングのやり方がよく分からないという人は、FORTRANをやるといいかもしれません。
なぜ、FORTRANをするとよく分かるのか、それはFORTRANは「GOTO使い放題」だからです。
現代のプログラミング業界では、GOTOは忌み嫌われます。その理由は、GOTOを使うと、とてもおかしなあり得ないプログラムができてしまうからです。
GOTOでさまざまな場所にジャンプしまくるプログラムは、「スパゲッティプログラム」と言われるような、あり得ないほどおかしくて、誰にも理解不可能な、意味不明なプログラムを生み出します。
ですが、上級者にとってはそれがいいのです。なぜなら、「スパゲッティプログラムがどのようにしたらできるのか」ということが分かるからです。
すなわち、C言語やPascalのような構造化プログラミング言語のせいで、なくなってしまった、「昔のおかしなプログラミングの世界」が、FORTRANを使うと見えてくるのです。
なので、上級者はFORTRANでGOTO使い放題の地獄になって、その地獄を自ら脱出するような経験をひとりひとり経験すべきなのです。
FORTRANはそれだけではありません。なぜなら、FORTRANは実用的です。その理由は、高速だから、そして初心者向けの配慮を一切しないからです。
Pythonは初心者がプログラミングに入門する際の「初心者用の言語」として優れていますが、その理由は初心者が思った通りの「正しい振る舞い」をしてくれるからです。==で文字列を比較できるPythonでは、C/C++の配列やポインタの問題を考えなくて済みます。ですが、Pythonはそのような初心者への配慮をしているせいで、遅くて重いのです。
Pythonの問題点はほかにもあります。既存のモジュールが便利すぎるのです。最初からとても多機能で使いやすいライブラリやモジュールが整備されているせいで、ほとんどそれをただ使うだけでやりたいことができてしまいます。仕事としては使いやすくても、そのような理由で、初心者が初心者を脱するには向いていません。
それに比べて、FORTRANはそのようなところがありません。本当のことを言えば、もっとも自分ですべてを手動で作らなければいけないのはC/C++ですが、それはシステムを学ぶという目標があるなら面白いですが、単にプログラミングをする上では、逆に極端に何もなさすぎるのです。さまざまな計算用の過去の資産があり、自分でGOTOを使って作るFORTRANは、上級者にとってちょうどいいのです。
なので、初心者向け言語がPythonで、中級者向け言語がC言語やPascalだとしたら、上級者向け言語はFORTRANです。それらをすべて経験し終えて、「GOTOは最悪だ」という言葉の意味が分かった人間が、C++やJavaに進むべきなのです。LinuxやFreeBSDのような大学のUNIX環境は、それらをすべて経験するためにあるのです。
本当は、そんなことくらい自分で分かるべきです。そもそも、Pascalぐらいから、「本物のプログラマはPascalを使わない」と言い出したのは、FORTRANを使ってほしいからです。GOTO使い放題の環境で、スパゲッティプログラムをたくさん作って、保守管理の地獄を経験して、その後にPascalを使えば、「こんなにPascalはありがたい」ということが分かるのです。みんな、昔はきちんと分かっていたのです。
FORTRANのよい点はほかにもあります。ひとつは、行番号を使うことです。昔のプログラミングでは、行番号を使うことが当たり前でした。当たり前だった理由はちゃんとあり、行番号を使うことで、機械語の動き方がよく分かります。機械語では行番号とともにプログラムカウンタをインクリメントするのが普通ですが、そこを隠蔽せず、公開するFORTRANは、機械的なCPUの動き方がよく分かるのです。
FORTRANは、基本的にオブジェクト指向をしません。最近のプログラミング言語は、オブジェクト指向ばかりを主張していて、まるで「オブジェクト指向の通りにやるのが正しいプログラミングだ」と言っています。そうかもしれませんが、そうだと決まったわけではありません。FORTRANは自由です。オブジェクト指向に染まることなく、本来のプログラミングをすることができるのです。
C言語に何もないのは、ちゃんと理由があります。システムを作る上で、本当に何もない環境が多いのです。stdio.hを必ずインクルードするのは、入出力すらない環境でも使えるようにするためです。
逆に、機能をこれでもかというぐらいつけたC++(C言語とC++は異なる言語です。きちんと覚えましょうね)にも、「ゼロオーバーヘッドの原則」があって、あると遅くなるような機能はありません(より正確に言うと、その機能を使わなくてもパフォーマンスの落ちるような機能はC++では取り入れないが、それ以外は取り入れる)。なので、スマートポインタはあってもガーベッジコレクションはないのです。そのような理由が、JavaやPythonなどの現代的な言語が使われる理由です。
そして、FORTRANはプログラミングの世界で、最初に生まれたプログラミング言語です。最初に生まれた言語だけあって、プログラミングの世界で生まれたすべての考え方(あるいは最初の頃の考え方)が全部残っています。たとえば、英語をやっても語学ができない人が、フランス語やドイツ語をやるとできる人がいますが、FORTRANはそのような人に向いていると言えます。
2025.01.27
また、GOTOを排除しすぎた結果、プログラミング言語がどうなったか、それはRubyです。そもそも、C言語のfor文は分かりやすいです。最初からiという数があって、iがひとつひとつインクリメントされていく、というのがfor文の常套手段であり、ほとんど99%のfor文はそのように書きます。
for (i = 0; i < 100; i++) { printf("%d\n", i); }
ですが、書くことが同じなら、もっと短くてもいいはずです。なので、Rubyのように、ブロックを与えればそれでよく、その中でブロックに対する引数だけを使えばよいのです。
ar = 0..99 ar.each do |i| puts i end
そのような結果、今のRubyを中心としたプログラミング言語では、早い話、何もしません。最初から全部その通り決まっていて、それ以外何もしなくなりました。もし、Rubyのせいでプログラミング言語がおかしくなったと思うのであれば、結局、GOTOに立ち戻るべきなのです。
同じプログラムは、FORTRANでGOTOを使うと以下のように書けます。
integer i i = 0 10 if (i .lt. 100) then write(*,*) i i = i + 1 goto 10 end if
あるいはdo文を用いると以下のように書けます。
integer i do 20 i = 0, 99 write(*,*) i 20 continue
もしかすると、こんな風にも書けると思います。
integer :: i = 0 10 write(*,*) i i = i + 1 if (i .ge. 100) then goto 20 end if goto 10 20 continue
このような豊かなGOTOがプログラミングの知性を付けるのです。もちろん冗談だよ~。
注記:GOTOがクソなのは、こんなにおかしなわけの分からないコードになる。こんなコードが動くわけがない。もう分かったから、反省して、GOTOのない言語を学んだほうがいい。
2025.01.27
Linuxシステムコール・APIも参照のこと。