Fortran 開発における略歴

- 1980年にオーストラリア国立大学を卒業(BSc(Hons) in Computer Science)
- 1984年に英国 nAG 社に就職。Toolpack/1 プロジェクトでパブリックドメインの Fortran 77 用ソフトウェア開発ツールの開発に携わる。このツールの初版は1985年にリリースされ、1987 年にリリースされた後継バージョンには更なる機能が追加された。
- 1986年に ISPRA コース「Using Toolpack Software Tools」を共同発表する。このときの講義資料が1989年に出版される。
- 1988年より Fortran ワーキンググループ(ISO/IEC JTC1/SC22/WG5)のメンバーとして活動。
- 1991年にリリースされた nAGWare Fortran Tools のメイン解析フレームワーク部分を開発。
- 1991年に世界初の Fortran 90 コンパイラを開発し、nAGWare Fortran 90 として9月にリリース。その後もこのコンパイラの開発と拡張に携わる。1997年にはその年出版された Fortran 95 の規格に準拠させる。最新バージョンでは多くの Fortran 2003 の機能をサポートしている。
- 1993年以来、多くの J3(アメリカのFortranワーキンググループ)ミーティングに出席。また、1996年8月からこのワーキンググループの DATA サブグループのリーダーを務める。さらに、2004 年末に出版予定の新しい Fortran 規格のオブジェクト指向部分での設計を行う。
- ISO Technical Report 15581「Fortran - Enhanced data type facilities」のプロジェクト編集者を務める。このレポートは1998年12月に初版が出版され、第二版が2001年6月に出版された。
-
2004年6月に出版された「Fortran 95/2003 Explained」の共同著者を Mike Metcalf と John Reid と共に務める。
- nAG は世界で初めて Fortran 90 コンパイラをリリースした技術を継承し、現在では様々なプラットフォームで Fortran コンパイラ(Fortran 90/95/2003)を提供しています。Windows 版の nAG Fortran コンパイラは、統合開発環境として提供されて、「Fortran Builder」という名称で親しまれています。他のプラットフォーム(Linux, Solaris, MAC, FreeBSD など)においては「nAG Fortran Compiler」もしくは「nAG Fortran コンパイラ」として知られています。
nAG Fortran コンパイラに関する私の歴史
時は1988年。Fortran 標準の改編は混乱に陥っていました。ISO および X3J3(米国 Fortran 委員会でその後 J3 に改名している)の Fortran 標準の改編に携わる委員会は、大方3つの党派へ分離していました。
- progressive 派: 言語を非常に近代化したかった人々。(ほとんどユーザー)
- traditional 派: 言語の仕様を凍結、もしくは非常に小さな拡張を採用したかった人々。(ほとんどベンダー)
- moderate 派: 言語を近代化したかった人々、しかし第1のグループほどではない。(ユーザーとベンダー)
公のコンサルテーション期間が1987年に終わった後、3つのグループは同意することができませんでした。traditional 派は、提案されている新しい言語をインプリメントすることができないだろうと言っていました。moderate 派の人たちは、提案されている言語が複雑過ぎると言いつつもお互いに各々のお好みの機能が入っていないと嘆いていました。progressive 派は、他の党派の人たちが言語の良い部分を取り去って破滅させようとしていると言っていました。 (注:実際に状況はこれ以上に複雑でしたが、ここでの説明は合理的に単純化されたものと言えると思います。)
The French connection
1988年に Fortran の ISO ワーキンググループ(ISO/IEC JTC1/SC22/WG5)は新しい言語についてのミーティングをパリで行いました。このワーキンググループは Fortran 標準の改訂に関する責任を持っていましたが、その当時も現在と同様に多くの技術的部分をアメリカの委員会に委ねていました。アメリカの委員会が行き詰まったため、WG5 は自分たちが決めるべきであるという結論に達し、パリのミーティングでそれぞれの提案について話し合いました。
言語が非常に複雑で使いにくかったという progressive 派の主張に対して、Salford Software のジュリアン・ティルベリー氏と私(マルコム・コーエン)は、コンパイラの作成が可能であることをしめす、Fortran 8x(その当時の呼び名)のフロントエンドを披露しました。このデモ版フロントエンド(難しいであろうといわれた言語を完全に解析するフロントエンド)の開発には3ヶ月しかかかっていない事も重要でした。(この時のデモが全て上手くいったわけではありませんでした。フランスのキーボードの配列が英語のものとは異なっていたからです。私は例題を打ち込む時に目をつぶるかもしくは画面を見つめたまま行う必要がありました。)
WG5 はここで Fortran には progresive な近代化を行うことにし、国際コミュニティーが指摘していた問題の解決を含む新しい言語の機能を決定しました。早くできるであろうという(期待というよりも)希望で、WG5 は新しい言語を Fortran 88 と呼ぶことを提案しましたが、希望していた期間内に出来上がらなかったために新しい言語は Fortran 90 と呼ばれることになりました。
The nAG connection
nAG は多くの素晴らしい製品をとおして信用を築きましたが、その中でも特に重要だったのは Fortran 数値計算ライブラリでした。nAG にとって、Fortran が数値計算ソフトウェアの作成に最も適したツールでありつづけることと、市場での Fortran シェアを保持することが望まれていました。更に、Fortran が早く近代化されなければ、Fortran が消え去ってしまうだろうと、思われていました。そのため nAG は標準化委員会の努力をにミーティングに出席することや、パリでのデモ版ソフトウェアの構築することを通じてサポートしました。
nAG は Fortran 90 言語用の製品を開発するために、Fortran 90 コンパイラの early access(早期利用)を必要としていました。更に、Fortran(66/77)ライブラリ製品の品質管理を Fortran(66/77)ソフトウェアツールで行い成功をおさめていたため、Fortran 90 用の同様なソフトウェアツールの利用を望んでいました。また、nAG がコンパイラを開発することにより、他のベンダーへの刺激になり、また、ネイティブコンパイラがない環境でも nAG 独自のコンパイラを利用できるであろうと考えられました。
そして私がコンパイラを書くことになりました
1990年晩春に私が Fortran の将来に関して nAG の管理者のうちの一人と話しをした時のことでした。その会話の中で私が新しい言語用のコンパイラを書けるかもしれないという話しになりました。長期にわたって、プログラム言語に興味があり、実際に学生時代に自分で言語(Fortran 90 とは比べ物にならないくらい小さな言語でした)を設計してコンパイラを書いたこともあった私は、できるといいました。
その後のイベントに驚いてはいけないのですが、まず私のマネージャーがコンパイラを書くのにどれくらいの期間がかかるのかと聞いてきました。私は「絶対1年以上はかかります。多分15ヶ月くらいでしょうか」というような答えをしました。次に気付いた時には、コンパイラを書くことが私の仕事になっていたうえ、納期は15ヶ月でした!言うまでもありませんが、この開発期間は今まで携わったどのプロジェクトよりも一生懸命、長い時間働きました。
最初に決めなければならなかった事はターゲットマシンまたは言語、そしてインプリメントを行う言語でした。私は C 言語でコンパイラを書き C 言語のコードを(ポータブルなアセンブラとして)生成することに決めました。いくつかの理由は以下のとおりです。
- C 言語で移植性のあるコード書くための知識があった。
- C コンパイラは広く利用可能であった。
- 様々なプラットフォームでコンパイラを移植するのに都合が良かった。
- C コンパイラの最適化機能を利用する事ができるため、Fortran コンパイラで行わなければならない最適化を減らすことができる。
私は他の言語で同様な機能を既に知っていたため、ほとんどの Fortran 90 言語の機能に精通していました。問題は機能の数とそれぞれの相互作用が多すぎることでした。一時的により多くのエネルギーをかけて丘に登ることはできるでしょうが、継続的にそれだけのエネルギーをかけて山に登ることは簡単にはできません。頂上に登れば、そこにでは新たに目の前に広がる展望を見ることになります。
High Performance
私にとって比較的未知であった最大の機能は配列シンタックスと全体配列オペレーションでした。特に初版については、正確さがパフォーマンスよりはるかに重要であったので、私は配列オペレーションに対して非常に単純なアプローチをとりました。私が全体配列オペレーションの評価をどのように行うのか理解不足な部分があったので、すべての配列表現は一時的な結果を格納する配列が必要となる、単一のオペレーションに分割されました。このアプローチは正しい答えを出すためには成功と言えましたし、不運にも、よいパフォーマンスを提供しないことにも成功したと言えます。(2年後にリリースされた第二版ではこの機能部分は完全に書き直しされることになります。)
この他の大きな問題はコンパイラのテストでした。サブセットである Fortran77 機能部分は既にあるテストスイートを利用できました。数学的な正確性のテストもテストプログラムや数値計算ライブラリが利用できました。しかし、新しい機能についてはほとんど何のコードもない状態でした。Mike Metcalf と John Reid による Fortran 90 Explained という本の中の少しの例題コードが使える程度でした。(この本はとてもクリアであったため、その後私たちのコンパイラマニュアルの一部としてこれを利用する事にしました。)
私は開発期間中に個々の機能を検証するための多くのテストプログラムを作成しました。しかしこれだけではそれぞれの機能が一緒に動いた場合の検証には十分ではありませんでした。Brian Smith 氏やその他の人々がテストスイートを書いているという事を知っていたため、彼らにプロトタイプのコンパイラを使ってもらい、バグレポートをあげてもらいました。このことは非常に貴重で、これなしで同等の品質でコンパイラをリリースするには更に多くの月日を必要としたと思います。
1991の春頃には、私は一日中コンパイラに関わる事をやめる必要があると感じたので、夜の時間帯に、自動車(Caterham のスーパーセブン)を構築することにしました。車の構築の方がコンパイラよりも簡単だったと思います。というのも、(High Performance な)車の構築の方が先に終わったからです。
多くのトライアルと苦難の後に(標準が出版されたのとほぼ同時に)1991年9月にコンパイラは世界初の Fortran 90 コンパイラとしてリリースされました。
コンパイラをがんばって作ったことに対する私への報い(?)は、コンパイラのサポートとメンテナンスにとどまらず、HPF、Fortran 95、Fortran 2003 などの拡張や増強、ユーザーリクエストによる歴史的な古い言語スタイルへの対応、より良いパフォーマンス、更に多くのコンパイル時と実行時におけるエラー検出などでした。今現在(2004年10月)、最新の nAG Fortran コンパイラは多くの Fortran 2003 の機能をもち、更なる進化に向けての開発が進行中です。