NAG Fortranコンパイラ開発者紹介

マルコム・コーエン氏の紹介

Fortran開発における略歴

MJC
  • 1980年にオーストラリア国立大学を卒業(BSc(Hons) in Computer Science)
  • 1984年に英国NAG社に就職。Toolpack/1プロジェクトでパブリックドメインのFortran77用ソフトウエア開発ツールの開発に携わる。このツールの初版は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月に出版された。
  • Fortran 95/2003 Explained2004年6月に出版された「Fortran 95/2003 Explained」の共同著者をMike MetcalfとJohn Reidと共に務める。
  • NAGは世界で初めてFortran90コンパイラをリリースした技術を継承し、 現在では様々なプラットフォームでFortranコンパイラ(Fortran90/95/2003)を提供しています。 Windows版のNAG Fortranコンパイラは、統合開発環境として提供されて、 「Fortran Builder」という名称で親しまれています。 他のプラットフォーム(Linux, Solaris, MAC, FreeBSDなど)においては 「NAG Fortran Compiler」もしくは「NAG Fortranコンパイラ」として知られています。

NAG Fortran compilerに関する私の歴史

時は1988年。フォートラン標準の改編は混乱に陥っていました。 ISO及びX3J3(米国フォートラン委員会でその後J3に改名している)のフォートラン標準の改編に携わる委員会は、大方3つの党派へ分離していました。

  • progressive派: 言語を非常に近代化したかった人々。(ほとんどユーザ)
  • traditional派: 言語の仕様を凍結、もしくは非常に小さな拡張を採用したかった人々。(ほとんどベンダー)
  • moderate派: 言語を近代化したかった人々、しかし第1のグループほどではない。(ユーザとベンダー)

公のコンサルテーション期間が1987年に終わった後、3つのグループは同意することができませんでした。traditional派は、提案されている新しい言語をインプリメントすることができないだろうと言っていました。moderate派の人たちは、提案されている言語が複雑過ぎると言いつつもお互いに各々のお好みの機能が入っていないと嘆いていました。progressive派は、他の党派の人たちが言語の良い部分を取り去って破滅させようとしていると言っていました。 (注:実際に状況はこれ以上に複雑でしたが、ここでの説明は合理的に単純化されたものと言えると思います。)

The French connection

1988年にフォートランのISOワーキンググループ(ISO/IEC JTC1/SC22/WG5)は新しい言語についてのミーティングをパリで行いました。このワーキンググループはフォートラン標準の改訂に関する責任を持っていましたが、その当時も現在と同様に多くの技術的部分をアメリカの委員会に委ねていました。アメリカの委員会が行き詰まったため、WG5は自分たちが決めるべきであるという結論に達し、パリのミーティングでそれぞれの提案について話し合いました。

言語が非常に複雑で使いにくかったというprogressive派の主張に対して、Salford Softwareのジュリアン・ティルベリー氏と私(マルコム・コーエン)は、コンパイラの作成が可能であることをしめす、Fortran 8x(その当時の呼び名)のフロントエンドを披露しました。このデモ版フロントエンド(難しいであろうといわれた言語を完全に解析するフロントエンド)の開発には3ヶ月しかかかっていない事も重要でした。(この時のデモが全て上手くいったわけではありませんでした。フランスのキーボードの配列が英語のものとは異なっていたからです。私は例題を打ち込む時に目をつぶるかもしくは画面を見つめたまま行う必要がありました。)

WG5はここでフォートランにはprogresiveな近代化を行うことにし、国際コミュニティーが指摘していた問題の解決を含む新しい言語の機能を決定しました。早くできるであろうという(期待というよりも)希望で、WG5は新しい言語をFortran 88と呼ぶことを提案しましたが、希望していた期間内に出来上がらなかったために新しい言語はFortran 90と呼ばれることになりました。

The NAG connection

NAGは多くの素晴らしい製品をとおして信用を築きましたが、その中でも特に重要だったのはFortran数値計算ライブラリでした。NAGにとって、Fortranが数値計算ソフトウエアの作成に最も適したツールでありつづけることと、市場でのFortranシェアを保持することが望まれていました。更に、フォートランが早く近代化されなければ、フォートランが消え去ってしまうだろうと、思われていました。そのためNAGは標準化委員会の努力をにミーティングに出席することや、パリでのデモ版ソフトウエアの構築することを通じてサポートしました。

NAGはFortran 90言語用の製品を開発するために、Fortran 90コンパイラのearly access(早期利用)を必要としていました。更に、Fortran(66/77)ライブラリ製品の品質管理をFortran(66/77)ソフトウエアツールで行い成功をおさめていたため、Fortran 90用の同様なソフトウエアツールの利用を望んでいました。また、NAGがコンパイラを開発することにより、他のベンダーへの刺激になり、また、ネイティブコンパイラがない環境でもNAG独自のコンパイラを利用できるであろうと考えられました。

そして私がコンパイラを書くことになりました

1990年晩春に私がフォートランの将来に関してNAGの管理者のうちの一人と話しをした時のことでした。その会話の中で私が新しい言語用のコンパイラーを書けるかもしれないという話しになりました。長期にわたって、プログラム言語に興味があり、実際に学生時代に自分で言語(Fortran 90とは比べ物にならないくらい小さな言語でした)を設計してコンパイラを書いたこともあった私は、できるといいました

その後のイベントに驚いてはいけないのですが、まず私のマネージャがコンパイラを書くのにどれくらいの期間がかかるのかと聞いてきました。私は「絶対1年以上はかかります。多分15ヶ月くらいでしょうか」というような答えをしました。次に気付いた時には、コンパイラを書くことが私の仕事になっていたうえ、納期は15ヶ月でした!言うまでもありませんが、この開発期間は今まで携わったどのプロジェクトよりも一生懸命、長い時間働きました。

最初に決めなければならなかった事はターゲットマシン又は言語、そしてインプリメントを行う言語でした。私はC言語でコンパイラを書きC言語のコードを(ポータブルなアセンブラとして)生成することに決めました。いくつかの理由は以下のとおりです。

  • C言語で移植性のあるコード書くための知識があった。
  • Cコンパイラは広く利用可能であった。
  • 様々なプラットフォームでコンパイラを移植するのに都合が良かった。
  • Cコンパイラの最適化機能を利用する事ができるため、Fortranコンパイラで行わなければならない最適化を減らすことができる。

私は他の言語で同様な機能を既に知っていたため、ほとんどのFortran 90言語の機能に精通していました。問題は機能の数とそれぞれの相互作用が多すぎることでした。一時的により多くのエネルギーをかけて丘に登ることはできるでしょうが、継続的にそれだけのエネルギーをかけて山に登ることは簡単にはできません。頂上に登れば、そこにでは新たに目の前に広がる展望を見ることになります。

High Performance

私にとって比較的未知であった最大の機能は配列シンタックスと全体配列オペレーションでした。特に初版については、正確さがパフォーマンスよりはるかに重要であったので、私は配列オペレーションに対して非常に単純なアプローチをとりました。私が全体配列オペレーションの評価をどのように行うのか理解不足な部分があったので、すべての配列表現は一時的な結果を格納する配列が必要となる、単一のオペレーションに分割されました。このアプローチは正しい答えを出すためには成功と言えましたし、不運にも、よいパフォーマンスを提供しないことにも成功したと言えます。(2年後にリリースされた第二版ではこの機能部分は完全に書き直しされることになります。)

この他の大きな問題はコンパイラーのテストでした。サブセットであるフォートラン77機能部分は既にあるテストスイートを利用できました。数学的な正確性のテストもテストプログラムや数値計算ライブラリが利用できました。しかし、新しい機能についてはほとんど何のコードもない状態でした。Mike MetcalfとJohn ReidによるFortran 90 Explainedという本の中の少しの例題コードが使える程度でした。(この本はとてもクリアであったため、その後私たちのコンパイラマニュアルの一部としてこれを利用する事にしました。)

私は開発期間中に個々の機能を検証するための多くのテストプログラムを作成しました。しかしこれだけではそれぞれの機能が一緒に動いた場合の検証には十分ではありませんでした。Brian Smith氏やその他の人々がテストスイートを書いているという事を知っていたため、彼らにプロトタイプのコンパイラを使ってもらい、バグレポートをあげてもらいました。このことは非常に貴重で、これなしで同等の品質でコンパイラをリリースするには更に多くの月日を必要としたと思います。

1991の春頃には、私は一日中コンパイラーに関わる事をやめる必要があると感じたので、夜の時間帯に、自動車(Caterhamのスーパー7)を構築することにしました。車の構築の方がコンパイラよりも簡単だったと思います。というのも、(High Performanceな)車の構築の方が先に終わったからです。

多くのトライアルと苦難の後に(標準が出版されたのとほぼ同時に)1991年9月にコンパイラは世界初のFortran 90コンパイラとしてリリースされました。

コンパイラーをがんばって作ったことに対する私への報い(?)は、コンパイラのサポートとメンテナンスにとどまらず、HPF、Fortran95、Fortran2003などの拡張や増強、ユーザリクエストによる歴史的な古い言語スタイルへの対応、より良いパフォーマンス、更に多くのコンパイル時と実行時におけるエラー検出などでした。今現在(2004年10月)、最新のNAG Fortranコンパイラは多くのFortran 2003の機能をもち、更なる進化に向けての開発が進行中です。


Results matter. Trust NAG.

Privacy Policy | Trademarks