Calculator[1])は、初期のイギリスのコンピュータのひとつ[2]。このマシンはジョン・フォン・ノイマンがまとめたEDVACについてのレポート(EDVACに関する報告書の第一草稿)に刺激され、モーリス・ウィルクスとケンブリッジ大学の数学研究所のチームが開発した。EDSACは、世界初の実用的なプログラム内蔵方式の電子計算機であるが、プログラム内蔵方式の世界初の稼働したマシンではない[3]。1949年5月6日、EDSAC上で最初に動作したプログラムは、0から99までの整数の二乗の表を作るプログラムと[4]、素数のリストを作るプログラムであった。外部リンク技術概要[編集]ハードウェア構成[編集]EDSACが開発されると即座に大学の研究用に使われ始めた。3000本の真空管を使用し、消費電力は12kW。主記憶装置には水銀遅延管を使用している。入力には5孔の紙テープを使用し、出力にはテレタイプ端末を使用している。当初、レジスタとしてはアキュムレータと乗算器用レジスタしかなかった。1953年、デビッド・ホイーラーがイリノイ大学から戻ると、インデックスレジスタを設計してEDSACのハードウェアを拡張している。記憶装置と命令[編集]主記憶容量は1024ワード(1ワード(ショートワード)は17ビット)だが、実際にメモリが実装されたのは512ワードまでだった。ロングワードは35ビットで、偶数アドレスと奇数アドレスのショートワードを、真ん中に「サンドイッチビット」と呼ばれるビット(記憶装置の都合によるスタートビット兼ストップビットのようなものがそのまま入る)を挟んで連続して使用する。数値は2の補数表現の二進数である。18個の命令を備えていた。17ビットのショートワード先頭5ビットが命令コードだが、紙テープの文字コードをそのまま使い、ニーモニックの文字コードを命令コードとしていた。その後に1ビットの未使用ビットをはさみ、10ビットのメモリアドレスがあり、最後の1ビットはオペランドがショートワードなのかロングワードなのかを指定する。なるよう設計されている。小数点は符号のすぐ後にある。アキュムレータは71ビット幅で、35ビットのロングワード同士の乗算を行っても切捨てが起きないよう設計されている。[5]、左シフト、右シフト、乗算器用レジスタへのロード、アキュムレータの内容のストア(オプションでアキュムレータをクリア)、条件付スキップ、入力テープ読み込み、文字印字、アキュムレータを丸める、NOP、ストップなどがある。除算命令はなく(サブルーチンで実装)、アキュムレータに直接メモリからロードする命令もない(アキュムレータをストア命令でゼロクリアしてから[6]加算命令で「ゼロに該当の値を加算」することで、ロードと同様の結果になる)。スイッチ群で実装されていて、起動時にメモリの先頭ワード群にロードされる。1949年5月には、上述したニーモニック設計を生かした初歩的なアセンブラの機能がわずか31ワードのイニシャルオーダに搭載されている[7]。これが世界初のアセンブラであり、ソフトウェア産業の出発点とも言える。EDSACは同大学の様々な実際の問題を解くのに使われ、今日のオペレーティングシステムに含まれるような様々な技法が考案された。ユーザーはプログラムをアセンブリ言語で書くと、紙テープをさん孔して入力の準備をする。ユーザーは紙テープを見てコードを読み取れるようになった。準備ができると、紙テープを読取装置の近くにある紐に引っ掛ける。オペレータはその紐に引っ掛けられた紙テープ群から1つを選び、EDSACに読み込ませる。これがいわゆるジョブキューの役割を果たした。プログラムの実行によってプリントアウトされたものと紙テープはユーザーに返される。何も出力されない場合は停止したメモリ位置をユーザーに知らせる。デバッガはまだなかったが、ブラウン管を使って指定したメモリ位置の内容を表示することができた。これは例えば数値が収束しているかどうかを見るのに使われた。通常業務時間が終了すると、許可を得たユーザーが自らマシンを操作でき、真空管が故障しない限り夜遅くまで使っていたが、あるユーザーによれば真空管の故障はよく起きたという[8]。プログラミング技法[編集]初期のプログラマは今日では推奨されない技法、特にコード書き換えを使う必要があった。当初インデックスレジスタがなかったため、配列にアクセスするには命令内のアドレス部分を実行時に書き換えてやる必要があった。デビッド・ホイーラーはこのプロジェクトで世界初の計算機科学のPhDを取得したが、サブルーチンの概念の発明者とされている。サブルーチン側はその渡されたアドレスで最後尾のジャンプ命令のアドレス部を書き換える。この書き換えをサブルーチンの先頭で行えば、さらに別のサブルーチンコールを呼ぶ、入れ子を実現することもできる(再帰はできない、ということに注意)。当時はリロケータブルバイナリなどといったものがあるわけでは当然なく、プログラマがジャンプ先の位置を計算する必要があり、各ルーチンの長さを予め正確に知っている必要があった。サブルーチンはあらかじめマスターテープとして作られており、それをテープ上でプログラム本体の後ろに続けてコピーするというならば「人力リンク」のような作業が行われていた(そのため、サブルーチンの先頭位置はプログラムによって異なるが、コーディングの際には事前のアドレス計算により求めておく必要があった)。いう書籍として公刊し、世界的に広く読まれた、ということが挙げられる。当時は米国の一部のコンピュータのように、軍や兵器や米国の安全に関与しているため秘密にすることが強要され知見が全く共有されなかった等といった例もあった中で、同書は世界的に「プログラミング」の実例を広めたのみならず、その後にプログラム内蔵方式(乃至、ノイマン型)コンピュータを設計する者への指針ともなったなど、広く世界に貢献した。アプリケーションソフトウェア[編集]サブルーチンの概念からライブラリができるようになった。(do-while文、while文、for文)ベクトル、行列EDSACの利用例[編集]1950年、ウィルクスとホイーラーはロナルド・フィッシャーの論文[10]にあった遺伝子頻度に関する微分方程式をEDSACで解いた。これは生物学分野での世界初のコンピュータ利用である。1951年、ミラーとホイーラーは当時としては最大の79桁の素数を発見した[11]。いうプログラムをEDSAC上で作成した。これが画面写真が残っている世界初のコンピュータゲームである。稼働は終了した)1960年代、楕円曲線に関する数値演算に使われた。具体的には、バーチ・スウィンナートン=ダイアー予想(BSD予想)を導いた計算である。1958年に動作を開始した。