ALGOL 60 60周年: これまで使ったことのない最高のコンピュータ言語であり、プログラミングの系譜の祖

Table of Contents

ALGOL 60 60周年: これまで使ったことのない最高のコンピュータ言語であり、プログラミングの系譜の祖

2020 年は、ALGOL 60 が多数のコンピュータ言語の基礎を築いてから 60 年目にあたります。

The Register は、国立コンピュータ博物館の Peter Onion 氏と Andrew Herbert 氏にインタビューし、パンチ テープが使われていた古き良き時代についてもう少し詳しく聞きました。

beginALGOL 60 は、1958 年にデビューした ALGOL 58 の後継です。ALGOL 58 では、コード ブロック (区切りのペアでいっぱい) の概念が導入されましたendが、ALGOL 60 は構造化プログラミングのこれらの開始点を採用して実行し、Pascal や C などのよく知られた言語だけでなく、B や Simula のような言語も生み出しました。

「1950年代には、ほとんどのコードはもともと機械語かアセンブリコードで書かれていました」と、ケンブリッジにあるマイクロソフト研究所の元所長ハーバート氏は語る。コンピューターにはそれぞれ独自の工夫が施されているのだ。「オートコード」と呼ばれる第一世代の言語は、方程式などの問題をコーディングするためのもので、機械語に変換できるようになってはいたが、今日のような高度な機能は備えていなかった。さらに悪いことに、一部の言語には他の言語にはない機能があり、システム間の移行が困難だった。

「[エリオット] 803用のオートコードはありました」とオニオン氏は語る。「しかし、A + B = Cのような式しかサポートしていなかったため、複雑な式を扱う場合は、個々の二項演算に分解する必要がありました。そのため、プログラマーには依然として多くの苦労が伴いました。」

「Fortranは、科学技術計算や数値計算のための最初の本格的なプログラミング言語として登場しました」とハーバート氏は述べた。「これにより、高水準言語(当時の呼び方では高水準言語でしたが、現代の基準からするとかなり原始的でした)があればプログラマーの生産性が向上すると人々は確信しました。」

コンパイルのオーバーヘッドとコンパイラ自体の非効率性により、マシン コードがパフォーマンスの王者であり続けましたが、科学研究に携わる人々にとっては、問題を解決するためにコードを大量に作成し、次の問題に簡単に移行できる機能は魅力的でした。

「Fortran は、オートコードのようなものでした」とハーバート氏は続けて笑いながら言いました。「今でも、ある意味ではそうですよ!」

「そして多くの人が、あなたならもっとうまくできると思っていたんです。」

そこで国際情報処理連盟(IFIP)が登場した。ハーバート氏はIFIPには「コンピューティングの標準や問題を検討する委員会が多数あった」と回想する。

あるグループは、当時「アルゴリズム言語」と呼ばれていたもの、つまりアルゴリズムを記述するための言語の設計に着手しました。1958年の成果は「ALGOL 58」という言語を記述したものです。しかし、エンジニアたちが新しいシステム用のコンパイラを作り始めると、「あらゆることが十分に検討されておらず、十分に検討されていなかった」ことに気づきました、とハーバートは回想します。

こうして改訂と変更が重ねられ、「The ALGOL Bulletin」という定期刊行物には、言語の問題点や弱点への対処(あるいは少なくともその試み)に携わった人々の苦労が詳しく掲載されました。

このプロセスは、今日のオープンソースのメーリングリストと似ていますが、紙の形式でした。

最終的に、ハーバート氏は「彼らは ALGOL 60 レポートを出版しました。これが、当時誰もが目指していた基準です」と語った。

委員会はプレッシャーにさらされ、国際的なアプローチの違いにも多少悩まされました。アメリカ側はFortranの経験が豊富で、自国のコンピュータですぐに使えるものを求めていました。一方、ヨーロッパ側はもう少し知的な思考で、ハーバート氏が笑うように「言語に美しさや優雅さといったひどい概念を念頭に置いていた」のです。

「構造化プログラミング、データ構造、データ型といった考え方など、現在では当然のことと考えられているものを人々は整理していた」と彼は付け加えた。

システム間でのプログラマーの移植性、ハードウェア世代間でのコードの移植性の問題、およびコンピュータの新しいバージョンが登場するたびにプログラムを書き直さなければならないという苦労を回避するという問題の解決策を求めて、ベンダーは、多くのメーカーにわたって派生型が登場する言語を採用しました。

ALGOL 60 テープ (写真: Peter Onion)

ALGOL 60 のテープ (写真: Peter Onion)

残念ながら、手軽に「HELLO WORLD」のようなサンプルコードを探している人は失望するでしょう。後に多くの言語にインスピレーションを与えることになるこの言語の最大の弱点は、標準的な入出力機能が欠けていたことです。

「定義委員会は入出力の方法について合意に至りませんでした」とハーバート氏は述べた。「彼らはそれをライブラリに委ね、そのライブラリはユーザーに依存すると決定したのです。」

「この場合、ユーザーとはコンパイラの作成者です」とオニオン氏は付け加えた。

ああ、困った。この省略によってベンダー独立性はほぼ失われ、メーカーは当然ながら独自の道を歩み、システム間で互換性のないコードが大量に残ってしまった。また、ALGOL 60には解釈の余地のある要素があり、当初からやや妥協的な部分があった。

ALGOLが発展を遂げる一方で、Fortranの開発も並行して進められました。「Fortranの世界の人々は、ALGOLのアイデアを気に入って、それを持ち込んだのです」とハーバート氏は説明します。数十年が経ち、Fortranは科学計算の中心であり続けましたが、ALGOLはより学術的な言語となり、コンピュータサイエンスの概念を教えるために使われるようになりました。

「科学界ではかなり頻繁に使われていました」とハーバート氏は言う。「ほとんどのメインフレームメーカーがサポートしていました。」

ALGOL 60 のチームのメンバーの一部はプロジェクトに留まり、ALGOL 68 の開発に取り組みました。ハーバート氏によれば、ALGOL 68 は「ALGOL 60 で曖昧だった点をすべて解決した」とのことです。

実際、1970年代にはコンピュータサイエンスのコースを受講する者にとって、これは避けて通れない問題でした。このハックには後継言語への懐かしい思い出があり、Regの副編集者であるリチャード・カリーの祖父はALGOL 68-RとRSの開発に携わっていました。

「世界で最も珍しい入出力システムを持っていた」ハーバート氏は笑った。

残念ながら、愛好家にとっては行き詰まりとも言える状況でした。ALGOL 68-Rは一時期、軍事用途(特にイギリス)で広く使用されるようになりましたが、ALGOL 68の完全な実装が利用可能になるまでには1970年代までかかりました。

ALGOL Bulletinの最終版は1988年に発行され、編集者は次のように記しています。「ALGOL 68は言語として非常に安定しています。その利点を理解する人々によって使用され、愛されていますが、そうでない人々からは無視(または誤って引用)されています。」

ALGOL 60の物語は、言語の最終的な運命だけでなく、それが影響を与えた人々の物語でもあります。ニクラウス・ヴィルトとクイックソートの作者トニー・ホーアによるALGOL Xの提案に基づいたALGOL Wは、ヴィルトのPascalとModula-2に影響を与えました。Pascalの影響は今日でも感じられます。

ALGOL 60は、1960年代に開発され、その後10年ほど実装されなかったCombined Programming Language(CPL)にも大きな影響を与えました。CPLはBasic CPL(BCPL)へと発展し、そこからB言語が生まれました。B言語はさらに発展してC言語となりました。

Tony Hoare 氏は、Elliott 803 コンピュータへの ALGOL 60 の実装を担当しました。このコンピュータの例は現在も国立コンピューティング博物館で運用されていますが、このハードウェア上でプログラムをコンパイルして実行することは、現在プログラマが慣れている開発環境とは少し異なります。

まず、コンパイラを紙テープからロードする必要があります。次に、ALGOLプログラム自体をテープリーダーに送り込み、「コンパイル中は30秒から15~20分ほど、カチカチと音を立てながら処理が進みます」とオニオン氏は述べました。

チャンティングを見よ

一度コンパイルされたプログラムは、元々コンパイラが占有していたメモリ空間を自由に使用できるようになります。しかし、そうすることでプログラマーは人気を得ることはできません。なぜなら、次のユーザーがコンパイラを再度ロードしなければならないからです。メモリ内に残しておくことで、複数のプログラムを実行できるのです。

「それが教育にとても人気を博したのです」とハーバート氏は言う。「なぜなら、学生が列をなして、それぞれがプログラムを書いた紙テープを手に持ち、マシンの前に行進するのです。マシンには ALGOL システムがロードされており、プログラムを実行すると意味不明な文字列が生成されます。その場を離れてプログラムについて考え、次の学生がプログラムを実行するのです。」

紙テープが主流となった今、プログラミングの経験から集中力が少し身についたとオニオン氏は指摘する。「編集、コンパイル、編集、コンパイルのサイクルが 10 分を超えると、ソース コードにかなりの注意を払うようになります...」

国立コンピュータ博物館には、エリオットのマシンが 2 台収蔵されています。1962 年製の 803B (廃止後 15 年間納屋に眠っていた後に寄贈されました) と 903 です。どちらも完全に動作可能な状態であり、博物館が再び開館できるようになれば、稼働している様子を見ることができます。

Onion によって保守されている 803B には、Calcomp ドラム プロッタといくつかの追加の入出力機能も搭載されています。

ALGOL プロット (写真: Peter Onion)

ALGOL プログラムでプロットしたローレンツ アトラクター (写真: Peter Onion)

ALGOL 60 自体を実際に試すには、Elliott 803 や 903 をお持ちでない方のためにいくつかの選択肢があります。MARST が ALGOL 60 を C 言語に翻訳してくれるほか、シミュレーターを使って 803 の全体的な操作感を体験することもできます。

ALGOL 60が60周年を迎える今、現代的なプログラミング言語を起動するだけでも十分でしょう。その奥には、ALGOLの設計者たちのアイデアが潜んでいることでしょう。®

Discover More