32
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Fortran 撲滅論の昨日・今日・明日

Last updated at Posted at 2018-12-07

#1. Fortran 記事コメントの分類
年に一回くらい Fortran に関する記事がネットに出たりしますが、内外を問わずコメント欄には同じような感想が並びます。昔の2ch風に分類すれば、

  1. ワシも若いころ習ったよ
  2. 「最速なんでしょ?」「C++ も負けてない!」
  3. メンテしてるけど FORTRAN は糞!
  4. こんな古い言語が残っているのは恥!利用者共々さっさと撲滅せよ!
    という感じになるかと思います。

最近では今から 10 日ばかり前に reddit その他、海外サイトで "Fortran is still a thing (Fortran はまだ重要)" という記事へのコメントで似たようなやり取りがなされています。また同時期に COBOL が AWS の Lambda でサポートされというニュースで twitter のトレンド入りした時に、NHK 公式が Fotran(誤字ママ)をやっていたと tweet していました。
7d36c90e97de38eb5b5bed16379ad00e[1].png
https://twitter.com/nhk_nethistory/status/1067977072432209920

上記分類中、1. は内容に乏しく、2. は最近のコンパイラはバックエンドが共通だったりするから、Fortran 風な冗長性をもって書けば当然そうなり、3.にはコンテキストに対する誤解が往々にして見受けられます。しかし、この中で一番興味深いのは 4. の撲滅論で Fortran に限らず COBOL や古くからある言語には必ず出てくる感想ですが、論拠が飛躍していて粗雑ですが、世界中で何十年にもわたって根強く残り続ける主張になっています。

本記事では、この時間的・空間的に普遍的に存在している Fortran 撲滅論について、まず歴史的に振り返った後、どのような背景で主張されているのかを考察し、今後どのようになるかを予想してみます。なお記事中では FORTRAN (Classical) と Fortran (Modern) の表記上の区別をつけないことにして、引用などを除いて、原則 Fortran で統一することにしました。

なお撲滅論に対する善悪・功罪などの評価をするつもりはなく、また論者に対する非難・批評の意もなく、ただ撲滅論を鑑賞するにとどめます。

#2. Fortran 撲滅論の朝は早い
はじめに Fortran 撲滅論の歴史的展望を見てみます。Fortran 撲滅論は、1990 年代を境におおよそ前期と後期に分けられ、前期では Fortran をよく知る人たちが、後期では必ずしもよく知らない人たちが撲滅論を唱えていると考えます。そこで前期・後期に項目を分けることにします。

ここで「Fortran 撲滅」という言葉は、1977 年に bit 誌に4回にわたって連載された木村泉による「FORTRAN はいつ亡びるか?」という記事中で使われた言葉で、E.W.ダイクストラによる 1972 年度チューリング賞記念講演から、

FORTRAN などというものが
 存在していたことを
  われわれが忘れ去る日は
   早ければ早いほどよいのです。

と引用したところで用いた言葉です。

Edsger Dijkstra's Turing Award Speech - Part 3 of 8 3分33秒
https://youtu.be/yKiVz71AVKg?t=213

##前期 Fortran 撲滅論
Fortran 撲滅論の起源は古く、早くも 1961 年に R.W. Bemer が "we wish to obsolete FORTRAN and scrap it, not perpetuate it." と Fortran 根絶を唱え、ALGOL への転換を訴えています。Bemer は IBM で John Backus が逆風の中 Fortran 開発に苦労するのを間近で見ていた人で、Fortran に対する貢献も多い人にしてこの発言です。今に至るまでの Fortran 撲滅論の嚆矢をなしています。
1000.png

なお 1962 年に日本 IBM の西村恕彦が日本情報学会誌に書いた「FORTRAN IV 言語の概略」という記事の結びで、

それは端的にいえば,ALGOL,COBOL といった近代的な言語の影響であろう。

と当時の見方を述べております。 http://id.nii.ac.jp/1001/00009102/

その後の Fortran 撲滅論は枚挙のいとまもないくらいですが、先に引用した 1972 年度受賞者のダイクストラをはじめ、1980 年度受賞者の C.A.R. ホーア、1984 年度受賞者の N. ヴィルトなどの名だたるチューリング賞受賞者の面々から口々に罵られています。極めつけは 1977 年度受賞者にして Fortran の生みの親 J. バッカスからも関数型言語の優位が説かれ Fortran(とそれに続く言語すべて)が否定されています。
anime-was-a-mistake.jpg

関数型言語に関していえば 1984 年に Physics Today 上で "Retire Fortran? (Fortran 引退すべきか?)" という討論で関数型言語の挑戦を受けています。
A debate: Retire FORTRAN?: Yes
A debate: Retire FORTRAN?: No
続き 1991 年 "Retire Fortran? A debate rekindled (Fortran 引退すべきか? 再点火)"
Retire Fortran? A debate rekindled

なお幾多あまたの群小記事から探すと、1985 年には "Lets kill future Fortrans(未来の Fortran をぶっ殺そう)" とそのものズバリのタイトル記事が出て(複素数型の導入を条件に)C 言語への転向を呼びかけています。 1990 年には "The Fate of Fortran-8x(Fortran-8x の宿命)" という記事が出てソ連が使っている ALGOL-68 への転向が呼びかけられています。 なお翌 1991 年にソ連崩壊が起きソ連では ALGOL-68 は使われておらずコピーした Fortran が普及していたことが明らかになります。1994 年には "Farewell to Fortran(Fortran よさらば)" が C++ への転向を呼びかけています。この記事に対しては NAG 社の人が "Fanning the Flames of Fortran(Fortran の炎を煽る)" という反論記事を出していますが、この辺が潮目の変わった時期で、これ以降は Fortran 側が自己弁護的な記事を出すようになります。

##後期 Fortran 撲滅論
1990 年代に入ってからは Fortran 撲滅論が当然の前提のようになって、むしろ Fortran 側が弁護的記事を出すようになります。

1993 年の bit 誌の記事「Fortran90 の概要」(高田正之)では、

 Fortran と聞くと,歴史の教科書に出てくるだけの大昔のプログラム言語だと考える読者が多いのではないだろうか? 中身を知らないまま古いからといって敬遠してはいないだろうか?

と記事を書きはじめています。また 1996 年の bit 誌の記事「Fortran95 -次期 Fortran 規格の概要-」(高田正之)では第一節のタイトルが「1.FORTRANってまだあったんですか?」で、

 1985年からこの言語の標準化に携わっているが,周りから皮肉と忠告をこめて「FORTRAN ってまだあったの?」「そんなのやってて面白い?」と聞かれることがある.

と始めています。

また 2010 年には、電子情報通信学会誌で「あの技術は今 特別小特集」が組まれ、その中に二番目に登場しています。「科学技術演算向け言語 Fortran」(黒澤一平)

この変化はこの頃からコンピュータの利用の主体が数値計算から文書処理に移行し、Fortran が必修語から外れたためだと思われます。数値計算では、等質(同型、同種、等語長)・連続・矩形でランダムアクセス可能な配列が優位ですが、文書処理では不定長・不等質でシーケンシャルなバイトストリーム列のリスト処理が必要で Fortran には全く対応できません。(逆に配列を持たない Python では数値計算を行うにあたって、 C/Fortran で書かれた numpy ライブラリで等質・連続・矩形のデータ型を導入することが必須になっています。)

海外に目を向けても似たり寄ったりの事情です。それぞれ独立した記事ですが、お父さん、お爺ちゃん、ご両親(フェミニズムに配慮して)とタイトル(一部本文)の入れ替わった Fortan 紹介記事があって苦笑するしかありません。

そしてこれらに類する記事がネットに貼られると、判で押したように最初に書いたようなコメントが付くことになります。Fortran が ALGOL 系の特徴を取り入れて構造化、モジュール化、配列に対する関数言語的なイディオムの導入、オブジェクト指向化等々を果たして旧来の面目を一新していることを啓蒙する記事は十年以上にわたって数年に1回は現れていますが、Fortran 撲滅論は一向に消えることは無く、長く人気を保っています。

そこで次は撲滅論そのものについて考えてみることにします。

#3. プログラミング言語の進化論と優生主義

Fortran 撲滅論では「4. こんな古い言語が残っているのは恥!利用者共々さっさと撲滅せよ!」に類する言明がよく見られますが、論理が飛躍していて繋がりに乏しいにも関わらず、長期にわたって力強く唱えられ続けている所が非常に興味深いところです。

「古い言語が残っている」ことは事実として、
1.古さが「恥」や善悪のような道徳や倫理に結び付く論理的飛躍
2.言語とその使用者が同一視されている論理的飛躍
3. それが恥だとしても、すぐに撲滅に向かう著しい論理的飛躍
といった複数の論理的飛躍があります。そこで次にこれらの論理的飛躍を埋めることを考えてみます。

##進化論、優生主義、進化をもたらす力
プログラミング言語に関する記事を眺めていると、素朴な進化論が信じられていることに気づかされます。つまり、
1.プログラミング言語は時間とともに進化し、より優れた存在になってゆく。
特に継時的に既存の存在を否定することで一段と高い優秀な存在になるという、弁証法的な進化論を採っているように見受けられます。これにより古さは劣等性と同一視されます。

また、粗野な優生主義が存在していることにも気づかされます。つまり、
2.優秀な存在は、劣った存在の生殺与奪の権利を持つ。
というもので、問答無用な撲滅行為の正当性の根拠になっているようです。

さらに、言語とその使用者の価値が同一視されるのは、
3.プログラミング言語の進化を引き起こす力は、言語自身とその使用者にある。
と思われているからで、言語が進化から落伍するのは使用者の知的能力が低く新しい概念を理解できないからか、怠惰で理解しようとする努力を怠っていると見ているからのようです。

##構造主義、外部要因によるプログラミング言語の変化
ではプログラミング言語の進化論は成立しているのでしょうか?

プログラミング言語が時間とともに変化し、肥大化・複雑化していることは事実でしょう。しかし、構造化・オブジェクト指向・関数型言語が 1960 年代中葉から 1970 年代にかけて同時期に独立に現れたことや、広く受容された時期が大きく異なることは、継起的・弁証法的な進化とは相いれないように見えます。

むしろ、言語の変化はハードウェアや利用目的のような、言語の外部にある条件が変化することにより引き起こされたと見る方がより適切な気がします。つまり、内在的な進化論的時間発展ではなく、構造主義的に共時的な言語構造の変化が生じたと考えます。この場合、進化を引き起こす力の様な余分な概念を導入する必要が無くなり、言語と使用者を切り離せる利点もあります。恥や怠惰の罪の様な倫理性w導入する必要もなくなります。

優生主義に関しては独立な概念ですが、進化論的淘汰と結びついて正当化されやすい思想なので、進化論を採らないことで優生主義の入り込む余地も狭くなります。

#4. 撲滅論は死なず

将来、Fortran がよりモダンな文法を取り入れたり、あるいは啓蒙・宣伝活動などによって、またあるいは言語進化論が否定されることで、Fortran 撲滅論が無くなることがあるでしょうか?

それは、多分無いでしょう。いみじくもダイクストラが BASIC について語った発言、

BASICに一度でも触れたことがあるものに対して良いプログラミングを教えることは事実上不可能である。

に見られるように、古い言語であることは、矯正不可能な消えることのない烙印とみなされており、実際にどうであるかとは無関係に、何があっても絶対に許されないでしょう(笑)
DZjM-HYV4AEsAa6.jpg

今後とも Fortran 撲滅論を鑑賞する楽しみがありましょう。

32
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?