Autocode

Autocode(オートコード)はコーディング簡略化システムと呼ばれた一連のソフトウェアであり、後にプログラミング言語と呼ばれるようになったもので、1950年代と1960年代に ロンドンのマンチェスター大学やケンブリッジ大学で開発されたコンピュータ用に開発された。オートコードは広義にはこれらの各種コンピュータ上で使われた高水準言語の総称で、別のマシンのオートコードは似ているとは限らず、例えばFORTRANのような他の高水準言語でいうところの方言のようなものがあった。 コンピュータの歴史上において、この用語は狭義にはマンチェスターマーク1用の自動コーディングシステムに由来する初期のプログラミング言語のファミリーを指している。1960年代には高水準言語コンパイラを指す用語としてオートコーダーという言葉が広く使われた。COBOLやFORTRAMも当初はオートコーダーの1つに分類された。 世界初のオートコードとそのコンパイラは、1952年にアリック・グレニーがマンチェスター大学のMark 1コンピュータ用として開発したもので、世界初のコンパイラと考えられている。難解であることで有名だったMark 1のマシン語をわかりやすいものにすることが主な目的だった。開発された言語はマシン語よりもはるかにわかりやすかったが、しかしマシンのアーキテクチャに大きく依存していた。 グレニーのオートコードで数式 f ( t ) = | t | + 5 t 3 {\displaystyle f(t)={\sqrt {|t|}}+5t^{3}} を計算する関数の例を以下に示す。この例では乗算の結果がアキュムレータの下位レジスタに収まるという前提で、整数を変数に納めるために必要なスケーリングの計算を省略している。 c@VA t@IC x@½C y@RC z@NC INTEGERS +5 →c # 5をcに代入 →t # 引数をアキュムレータの下位レジスタから # 変数tに読み込む +t TESTA Z # |t|をアキュムレータの下位レジスタに代入 -t ENTRY Z SUBROUTINE 6 →z # アキュムレータの下位レジスタにある値で # 平方根のサブルーチンを呼び出し # 結果をzに代入 +tt →y →x # t^3を計算してxに代入 +tx →y →x +z+cx CLOSE WRITE 1 # z + (c * x) を # アキュムレーターの下位レジスタに入れて # 返す グレニーのオートコードコンパイラのマニュアルには、「処理効率の低下は10％以下」と記載されている。 マンチェスター大学の他のユーザーはグレニーのオートコードをほとんど使わなかった。ブルッカーが1958年に発表した論文の「マンチェスター大学のコンピュータ用に開発されたオートコードプログラム」にすらも言及がなかった。 次にMark 1用に開発されたオートコードは、RAブルッカーが1954年に計画して1955年に開発したMark 1 オートコードだった。最初の言語と異なり、特定のマシンに対する依存性がほぼなく、浮動小数点演算機能があった。一方1行に1命令しか許されず、定義されたニーモニックはわずかで、サブルーチンを定義する方法がなかった。 11個の浮動小数点数の配列を入力からロードするコードの例を以下に示す。 n1 = 1 1 vn1 = I 入力をv[n[1]]に入れる n1 = n1 + 1 j1,11 ≥ n1 n[1] ≤ 11ならば1にジャンプ ブルッカーのオートコードは、2つの記憶装置のスケーリングとマネージメントが難しかったMark 1でのプログラムを容易にし、最初のオートコードと異なり頻繁に利用された。 ブルッカーはまたマンチェスター大学と共同で1950年代にフェランティ・マーキュリー用のオートコードを開発した。マーキュリー・オートコードでは、変数がaからzまでとa'からz'までの52種類しかなく、ある意味で後に登場した初期のダートマスBASIC言語にも似ていた。ALGOL以前の言語であり、スタックの概念がなく、そのため再帰の記述もできず、動的な配列の確保もできなかった。 マーキュリーのメモリ容量は小さかったため、大きなプログラムをチャプターに分割し、オーバーレイのテクニックを使って実装した。チャプターの制御の切り替えには時間がかかるため、性能を上げるには特殊な技能を必要とした。ドラムを制御してオーバーレイを実現するテクニックは仮想メモリが後に実現されるまで一般的になった。マーキュリー・オートコードの別バージョンがフェランティ・アトラス(後のアトラス・オートコードとは別物)や、ICT 1300～1900で実装された。 1961年にケンブリッジ大学数学研究所のデビッド・ハートリーがEDSAC 2バージョンを開発した。EDSAC 2オートコードはマーキュリー・オートコードをベースにしてマシンに合わせた改造をしたもので、オブジェクトコードを最適化する機能があり、ソースコードのエラーチェック機能がある、当時としては先進的なコンパイラとして有名だった。ALGOL風の構文で科学技術計算向けに最適化されていた。高水準言語のCPLが完成するまでの一時的なつなぎとして、後継機種のタイタン(アトラス2のプロトタイプ)にもオートコードが実装された。CPLは結局完成しなかったが、マーティン・リチャーズがBCPLを開発し、B言語からC言語に発展した。同時期にマンチェスター大学でもアトラス1用にアトラス・オートコードを開発していた。 ^ London, Keith (1968). “4, Programming”. Introduction to Computers (1st ed.). 24 Russell Square London WC1: Faber and Faber Limited. p. 184. "The 'high' level programming languages are often called autocodes and the processor program, a compiler."  ^ London, Keith (1968). “4, Programming”. Introduction to Computers (1st ed.). 24 Russell Square London WC1: Faber and Faber Limited. p. 186. "Two high level programming languages which can be used here as examples to illustrate the structure and purpose of autocodes are COBOL (Common Business Oriented Language) and FORTRAN (Formular Translation)."  ^ Knuth, Donald E.; Pardo, Luis Trabb, “Early development of programming languages”, Encyclopedia of Computer Science and Technology (Marcel Dekker) 7: 419–493  ^ London, Keith (1968). “4, Programming”. Introduction to Computers (1st ed.). 24 Russell Square London WC1: Faber and Faber Limited. p. 42-43  ^ London, Keith (1968). “4, Programming”. Introduction to Computers (1st ed.). 24 Russell Square London WC1: Faber and Faber Limited. p. 48  ^ London, Keith (1968). “4, Programming”. Introduction to Computers (1st ed.). 24 Russell Square London WC1: Faber and Faber Limited. p. 63-64  ^ London, Keith (1968). “4, Programming”. Introduction to Computers (1st ed.). 24 Russell Square London WC1: Faber and Faber Limited. p. 65  Campbell-Kelly, Martin (1980). “Programming the Mark 1: Early Programming Activity at the University of Manchester”. Annals of the History of Computing (IEEE) 2 (2): 130–167. doi:10.1109/MAHC.1980.10018.  Garcia Camarero, Ernesto (1961) (スペイン語). AUTOCODE un sistema simplificado de codificacion para la computadora MERCURY. Universidad de Buenos Aires. pp. 70. http://elgranerocomun.net/AUTOCODE-un-sistema-simplificado.html  London, Keith (1968). Introduction to Computers. pp. 261  Knuth, Donald E.; Pardo, Luis Trabb (1976). "Early development of programming languages". Stanford University, Computer Science Department. Brooker, R. A. (1 January 1958). “The Autocode Programs developed for the Manchester University Computers” (英語). The Computer Journal 1 (1): 15–21. doi:10.1093/comjnl/1.1.15. ISSN 0010-4620.  Brooker, R. A. (1 March 1958). “Further Autocode Facilities for the Manchester (Mercury) Computer” (英語). The Computer Journal 1 (3): 124–127. doi:10.1093/comjnl/1.3.124. ISSN 0010-4620.  Clarke, B. (1 April 1959). “The Pegasus Autocode” (英語). The Computer Journal 1 (4): 192–195. doi:10.1093/comjnl/1.4.192. ISSN 0010-4620.  Titan Autocode programming manual. Cambridge, University Mathematical Laboratory. (1967)  Gill, Stanley, ed (1968). “1.5. Recursion in Functional Programming”. Recursive techniques in programming. Macdonald Computer Monographs (1 ed.). London: Macdonald & Co. (Publishers) Ltd.. p. 8  (viii+64 pages) The Autocodes: a User's Perspective