オートコードは、1950 年代から 1960 年代にかけてマンチェスター大学、ケンブリッジ大学、ロンドン大学の一連の デジタル コンピュータ用に考案された「簡略化されたコーディング システム」ファミリーの名前であり、後にプログラミング言語と呼ばれるようになりました。オートコードは一般的な用語であり、異なるマシンのオートコードは、たとえば単一言語Fortranの異なるバージョンのように、必ずしも密接に関連しているわけではありませんでした。
今日、この用語は、マンチェスター マーク 1オートコーダ システムから派生した初期の言語ファミリーを指すために使用されています。これらのシステムは概ね類似しています。1960 年代には、オートコーダという用語は、コンパイラを使用する高水準プログラミング言語を指す一般的な用語として使用されていました。[1] オートコードと呼ばれる言語の例としては、COBOLやFortran などがあります。[2]
グレニーのオートコード
最初のオートコードとそのコンパイラは、1952年にマンチェスター大学のMark 1コンピューター用にアリック・グレニーによって開発され、最初のコンパイル型プログラミング言語であると考える人もいます。彼の主な目的は、特に難解なマシンコードで知られていたMark 1マシンのプログラミングの理解度を高めることでした。結果として得られた言語はマシンコードよりもはるかに明確でしたが、それでもマシンに大きく依存していました。[3]
以下は、式を計算する Glennie の Autocode 関数の例です。 この例では、整数を変数に配置するために必要なスケーリング命令を省略し、乗算の結果が下位の累算器に収まると想定しています。
c@VA t@IC x@½C y@RC z@NC
INTEGERS +5 →c # cに5を入れる
→t # 下位アキュムレータから引数をロードする
# 変数tに
+t TESTA Z # |t| を下のアキュムレータに入れる
-t
エントリーZ
サブルーチン6 →z # 平方根サブルーチンを実行する
# 低いアキュムレータ値
# 結果をzに入れる
+tt →y →x # t^3を計算してxに代入する
+tx →y →x
+z+cx CLOSE WRITE 1 # z + (c * x) を
# 下位アキュムレータ
# 戻ります
GlennieのAutocode Compilerのユーザーマニュアルには、「効率の低下は10%以下」と記載されています。[4]
Glennie の Autocode が他のマンチェスター ユーザーのプログラミング習慣に与えた影響はごくわずかでした。Brooker の 1958 年の論文「マンチェスター大学コンピューター用に開発された Autocode プログラム」にも触れられていませんでした。
マーク1オートコード
マーク 1 用の 2 番目のオートコードは 1954 年に計画され、 1955 年にRA Brookerによって開発され、「マーク 1 オートコード」と呼ばれました。この言語は、最初のオートコードとは異なり、ほぼマシンに依存せず、浮動小数点演算を備えていました。一方、1 行に 1 つの操作しか実行できず、ニーモニック名もほとんどなく、ユーザー サブルーチンを定義する方法もありませんでした。[5]
入力からサイズ11の浮動小数点数の配列をロードするサンプルコードは次のようになります。
1 = 1 です
1 vn1 = Iは入力をv[n[1]]に読み込む
n1 = n1 + 1
j1,11 ≥ n1はn[1] ≤ 11の場合1にジャンプする
BrookerのAutocodeは、Mark 1のプログラマーの2つの主な問題点、つまりスケーリングと2レベルストレージの管理を解消しました。その前身とは異なり、Autocodeは頻繁に使用されました。[6]
後期オートコード
ブルッカーは1950 年代にマンチェスター大学と共同で Ferranti Mercury用のオートコードも開発しました。Mercuryオートコードは変数az と a'-z'の限られたレパートリーしか持たず、ある意味で後のDartmouth BASIC言語の初期バージョンに似ていました。ALGOLより前のもので、スタックの概念がなく、したがって再帰や動的に割り当てられた 配列はありませんでした。Mercury で利用できるストア サイズが比較的小さいことを克服するために、大きなプログラムは個別の「チャプター」として書かれ、各チャプターがオーバーレイを構成しました。時間のかかるチャプター間の制御の移行を最小限に抑えるには、ある程度のスキルが必要でした。ドラムからユーザー制御でオーバーレイを作成するというこの概念は、後のマシンで仮想メモリが利用できるようになるまで一般的でした。Ferranti Atlas (後のAtlas Autocodeとは異なる) とICT 1300および1900シリーズでは、Mercury オートコードのわずかに異なる方言が実装されました。
EDSAC 2のバージョンは、1961 年にケンブリッジ大学数学研究所の David Hartleyによって考案されました。EDSAC 2 Autocode として知られるこの言語は、Mercury Autocode をそのまま開発してローカルな状況に適応させたもので、当時としては先進的だったオブジェクト コードの最適化とソース言語の診断機能で知られていました。後継機Titan (プロトタイプ Atlas 2 コンピュータ) 用のバージョンは、 CPLと呼ばれるより大幅に先進的な言語が開発されるまでの一時的なつなぎとして開発されました。CPL は完成しませんでしたが、 M. Richards によって開発されたBCPLを生み出し、これがBに、そして最終的にはCにつながりました。同時期ではあるものの別の開発の流れとして、マンチェスター大学のAtlas 1マシン用にAtlas Autocode が開発されました。
参考文献
- ^ ロンドン、キース (1968)。「4、プログラミング」。コンピュータ入門(第 1 版)。ロンドン: フェイバー アンド フェイバー リミテッド。p. 184。SBN 571085938「高」レベルのプログラミング言語は、
多くの場合、オートコードと呼ばれ、プロセッサ プログラムはコンパイラと呼ばれます。
- ^ ロンドン、キース (1968)。「4、プログラミング」。コンピュータ入門(第 1 版)。ロンドン: フェイバー アンド フェイバー リミテッド。p. 186。SBN 571085938ここ
でオートコードの構造と目的を説明する例として使用できる 2 つの高水準プログラミング言語は、COBOL (Common Business Oriented Language) と FORTRAN (Formular Translation) です。
- ^ クヌース、42-43ページ
- ^ クヌース、48ページ
- ^ クヌース、63-64ページ
- ^ クヌース、65ページ
出典
- Campbell-Kelly, Martin (1980)。「Mark 1 のプログラミング: マンチェスター大学における初期のプログラミング活動」。Annals of the History of Computing . 2 (2)。IEEE: 130–167。doi : 10.1109 /MAHC.1980.10018。S2CID 10845153 。
- ガルシア・カマレロ、エルネスト(1961年)。 AUTOCODE un sistema simplificado de codificacion para la computadora MERCURY (スペイン語)。ブエノスアイレス大学。 p. 70.
- ロンドン、キース(1968年)。コンピュータ入門。p.261。
- Knuth, Donald E.; Pardo, Luis Trabb (1976)。「プログラミング言語の初期開発」。スタンフォード大学、コンピュータサイエンス学部。
さらに読む
- オートコード: ユーザーの視点
- Brooker, RA (1958-01-01). 「マンチェスター大学コンピュータ用に開発されたオートコードプログラム」.コンピュータジャーナル. 1 (1): 15–21. doi : 10.1093/comjnl/1.1.15 . ISSN 0010-4620.
- Barron, David William他 (1967)。Titan Autocode プログラミング マニュアル。ケンブリッジ大学数学研究所。
- バロン、デイビッド・ウィリアム(1968) [1967]。「1.5. 関数型プログラミングにおける再帰」。ギル、スタンレー(編)。プログラミングにおける再帰的テクニック。マクドナルド・コンピュータ・モノグラフ (第 1 版)。ロンドン:マクドナルド & Co. (出版社) Ltd. p. 8。SBN 356-02201-3。(viii+64ページ)
