Comments
Description
Transcript
プログラミング言語
2007年度 早稲田大学理工学部CS学科 プログラミング言語論 Part 01: プログラミング言語 小野 康一 (ONO, Kouichi) [email protected] 「プログラミング言語論」って? 「プログラミング言語」+「論」 「論」=理論/Theory 「プログラミング言語」についての理論 この場合の「理論」って何? 「プログラミング言語はどのようなモノ(概念や基盤) から成り立つのか」という話の体系 では、「プログラミング言語」って何? 2007年度 早稲田大学 CS学科 プログラミング言語論 「プログラミング言語」って? 「プログラミング」+「言語」 「言語」は何となくわかる、ような気がする 本当だろうか 「情報数学」でその基盤はやったはず オートマトン, 文脈自由文法, … 「プログラミング」って? 「プログラム」を書くこと、のはず 「プログラミング言語」=「プログラムを書くための言 語」? じゃあ、「プログラム」って? 2007年度 早稲田大学 CS学科 プログラミング言語論 「プログラム」って? とりあえず、以下のように定義してみよう: 「コンピュータに対する計算の指示」 「指示」って? 「計算」って? 「コンピュータ」って? 計算機=「計算」をする「機械」 また「計算」が出てきた… どんな性質を持つ「機械」なら「コンピュータ」なのか? 思考実験: 電卓は「コンピュータ」か? 2007年度 早稲田大学 CS学科 プログラミング言語論 電卓は「コンピュータ」か? 前提 電卓の中身に何らかのプロセッサ(CPU)が使用され ていることが多い その観点からすれば、「電卓はコンピュータ」、という ことになる(厳密には、「電卓がコンピュータでできて いる」) しかし、いま考えようとしているのは、そういうことでは なく、電卓の機能を有する機械は、コンピュータとして の要件を満たすか? ということ 言い換えると、中身ではなく、外から見た振舞や性質 が、コンピュータと呼べるものなのかどうか、というこ と 2007年度 早稲田大学 CS学科 プログラミング言語論 電卓は「コンピュータ」か? YES派の主張 電卓は「計算」をする「機械」じゃないか 電卓に数式を入力して、最後に “=” を押 すと、計算結果が出力される つまり、電卓という「コンピュータ」において、 「プログラム」は数式であり、“=”を押すこと がその実行に相当する、はずだ 2007年度 早稲田大学 CS学科 プログラミング言語論 電卓は「コンピュータ」か? NO派の主張 じゃあ、その「プログラム」をもう一度実行し たいときはどうするの? もう一度、同じ数式を入力する? 以前に入力した数式をもう一度使うことは できない? 以前の数式を少し変更したい場合は? 再入力するしかない? 2007年度 早稲田大学 CS学科 プログラミング言語論 電卓は「コンピュータ」か? 反論 YES派の反論 入力履歴を扱えるものもまれにある NO派の反論 じゃあ、入力履歴を扱えない大半の「普通の電卓」 は、「コンピュータ」ではないんだね? 2007年度 早稲田大学 CS学科 プログラミング言語論 電卓は「コンピュータ」か? 再反論 YES派の再反論 入力履歴を扱える電卓でも、過去の入力を取り出すには何 らかの指示を電卓に与える必要がある その指示を入力するのと、数式を再入力するのに、大きな 違いはないはずだ よって「普通の電卓」だってコンピュータだ NO派の再反論 「プログラム」が数式だとしたら、「データ」は何? 全部の入力が「プログラム」で、「データ」がない機械は「コ ンピュータ」じゃないはずだ あるいは逆に、入力の全部が「データ」で、「プログラム」が ない機械も「コンピュータ」じゃないはずだ 2007年度 早稲田大学 CS学科 プログラミング言語論 「コンピュータ」って? ある機械が「コンピュータ」であるためには? どんなモノを持っていればいい? どんな機能を持っていればいい? 「計算をする機械」が「コンピュータ」になるまでの歴史を 考えてみよう どこかで「コンピュータ」になったはずだ 最初の「コンピュータ」は何だ? 2007年度 早稲田大学 CS学科 プログラミング言語論 そろばん(に類するもの) 砂そろばん(BC3000∼2000頃) 古代メソポタミア文明 砂の上に線を引き、その上に石を並べて、計算に使用 線そろばん(BC500頃) 古代エジプト, 古代ギリシア, 古代ローマ 盤の上に線を引き、その上に石を並べて、計算に使用 溝そろばん(BC300∼AD400頃) 古代ローマ 盤の溝にはめ込まれた珠(石)を動かして、計算に使用 2007年度 早稲田大学 CS学科 プログラミング言語論 溝そろばん AD200頃の古代ローマの溝そろばんのレプリカ ©東京理科大学 http://www.rs.kagu.sut.ac.jp/~infoserv/museum/si/p21-2.html 2007年度 早稲田大学 CS学科 プログラミング言語論 そろばん 算盤 古代中国の「數(数)術記遺」にその原型が記載 木の枠に木製の珠を入れて動かす 後漢の徐岳の著(2世紀)/脚注者の北周の甄鸞(けんら ん)の著(6世紀)とも それ以前は、算,籌(ちゅう),策という器具を使っていた (日本では算木と呼ばれた) 日本には宋代(南宋)/室町時代に伝わったとされる 「そろばん」の語源は、「算盤」の唐音「すわんばん/そわ んぱん」という説が有力 琉球語の「スヌパン」「スルバン」が語源とする説もあり 2007年度 早稲田大学 CS学科 プログラミング言語論 そろばんは「コンピュータ」か? たぶん違う なぜだろうか 持っていたモノ/機能 計算対象の「数」の、何らかの手段による表現 珠(石)の配置 計算過程における途中の状態(数)の記憶 配置による簡単な記憶 持っていなかったモノ/機能 演算能力 加算のための珠の移動などは自分でする必要あり 演算の自動処理 桁上がりなど etc. 2007年度 早稲田大学 CS学科 プログラミング言語論 歯車式計算機: ダ・ヴィンチの計算機 ダ・ヴィンチの歯車式計算機 スケッチのみ Leonardo di Ser Piéro da Vinci (Vinci村, イタリ ア/1452.04.15-1519.05.02) 2007年度 早稲田大学 CS学科 プログラミング言語論 歯車式計算機: Rechenuhr (1623) Rechenuhr = Rechen(計算)+Uhr(時計) Wilhelm Schickard (ドイツ/1592-1635) Tübingen大学教授 加算・減算の他に乗算機能を有していた(除算も半機械的 に可能だったらしい) 現物は焼失し、本人を含めた家族が伝染病の腺ペストで 亡くなったため、忘れられていた Johannes Kepler宛ての書簡の中でRechenuhrにつ いて述べていた 歴史家Franz Hammerにより書簡が発見され(1935, 1956)、Rechenuhrは再現された 2007年度 早稲田大学 CS学科 プログラミング言語論 歯車式計算機 (cont’d) Pascaline/パスカリーヌ (1642-1643) Blaise Pascal (フランス/1623.06.191662.08.19): 数学者, 哲学者 「パスカルの計算機」 加算と減算 Stepped Reckoner (1674) Gottfried Wilhelm Leibniz (ドイツ/1646.07.11716.11.14): 数学者, 哲学者 四則演算 「Leibnizの歯車」: 歯車というよりも、溝つきのドラム 2007年度 早稲田大学 CS学科 プログラミング言語論 Pascaline Pascaline © IEEE 2002 2007年度 早稲田大学 CS学科 プログラミング言語論 歯車式計算機の系譜 Thomasの卓上計算機 (1820) Charles Xavier Thomas (フランス) Brunsviga社(ドイツ)などにより生産 Baldwinの卓上計算機 (1875) Frank Stephen Baldwin (アメリカ) Odhnerの卓上計算機 (1891) Willgodt Theophil Odhner (スウェーデン) 機械式卓上計算機として一応の完成をみる 多くのメーカにライセンス: Brunsviga社など 2007年度 早稲田大学 CS学科 プログラミング言語論 歯車式計算機の系譜 (日本) 自動算盤 (1903) 矢頭良一 (日本) http://www.ipsj.or.jp/katsudou/museum/computer/yazu .html 日本で最初の機械式卓上計算機 独自の発想 (そろばんの機械化): 2-5進法 タイガー計算器 大本虎次郎 (日本) Brunsviga社のOdhner式卓上計算機を元に国産計算機を開 発・商品化 当初「虎印計算器」で発売したが売れず、その後「タイガー計算 器」に名称変更したら普及した 一般名詞として定着 累計販売台数(1970年頃まで) 50万台 http://www.ipsj.or.jp/katsudou/museum/computer/0010 .html 2007年度 早稲田大学 CS学科 プログラミング言語論 タイガー計算器 タイガー手廻計算機 © 株式会社タイガー http://www.tiger-inc.co.jp/temawashi/temawashi.html 2007年度 早稲田大学 CS学科 プログラミング言語論 歯車式計算機は「コンピュータ」か? 持っていたモノ/機能 計算対象の「数」の表現 歯車の角度 計算過程における状態の記憶 歯車の角度の保存 いくつかの(有限個の)基本的な演算能力 四則演算: 加算, 減算, 乗算, 除算 それらの演算の組合せで目的の計算を実現 演算にまつわる処理の機械化(自動化) 桁上がりなど 持っていなかったモノ/機能 動力 基本的に手回し式計算機 「プログラム」 他には? 2007年度 早稲田大学 CS学科 プログラミング言語論 Charles Babbage Charles Babbage, Sir (UK/1791.12.26-1871.10.18) ケンブリッジ大学ルーカス講座教授(1828∼1839年) ルーカス講座教授職にはIsaac Newton(1699年就任), Stephen William Hawking(1979年就任)など 数表(対数表など)の自動計算 数表はさまざまな用途で用いられる 航海に用いる対数表など 数表の作成は人手 (当時としては高度な知的作業だった) 計算の誤りは多かった 活字で組反して印刷する段階での誤りもよくあった だったら機械にやらせてしまえばいい 多項式の自動計算機 多項式は、何次かの階差計算で求めることができる(有限階差法) 多くの関数も、多項式で近似できる場合が多い(対数など) なお、階差計算を機械に実行させるというアイデア自体はBabbage 以前にもあったらしい 2007年度 早稲田大学 CS学科 プログラミング言語論 Difference Engine (階差機関/差分機関) Difference Engine “Computer”や“Calculator”ではなく、なぜ “Engine” ? Steam Engine (蒸気機関)からのanalogyだったと思われ る (産業革命の時代) 階差機関の動力として、蒸気機関を想定していた 1819年頃: 私財を投じて作成に着手 1823年: 英国政府の資金援助を受けて開発が本格化 1832年: 一応の試作機を作成 その後、開発は中断 完全主義者のBabbageと職人との軋轢 政府の資金援助も停止 第二階差機関の設計 (装置の簡略化、高機能化) 2007年度 早稲田大学 CS学科 プログラミング言語論 階差計算 (有限階差法) 例: f(x)=x2 となる関数f(x)の作表をしたい。 x f(x) 階差 階差 1 1 2 4 3 3 9 5 2 4 16 7 2 5 25 9 2 6 36 11 2 2次の階差(差分)を求めると定数(2)になる。 この計算を逆にすると、初期定数(2)を元に、階差の加算のみで f(x)=x2 の作表ができることになる。この場合、数列に対する階 差の加算を2回おこなえば、f(x)=x2 の作表ができる。 初期定数と階差の次数を変えれば多種の多項式が計算できる。 2007年度 早稲田大学 CS学科 プログラミング言語論 階差機関 (試作機) Difference Engine © IEEE 2002 2007年度 早稲田大学 CS学科 プログラミング言語論 階差機関は「コンピュータ」か? 持っていたモノ/機能 計算対象の「数」の表現 歯車の角度 計算過程における状態の記憶 歯車の角度の保存 階差計算の途中の数列の記憶 いくつかの(有限個の)基本的な演算能力 加算、減算: 階差計算のみ表現可能 演算にまつわる処理の機械化(自動化) 桁上がりなど 出力手段(印刷機能) 印刷も機械的におこなえば人手による誤りはなくなる 動力 蒸気機関を想定 2007年度 早稲田大学 CS学科 プログラミング言語論 階差機関は「コンピュータ」か? (cont’d) 持っていなかったモノ/機能 加減算以外の演算能力 基本的に、階差計算以外はできない 「プログラム」 他には? 2007年度 早稲田大学 CS学科 プログラミング言語論 Analytical Engine (解析機関) 階差機関: 何回かの階差計算の繰返しで、必要な作 表が達成 単独の階差計算は階差機関が自動的におこなえるが、そ れを何回か繰り返す処理は人間がおこなう必要がある その処理も機械的にできないか 以下のことが実現できれ ばいいはずだ n回目の階差計算の出力をn+1回目の階差計算の入 力に与える 階差計算の繰り返しの判断をする それらの指示および演算の手順を表現したものを解析 機関の外部から入力として与えることができれば、毎回 異なる計算ができる プログラム 2007年度 早稲田大学 CS学科 プログラミング言語論 Analytical Engine (解析機関) Analytical Engine 4つの機能ブロックから構成 入力部: データおよびプログラム 入力手段としてJacquard Loomの応用を想定 出力部 記憶部(Store) 演算部(Mill) 1833年頃にBabbageが構想 2007年度 早稲田大学 CS学科 プログラミング言語論 Jacquard Loom (ジャカール織機) Joseph Marie Jacquard (フランス/1752.07.07-1834.08.07) 1801年 パリの産業博覧会に出品 Jacquard Loom 織物の模様は、横糸をどの縦糸(経糸)の上に通すかで決定 縦糸(経糸)の上下開口の指示をパンチカードで表現 穴の有無=対応する縦糸(経糸)の上下開口の有無 縦糸(経糸)の上下開口を自動化 省力化 現在でも、Jacquard Loomで織られた織物は「ジャカール織」(また は、英語読みで「ジャカード織/ジャガード織」)と呼ぶ Analytical Engine Analytical Engineに対する処理の指示をパンチカードで与える プログラムの外部表現 2007年度 早稲田大学 CS学科 プログラミング言語論 Jacquard Loom Jacquard Loom and Punch Card, photo taken by George H. Williams 2004 at Museum of Science and Industry, Manchester, England, UK 2007年度 早稲田大学 CS学科 プログラミング言語論 Ada (エイダ) Augusta Ada (1815.12.10-1852.11.27) ロマン派詩人バイロン(George Gordon Noel Byron, Lord/1788-1824)の娘 Byron: 「ある朝、目が覚めてみると有名になっていた」 (Childe Harolde’s Pilgrimage) 母親はAnne Isabella (Annabella) Milbanke (1792-1860) Adaを出産後まもなく離婚 (1年弱の結婚生活) 1834年: William King(後にラブレイス伯爵Earl of Lovelace)と結婚しラブレイス伯爵夫人(Countess of Lovelace)となる 1833年: Babbageと出会う 2007年度 早稲田大学 CS学科 プログラミング言語論 AdaとBabbage 1833年: Babbageと出会う 母Anneは数学者William Frendに数学を教 わっていた AdaはFrendの娘婿のAugustus De Morgan (ド・モルガンの定理の発案者)に数学を教わる De Morgan夫人の紹介でBabbage宅で階差機 関の説明をBabbage本人から聞く De Morganは孤独癖があった(つまり人嫌いだった) 夫のためにDe Morgan夫人は多くの学者たちと会う 機会を設けた Babbageもそのような経緯でDe Morganと出会っ た 2007年度 早稲田大学 CS学科 プログラミング言語論 Adaと階差機関/解析機関 AdaはBabbageの階差機関/解析機関の最大の理 解者となる Babbageがイタリア・ジェノア(ジェノバ)でおこなった解析 機関に関する講演の記録(イタリア・トリノの軍事技術者 Luigi Federico Menabreaがフランス語で記述/1842 年)を、英語に翻訳し、多くの記述の誤りを訂正/補足する 注釈をつけた”Sketch of the Analytical Engine invented by Charles Babbage”を出した カード(パンチ・カード)の集まりを読み戻してもう一度実行 する方法について技術的に考察 「サブルーチン」の考え Adaは解析機関の「プログラム」をいくつも書いたことから、 「世界初のプログラマ」と一般には呼ばれる。ただし、 Babbageの考えたアルゴリズムを解析機関のプログラム としてコーディングした、というのが実際のようである 2007年度 早稲田大学 CS学科 プログラミング言語論 Adaとプログラミング言語 Adaの名はプログラミング言語の名前になっている プログラミング言語Ada アメリカ国防総省(DoD)が主に組み込みシステム向けの 言語として国際競争入札で決定 Ada83 規格番号 MIL-STD-1815 (1815はAdaの生年) Strongly Typing(強い型付け) Generic Type(総称型, 汎用型) Generic Programmingともいう Package(パッケージ) Exception Handling(例外処理) Concurrent Programming(並行プログラミング) 2007年度 早稲田大学 CS学科 プログラミング言語論 解析機関 (デモ用に製作した試作機) Analytical Engine © The Science Museum, London, England, UK 2007年度 早稲田大学 CS学科 プログラミング言語論 解析機関は「コンピュータ」か? 持っていたモノ/機能 計算対象の「数」の表現 歯車の角度 計算過程における状態の記憶 歯車の角度の保存 いくつかの(有限個の)基本的な演算能力 条件判断・繰返し 汎用性 演算にまつわる処理の機械化(自動化) 桁上がりなど 動力 蒸気機関を想定 プログラム プログラムが解析機関の動作を制御 プログラム制御方式 解析機関の外部に存在 2007年度 早稲田大学 CS学科 プログラミング言語論 解析機関は「コンピュータ」か? (cont’d) 持っていなかったモノ/機能 電気的/電子的な回路による計算機構 高速化へのbottleneck 解析機関内部におけるプログラムの記憶 他には? 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIAC ENIAC: Electronic Numerical Integrator And Calculator よく、「世界初のコンピュータ」という呼ばれ方 をする 本当なのだろうか? そもそも、何が「世界初」なのだろうか? 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIAC: 関係者 University of Pennsylvania, Moore School/ペンシルヴァニア 大学 ムーア校 John William Mauchly (1907.08.30-1980.01.08/US) 当時: Ursinus College 物理学科教授 ムーア校のチームに参加 高速な計算機があれば完璧な気象予測ができると考えられていた John Presper Eckert (1919.04.09-1995.06.05/US) 当時: 同校 大学院生 電子工学専攻, 電子工学研究室 助手 電子回路のエキスパート US Army Ballistic Research Laboratory/アメリカ陸軍 弾道研 究所 Herman Heine Goldsteine (1913.09.13-2004.06.16/US) 弾道計算表の作表のために高速かつ正確な計算機を必要としていた アナログ計算機(ex. ロックフェラー微分解析機)だと精度に難があった 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIAC: 開発プロジェクト PX Project (ENIAC開発プロジェクト) 開始: 1943年6月5日 開発費用: USD 約490,000 真空管 17,468本, ダイオード 7,200個, 抵抗器 約70,000個, キャパシタ 約10,000個 幅 24m, 高さ 2.5m, 奥行 0.9m, 総重量 30ト ン, 消費電力 150kW プログラム: ハードウェア(プログラム線)で実現 10進演算 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIAC ENIAC © U.S. Army Photo 2007年度 早稲田大学 CS学科 プログラミング言語論 真空管式計算機と実用性 1943年当時、真空管を使って実用的な汎用 計算機を作るのは無理だと考えられていた もちろん、トランジスタやICなどはまだこの時点 では存在していない したがって、真空管はこの時点では最新の電 子部品だった 当時の実用的な計算機はすべて非・真空管式 アナログ計算機 リレー式計算機 2007年度 早稲田大学 CS学科 プログラミング言語論 当時の実用的な(非・真空管式)計算機 アナログ式計算機 ロックフェラー微分解析機 (1941年12月/US) 2007年度 早稲田大学 CS学科 プログラミング言語論 当時の実用的な(非・真空管式)計算機 リレー式計算機 Bell Relay Computers (US) Model I (1940年1月) 複素数計算 Model II (1943年9月) 高射砲の照準計算 Model III (1944年6月) 弾道計算 Harvard Mark I/IBM ASCC (1944年/US) 汎用計算機 1943年時点では存在していない Enigma暗号解読機 BOMBE (1940年/UK) BOMBEは暗号解読のための機械であり、計算機とは言い がたい 2007年度 早稲田大学 CS学科 プログラミング言語論 当時の真空管式計算機 試作機レベルの真空管式計算機ならあった ABC/Atanasoff-Berry Computer (1939∼ 1942年/US) 実は、実用的な真空管式計算機はあった Colossus Lorenz SZ40/42暗号解読用 電子計算機 (1943,1944年/UK) しかし、完全な「汎用の」電子計算機ではなかった しかも軍事機密だったため、その存在は極秘にされて いた 2007年度 早稲田大学 CS学科 プログラミング言語論 真空管式計算機は実用にならない? なぜ真空管で実用的な計算機を作ることはで きないと考えられていたのか? 耐久性/信頼性に問題があった 平均寿命: 約2000時間 約18,000個の真空管を使用する計算機を稼動さ せた場合、故障の発生する頻度は? 仮定: 1個でも故障したら計算機全体が動作不能に なる 平均故障間隔(MTBF; Mean-Time Between Failure) 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIACは真空管の問題をどう解決したか? 定格電圧よりもかなり低い電圧で稼動させた もちろん真空管メーカの動作保証外 どこまで下げても動かせるかを試行錯誤 定格電圧の10%程度にまで下げたらしい 故障率: 2∼3本/週 稼働率 電源を入れたままの運用: 90% 毎晩電源を落とす運用: 50% 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIACは真空管の問題をどう解決したか? メモリを「リングカウンタ」単位で構成した 「リングカウンタ」は10進1桁の記憶ユニット ENIACの演算は10進数 10個のFlip-Flop 1個のFlip-Flopは2個の真空管から構成 20個の真空 管で1ユニット リングカウンタユニット内に故障検出回路も持つ 故障を検知したらリングカウンタユニットを丸ごと交換 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIACは「コンピュータ」か? 持っていたモノ/機能 計算対象の「数」の表現 リングカウンタによる10進数 計算過程における状態の記憶 リングカウンタのFlip-Flopの状態 いくつかの(有限個の)基本的な演算能力 条件判断・繰り返し 汎用性 演算にまつわる処理の機械化(自動化) 桁上がりなど 動力 電力 プログラム プログラム線 (ハードウェアとしてのプログラム) 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIACは「コンピュータ」か? 持っていなかったモノ/機能 内部におけるプログラムの記憶 (ソフトウェアとし てのプログラム) 他には? 2007年度 早稲田大学 CS学科 プログラミング言語論 ABC (Atanasoff-Berry Computer) 開発者 John Vincent Atanasoff (1903.10.041995.06.15/US) Iowa State University 助教授 (物理学科, 数学科) Clifford Edward Berry (1918-1963/US) 同大学院生 (学部: 電気工学/1939, 修士: 物理学 /1941, 博士: 物理学/1948) 動機: 学生たちが、物理の問題を解くための計算に時 間の大半を取られてしまい、学問の本質的なところに 時間を使うことができない 計算は機械にやらせるべ きだ 2007年度 早稲田大学 CS学科 プログラミング言語論 ABCの特徴 メモリユニット ENIACのように、メモリを真空管によるFlip-Flopで実現しようと すると、膨大な数の真空管が必要になる 高コスト 信頼性の問題 コンデンサドラム式メモリ コンデンサをドラム上に配置し、チャージした電荷でbitを表現 自然放電するので、ドラムを一定速度で回転させ、定期的に再チャー ジ(jogging) 現在のDRAMのrefresh 問題: ドラムは一定速度で定常回転しているので、読みたい位置のメ モリをアクセスするためには、最大1回転待たなければならない sequential access memory(逐次アクセスメモリ) 論理演算ユニット 演算: 2進法 2007年度 早稲田大学 CS学科 プログラミング言語論 ABCの開発 真空管: 約300本 費用: USD 約650 開発期間: 1939∼1942年 (未完成) 戦時召集によりAtanasoffたちが大学を離れ、そ の後、彼の研究室に置かれていたABCも解体され て、その存在は忘れ去られた 非・汎用計算機 ガウス消去法による連立一次方程式の解を計算す ることを目的とした 2007年度 早稲田大学 CS学科 プログラミング言語論 EnigmaとBOMBE 暗号機Enigma (エニグマ) Enigma暗号解読器BOMBE (ボンブ) 英国情報部(British Intelligence) / 英国外務省 暗号研究所 Bletchley Park (ブレッチリー・パーク) ロンドン北方約70kmにある田園地帯Bletchleyに設置さ れた暗号通信傍受・解読センター 英国中から数学者・技術者・ドイツ語研究者・暗号エキス パートを集めた Alan Mathison Turingも参加 2007年度 早稲田大学 CS学科 プログラミング言語論 暗号機Enigma (エニグマ) ドイツ語: 謎, 不可解な言葉 語源: ギリシア語 ainigma ainos (はなし) 3枚のローター(右・中央・左にそれぞれ配置) 1枚のローターは両面に26個の接点を持つ( ローマ文字と対応) 両面の各接点はローター内部で「ランダムに」接続される ローターの組み合わせは、ある文字を別の文字に変換する「転 字表」になる キーを押すたびに、右のローターが1ステップ回転する 右のローターが一回転すると、中央のローターが1ステップ回転 する 中央のローターが一回転すると、左のローターが1ステップ回転 する 左のローターが一回転すると、右のローターが1ステップ回転す る ( 263の周期) 2007年度 早稲田大学 CS学科 プログラミング言語論 Enigmaとbomba、そしてBOMBE 1920年代 商業用暗号機として販売 1933年 ナチスが政権につくと販売中止 軍用に転用 ポーランド人数学者Marian Rejewski (マーリヤーン・レ イェフスキー)によって解読 解読装置bomba(複数形bomby): ポーランド語で「爆弾」 1938年12月 ドイツ軍 Enigmaを改良 (ローターを2枚追 加) 1939年7月25日 ポーランド情報部 Enigma解読技術およ びbombaを英国/フランス情報部に開示 1940年 Enigma暗号解読機BOMBEにより解読 2007年度 早稲田大学 CS学科 プログラミング言語論 BOMBE BOMBE (ボンブ) 108個の回転ドラム Enigma 36台分の組み合わせ リレー回路でローター内部の接続の組み合わせを実現 総当りでローター内部の接続の組み合わせ(=暗号鍵)を解く 2007年度 早稲田大学 CS学科 プログラミング言語論 Colossus Lorenz SZ(Schlüsselzusatz) 40/42暗号 ヒトラー⇔SS(親衛隊)の極秘通信に使用 暗号解読機 BOMBE同様、Bletchley Parkで開発 Colossus以前 試作1号機 Peter Robinson 試作2号機 Robinson and Cleaver 試作3号機 Heath Robinson Colossus: Turingの提案で真空管式計算機として開発 (1943年開始) Colossus Mark I (1943年2月設計/1943年12月8 日完成) Colossus Mark II (1944年6月完成) 2007年度 早稲田大学 CS学科 プログラミング言語論 Colossus Mark II Colossus Mark II (1944年) 真空管: 約2400本 演算: 2進法 プログラム: ハードウェア (一部固定、一部はプロ グラム差替え可能) 暗号解読専用計算機だったが、ある程度の汎用計 算もできたらしい オーバーロード作戦(ノルマンディー上陸作戦)でも 使用されたらしい 2007年度 早稲田大学 CS学科 プログラミング言語論 ColossusとUltra Secret Winston Churchill (当時 首相)がBletchley Parkでの暗号解 読に関する情報を「私のUltra Secret (極秘情報)」と呼んだこと から、解読された情報は「ウルトラ情報」と呼ばれた Bletchley Parkでの暗号解読作業も、そこでBOMBEや Colossusが開発されていることも、すべてが極秘とされた Churchillは、BOMBEによって暗号が解読されていることをド イツ軍に知られるのを避けるために、Coventry/コヴェントリー へのドイツ空軍による爆撃の情報を事前に知りながら、それを 黙殺した、と言われている それらは、第二次大戦の終結後も1970年前半まで秘匿され続け たため、実用的な真空管式計算機であるColossusが第二次大戦 中に(ENIACに先駆けて)開発された、という事実も、それまで公に されなかった 2007年度 早稲田大学 CS学科 プログラミング言語論 EDVAC EDVAC: Electronic Discrete Variable Automatic Computer ENIACの後継プロジェクト プロジェクト開始: 1946年4月 (契約成立) 実質的には、ENIACプロジェクト進行中の1944年頃から構想・ 設計が始まっていた 関係者 ENIACプロジェクトメンバ: John William Mauchly, John Presper Echkert, Herman Heine Goldsteine John von Neumann いわゆる「フォン・ノイマン・アーキテクチャ」を採用した最初のコン ピュータになるはずだった しかし、プロジェクトは遅延することになる 2007年度 早稲田大学 CS学科 プログラミング言語論 John von Neumann 1903.12.28-1957.02.08/Budapest, Hungary 厳密に言うと誕生時点(1903年)ではオーストリア・ハンガリー二 重帝国 本名: Neumann János (ナイマン・ヤーノシュ) Neumannがsurname(姓)、Jánosがgiven name(名) マジャル(Magyar/ハンガリー人)の名前は姓-名の順に表記する。 1913年 父親Neumann Miksaがオーストリア貴族になる。 マジャル貴族は名前の前に地名をつける。父親はMargittaiを選 び(Neumann家には何の関係もない地名だが、妻の名Margit に近いので選んだと思われる)、Margittai Neumann Miksaと 名乗る。 息子のJánosにもMargittai Neumann János Lajos (マルギッタ イ・ナイマン・ヤーノシュ・ラヨシュ) あるいは、オーストリア風にした名 前のJohann Ludwig von Neumannを使わせる。 2007年度 早稲田大学 CS学科 プログラミング言語論 John von Neumann 1930年 Princeton Universityから講師として招聘 され渡米、翌年に教授に就任 1932年 “Mathematical Foundations of Quantum Mechanics” (「量子力学の数学的基 礎」) Werner Karl Heisenbergの量子理論とErwin Schrödingerの波動理論がHilbert空間において同等と 見なせることを証明 1933年 IAS/Institute for Advanced Study (いわゆる「プリンストン高等研究所」) 教授職 1936∼1938年の期間にAlan Mathison TuringがIAS にvisitorとして滞在している 2007年度 早稲田大学 CS学科 プログラミング言語論 John von Neumann 1937年 USに帰化 USでは米国風にJohn von Neumannと名乗る (ニック ネームはJohnny)。 1943年頃 マンハッタン計画(原子爆弾製造計画)に 参加 長崎型原爆(プルトニウム型原爆/Fat Man)の爆縮レンズ の設計を10ヶ月でおこなう 高速な計算機の必要性に気づく 1944年 Goldsteineと知り合い、進行中のENIAC プロジェクトにアドバイザーとして参加 後継プロジェクト (EDVAC) の構想に初期から参加 わゆる「フォン・ノイマン・アーキテクチャ」 2007年度 早稲田大学 CS学科 プログラミング言語論 い いわゆる「フォン・ノイマン・アーキテクチャ」 “von Neumann architecture” stored-program方式と同義に使われることが多いが、 厳密には区別される 例) Harvard architectureはstored-program方式の一つ だが、von Neumann architectureではない 今日のコンピュータの大部分がこのアーキテクチャ 例外: たとえば並列計算機はこのアーキテクチャの定義を満 たさない 我々が「コンピュータ」と呼ぶ場合、暗黙のうちに、あるいは無 意識に、このアーキテクチャを仮定している 2007年度 早稲田大学 CS学科 プログラミング言語論 「フォン・ノイマン・アーキテクチャ」の定義 プロセッサ(CPU)とメモリユニットの分離 バスによる結合 メモリユニットへのプログラムの格納 (stored-program) 線形メモリ メモリユニットに対する線形アドレス(番地)の割付 命令の逐次実行 プログラムカウンタ(PC)による「現在実行中の命令が置か れているアドレス」の指示 固定された(有限個の)命令セット 2007年度 早稲田大学 CS学科 プログラミング言語論 誰のアイデアなのか? 最初に思いついた人物がvon Neumannである とは言いにくい MauchlyとEckertは、ENIACプロジェクト中の 1944年に発案したと主張している 彼らはコンピュータに関する特許を取得し、会社を興そう と考えていた ( UNIVAC I) しかしながら、彼らはコンピュータの実現技術に対しての み興味があり、理論的側面に興味がなかった 2007年度 早稲田大学 CS学科 プログラミング言語論 誰のアイデアなのか? (cont’d) 数学者であるvon Neumannは理論的側面に興味があっ たので、理論的考察を論文として発表した First Draft of a Report on the EDVAC (EDVACに関する報告 第一稿) [1945年6月30日] ENIACに関係する情報は軍事技術扱いのためにほとんど公に なっておらず、この論文が注目された結果、von Neumannが このアイデアの発案者であると周囲が受け取った (そして、von Neumann自身は、その誤解を積極的に解こうとはしなかった) 軍事プロジェクトのために積極的に情報公開できなかった University of Pennsylvaniaが、名声を高めるために世界的 に著名な学者のvon Neumannに論文を書くように勧めた、と いう側面もあると思われる 2007年度 早稲田大学 CS学科 プログラミング言語論 誰のアイデアなのか? (cont’d) Konrad Zuse(ドイツ)が、1936年の特許申請で このアイデアに触れていた しかし、彼が製作した計算機(Zシリーズ)はstoredprogram方式ではなかった しかも、この申請は拒絶されて特許として成立しなかった 代替の適当な呼称がないので、括弧付きで「フォン・ノ イマン・アーキテクチャ」と呼ぶことにする 2007年度 早稲田大学 CS学科 プログラミング言語論 「フォン・ノイマン・アーキテクチャ」 命令解釈回路 論理演算回路 算術演算回路 プロセッサ (CPU) 実行制御回路 レジスタ1 レジスタ2 プログラム・カウンタ (PC) レジスタn プロセッサとメモリユニットの分離 バスによる結合 stored-program バス アドレス メインメモリ 0x010000 線形メモリ メモリユニットに対する線形アドレス(番地)の割付 命令の逐次実行 PCによる「現在実行中の命令が置かれているア ドレス」の指示 ある命令の実行が終了すると、実行制御回路 はPCの値を「その次のアドレス」に自動的に更 新する 0x010004 データ1 0x010008 データ2 0x01000c データ3 0x010010 0x010014 命令1 0x010018 命令2 0x01001c 命令3 0x100018に置かれている命令2を実行し た後、PCの値は0x10001cに更新される : : : 固定された(有限個の)命令セット 0x07fffc 2007年度 早稲田大学 CS学科 プログラミング言語論 EDVACプロジェクトの頓挫と分裂 MauchlyとEckertはEDVACプロジェクトから脱退す る ムーア校は、彼らが申請した特許の放棄を要求 von Neumannと対立の状況にあった彼らは、特許問題を 直接の動機として脱退 これに同調して、ENIACプロジェクトの頃から参加していた ムーア校のメンバの一部もEDVACプロジェクトから脱退 EDVACプロジェクトは進行不能の危機に直面 このため、EDVACプロジェクトはvon Neumannを 中心に再編されて継続したが、開発スケジュールは 遅延を余儀なくされた 2007年度 早稲田大学 CS学科 プログラミング言語論 「フォン・ノイマン・アーキテクチャ」の実現 EDVACプロジェクトが停滞する間に、von Neumannが以前に発表した論文(EDVACに関する 報告 第一稿)を読んだ多くの研究者が、「フォン・ノイ マン・アーキテクチャ」の計算機の開発に挑戦し、 EDVACよりも早く実現させることになる SSEM (The Baby) Ferranti Mark I EDSAC (ACE/Pilot ACE) Manchester Mark I MauchlyとEckertたちは会社を興し、「世界初の商 業用電子計算機」の開発に挑戦する UNIVAC I 2007年度 早稲田大学 CS学科 プログラミング言語論 ENIAC (その後) 完成: 1945年11月 すでに第二次世界大戦は終結 弾道表の作表という当初の目的には使用されず 最初に使用されたプログラム(除 テスト用プログラム) 当時開発中だった水素爆弾のための、熱核連鎖反応に関 する離散計算 図らずも、ENIACが汎用計算機であることを実証 改良 1948年: 一部stored-program方式に改良(read only) von Neumannのアイデア 1948年9月16日にデモンストレーション 2007年度 早稲田大学 CS学科 プログラミング言語論 EDSAC EDSAC: Electronic Delay Storage Automatic Computer Maurice Vincent Wilkes (1913.06.26-/UK) University of Cambridge (ケンブリッジ大学/UK) 初稼動(最初のプログラムの実行): 1949年5月6日 構成 真空管: 約3000本 消費電力: 12kW メモリ: 水銀遅延線(mercury delay line) 1024ワード(1ワード=16bit) 命令: 16個 加算、減算、乗算命令 (除算命令はなかった) 2007年度 早稲田大学 CS学科 プログラミング言語論 メモリの問題 ENIACによる、真空管を用いた電子計算機の高速性が実証 ENIAC以降の多くの計算機は真空管を使用するようになる しかし、計算機の全てを真空管で構成するには、真空管は信頼 性が低く、高価で、また、消費電力も高すぎた 特に、ENIACで真空管を大量に使っている部分はメモリだった よって、制御回路や演算回路は真空管で構成し、メモリは真空 管以外のもので構成するのが、当時としては最適だった メモリを真空管以外の何で構成するか 高速で、信頼性が高く、安価で、記憶容量が大きく、消費電力が低く、 コンパクトなもので構成したい (現代でも同様の要求) stored-program方式にすると、大きな容量のメモリが必要になる 2007年度 早稲田大学 CS学科 プログラミング言語論 各種のメモリ方式 真空管 [ENIAC] 速い。しかし、高価で信頼性も低い。消費電力も高い リレー [Konrad ZuseのZ3] 安価で信頼性が高い、が、遅い。消費電力も高いし、広いスペースも 必要 コンデンサドラム [ABC] 安価で消費電力も低い。しかし、遅い(シーケンシャルアクセス) 水銀遅延線 [EDSAC, EDVAC] 安価で消費電力も低く大容量で信頼性も高いしコンパクト。しかし、 遅い(シーケンシャルアクセス) ウイリアムズ-キルバーン管 [SSEM, Manchester Mark I] Williams-Kilburn Tube 高速(ランダムアクセス)かつ安価でコンパクト 2007年度 早稲田大学 CS学科 プログラミング言語論 伝達遅延を利用した記憶回路 情報の伝達を遅延させるモノを使うと、記憶回路を構 成できる 記憶させたい情報をそのモノに与えて、伝達に要する時間後に読 み取れば、その間、その情報を「記憶」していたことになるから 水銀遅延線 水銀中の音波は、電気信号に比べると、情報の伝達速度が遅い Eckertによる発明 2007年度 早稲田大学 CS学科 プログラミング言語論 水銀遅延線の原理 水銀を詰めた管の両端に水晶振動子(クォーツ)を付け る 電気信号を入力すると、始端の水晶振動子が振動して 水銀に音波を発生する。一定時間後に終端に音波が 到達すると、終端の水晶振動子が圧電効果で電気信 号を出力する 入力信号と同一の出力信号を一定時 間後に得られる。すなわち、記憶回路になる。 音波が終端に到達すると消えてしまう(厳密には反射が 生じる 干渉の原因になるので消す必要がある)。つま り、揮発性メモリ。よって、出力信号を増幅して始端に戻 して入力させる、いわゆるリフレッシュをする必要がある。 2007年度 早稲田大学 CS学科 プログラミング言語論 水銀遅延線によるメモリ 記憶容量 管の長さに比例 EDSACに使用された水銀遅延線は5フィート(約1.5m) 17ビット×32ワード 問題 シーケンシャルアクセス 遅い (水銀中の音速は約1,450m/sなので、EDSACのメモ リアクセス時間は約1ms) 2007年度 早稲田大学 CS学科 プログラミング言語論 EDSAC 2007年度 早稲田大学 CS学科 プログラミング言語論 SSEM(The Baby) University of Manchester Frederic (Freddie) Calland Williams (1911.06.26-1977.08.11/UK) Tom Kilburn (1921.08.11-2001.01.17/UK) SSEM: Small Scale Experimental Machine 初稼動: 1948年6月21日 (EDSACの約10ヵ月半 前) 製作目的 「フォン・ノイマン・アーキテクチャ」の計算機を作る、という目 的よりも、Williams-Kilburn tubeのアイデアがちゃんと機 能するかどうかをテストすることが目的だった 2007年度 早稲田大学 CS学科 プログラミング言語論 SSEM(The Baby)の構成 真空管式 「フォン・ノイマン・アーキテクチャ」 メモリ ウイリアムズ-キルバーン管/Williams-Kilburn tube CRTの蛍光面の前に金属の網と絶縁シートを置いて、電荷 をチャージできるようにした記憶デバイス ランダムアクセス 高速 32ワード (1ワード=32bit) 実用的な記憶容量とは いえない 2007年度 早稲田大学 CS学科 プログラミング言語論 SSEM(The Baby)とManchester Mark I 1948年10月: 英国政府はFerranti社と、SSEMの 設計にもとづく本格的な計算機の納入を契約 Manchester Mark I Intermediary Specification Version SSEMの設計を拡張 機能強化: インデックスレジ スタ, 磁気ドラムメモリ(二次記憶装置)など 完成: 1949年4月 初稼動: 1949年6月16/17日 メルセンヌ素数の計算プログラム 2007年度 早稲田大学 CS学科 プログラミング言語論 Manchester Mark IとFerranti Mark I Manchester Mark I Final Specification Version Manchester Mark I Intermediary Specification Version の設計を拡張 入出力命令など 真空管: 4,200本 Ferranti Mark I Ferranti社による製作 Manchester Mark I Final Specification Versionの設計を 拡張 乗算回路の高速化など 納入: 1951年2月 (世界で2番目の商用コンピュータ; Konrad ZuseのZ4の7ヵ月後, UNIVAC Iの2ヶ月前) 2007年度 早稲田大学 CS学科 プログラミング言語論 ACE, Pilot ACE ACE: Automatic Computing Engine 関係者 NPL/National Physical Laboratory (UK) Alan Mathison Turing (1912.06.231954.06.07/UK) 2007年度 早稲田大学 CS学科 プログラミング言語論 Alan Mathison Turing 1934∼1936年: University of Cambridge “On Computable Numbers with an application to the Entscheidungsproblem” Turing Machine 1936∼1938年: Princeton University および IAS/Institute for Advanced Study (US) von Neumannと会っている 1939∼1945年: Bletchley Park BOMBE, Colossus 1945∼1948年: NPL ACE 1948∼1951年: University of Manchester Manchester Mark I 1950年: “Computing Machinery and Intelligence” Turing Test http://loebner.net/Prizef/TuringArtichle.html 2007年度 早稲田大学 CS学科 プログラミング言語論 ACE: Automatic Computing Engine EDVACとは異なる構想でTuringが設計 1946年2月19日: NPLに提案 しかし、計画が一向に進捗しないことに失望し、 University of Cambridgeに戻ってsabbatical yearを過ごす (1947∼1948年) NPLに電子工学の研究者・技術者がいなかったた め、他の組織・プロジェクトの協力が必要だった そこで、Williams (Manchester Mark I)と Wilkes (EDSAC)と共同作業する相談をしたが、 彼らの設計方針と折り合いがつかなかった 2007年度 早稲田大学 CS学科 プログラミング言語論 Pilot ACE Turingが抜けた後、James Hardy Wilkinsonがプロジェクトを継続 ACEを製作するためのプロトタイプとして Pilot ACEを製作 初稼動: 1950年5月10日 報道機関にデモンストレーション: 1950年12月 構成 真空管: 約800本 メモリ: 水銀遅延線 128ワード (1ワード=32bit) 2007年度 早稲田大学 CS学科 プログラミング言語論 Konrad Zuse Konrad Zuse (コンラート・ツーゼ) 1910.06.22∼1995.12.18日/ドイツ Technische Hochschule BerlinCharlottenburg(現在Technische Universität Berlin/ベルリン工科大学) 土木学科 在学中、同じような計算を何度もしなければならず、 「機械による計算」ができないかと着想 卒業後、Henschel航空機製造に就職するが、1年で 退社し、両親の住宅で計算機の製作を開始 同大学 電機学科のHermut Schreier (ヘルムート・ シュライヤー)の協力を得て、計算機の製作が実現 2007年度 早稲田大学 CS学科 プログラミング言語論 Z1 (Zett erst/1936∼1938年) 当初 “V1” と呼んでいたが、ドイツ軍のミサイル兵器V1と の混同を避けて “Z1” と命名 機械式計算機 メモリ、演算ユニット、制御ユニットを金属板で構成 唯一の電気回路は、同期信号(1Hz)を出力する発振回路のみ 機械的精度が低いために信頼性が悪かった メモリ: 64words (1word=22bits) 浮動小数点 プログラム制御方式 (ただし、stored program方式ではない) ベルリン爆撃で設計図とともに破壊 1987∼1989年にZuse自身の手で再現される 2007年度 早稲田大学 CS学科 プログラミング言語論 Z2 (Zett tweit/1939年) 電機機械式計算機 (電機式計算機) メモリは機械式 (Z1の金属板式メモリを採用) 制御ユニットおよび演算ユニットをリレー回路で構成: 約 200個 16bit固定小数点 機械式計算機の信頼性の問題をリレー回路で解 決できるかどうかを検証するために製作 途中まで製作 (演算ユニットが正しく動作することを確認 し、当初の目的を果たしたため) Z1とともにベルリン爆撃で破壊 2007年度 早稲田大学 CS学科 プログラミング言語論 Z3 (Zett dritt/1939∼1941年) 電気式計算機 全部をリレー回路で構成: 約2200個 演算回路: 約600個 記憶回路: 約1600個 メモリ: 64words (1word=22bits) 浮動小数点演算 パンチカード/テープによる入出力 プログラム制御方式 (ただし、stored program方式で はない) 1941年5月12日にベルリンで公開 Z1, Z2と同様にベルリン爆撃で破壊 1960∼1961年に再現 2007年度 早稲田大学 CS学科 プログラミング言語論 Z4 (Zett viert) 電気機械式計算機 (電機式計算機) 電気式から電気機械式へ回帰 大規模な記憶容量をリレー回路で実現するには、大量のリレーが必要 Z2と同様にメモリを機械式で実現 (信頼性を高めた金属板メモリの特許を取 得していた) 演算回路はリレー回路で構成: 約2200個 メモリ: 64words (1word=32bits) [500wordsまで可能なように計画し ていた] 浮動小数点演算 パンチカード/テープによる入出力 プログラム制御方式 プロトタイプ: 1941∼1945年 爆撃を逃れてBerlinから運び出される 1950年7月11日: Eidgenössische Technische Hochschule Zürich/ETH Zürich (チューリッヒ工科大学/スイス連邦工科大学)に納 入 2007年度 早稲田大学 CS学科 プログラミング言語論 プログラミング言語 Plankalkül Plankalkül (プランカルキュール) 1942∼1945年にかけてZuseが構想 条件分岐 ループ サブプログラム 基本データ型とデータ構造 アサーション (表明) 実際にはZuseは処理系を作成せず 2007年度 早稲田大学 CS学科 プログラミング言語論 Harvard Mark I Harvard University Howard Hathaway Aiken (1900.03.09-1973.03.14/US) 製作: IBM Corporation 出荷: 1944年2月 正式納入: 1944年8月7日 名称 IBMはASCC (Automatic Sequence Controlled Calculator) と命名 Harvard UniversityとAikenはMark Iと命名 本体には”Aiken-IBM Automatic Sequence Controlled Calculator Mark I”と表示されている 2007年度 早稲田大学 CS学科 プログラミング言語論 Harvard Mark Iの計算機構 リレー式計算機 Harvard architecture データとプログラムが異なるメモリ空間に配置 異なるバスを用いてアクセス 「フォン・ノイマン・アーキテクチャ」とは厳密には異なる 「フォン・ノイマン・アーキテクチャ」は、データとプログラム を同一のメモリ空間に配置し、同一のバスを用いてアクセ スする 2007年度 早稲田大学 CS学科 プログラミング言語論 EDVAC (その後) 開発履歴 1949年8月 アメリカ陸軍 弾道研究所に納入 1951年 運用開始 開発費用 最終的に約USD 500,000 (ほぼENIACと同じ) 構成 真空管: 約6,000本 ダイオード: 約12,000個 メモリ: 水銀遅延線 1000ワード 消費電力: 56kW 設置面積: 490平方フィート (=45.5平方メートル) 重量: 17,300lb (=7,847kg) 2007年度 早稲田大学 CS学科 プログラミング言語論 MauchlyとEckert、その後 EDVACプロジェクトから脱退したMauchlyとEckert たちは、世界初の商用コンピュータを作ることを目指 して会社を設立する Electronic Control Company 1947年12月22日: 株式会社化し、EckertMauchly Computer Corporation (EMCC) 1949年9月 ノースロップ航空機会社にBINAC (Binary Automatic Computer)を納入 しかし、正しく動作せず、商用コンピュータとして失敗する 次いで、UNIVAC I (Universal Automatic Computer I)の設計を始めるが、資金難に直面 2007年度 早稲田大学 CS学科 プログラミング言語論 買収、UNIVAC I、ふたたび買収 1950年 Remington-Rand CorporationがEMCCを買収 UNIVAC開発部門としてUNIVAC Iの開発は継続 1951年3月31日 アメリカ合衆国国勢調査局にUNIVAC Iを納入 UNIVAC I 真空管: 約5,200本, ダイオード: 約10,000個, メモリ: 水銀遅延線 消費電力: 125kW 設置面積: 350平方フィート (=35.5平方メートル) 重量: 29,000lb (=13,154kg) 一台目の価格: USD 159,000 1952年 アメリカ大統領選挙の開票予想に使用、大方の予想に反 してアイゼンハワーの勝利を予想し、的中 1955年 Remington-Rand CorporationがSperry Corporationによって買収され、Sperry Rand Corporation となる (後にSperry Corporationに社名変更) 2007年度 早稲田大学 CS学科 プログラミング言語論 特許係争、Atanasoffの証言、Unisysへ 1973年 Sperry Rand Corporationが、Honeywell International Inc.を特許侵害で訴える MauchlyとEckertによるコンピュータの特許 Honeywellは、特許無効を主張 特許が主張する技術が、ENIACよりも前に存在していたことを証明 するため、ABCを作ったAtanasoffを証人として呼ぶ Atanasoffは、1941年6月に、MauchlyがAtanasoffの研究室を 訪れ、ABCについて議論したことを証言 特許申請手続きに不備があったことが判明 (技術の公開後1年以内 に特許申請する必要があったが、ENIACの公開から1年半後に申 請されていた これを理由に特許無効の判決 (よって、ABCがENIACの先行発明 であったと認定されたわけでもないし、まして、ABCが「世界初のコン ピュータ」という判決であったわけでもない) 1986年 Sperry CorporationがBurroughs Corporation によって買収され、Unisysとなる 2007年度 早稲田大学 CS学科 プログラミング言語論 EDSACとプログラミング EDSACには除算命令がなかった 除算命令をソフトウェアで実現 サブルーチンや関数ライブラリのようなもの 2007年度 早稲田大学 CS学科 プログラミング言語論 ソフトウェアによる命令の実現: 側面1 除算命令をハードウェアで実現しなくてすむので、真 空管の使用数を減らせる(除算回路は、加算・減算・ 乗算の回路全部と同程度の規模になる) 一種の RISC (Reduced Instruction Set Computer)の 思想 今日的なRISCの目的とは少し異なる。今日的なRISCは 命令セットを単純化して各命令の実行に要するクロック数を 平準化し、CPI (Clock Per Instruction)を1に近づけ、コ ンパイラによる最適化によって高速化を果たすこと「も」目 的の一つとしていた。 EDSACはそのような目的ではなく、真空管の使用数を減ら すことで、計算機全体の信頼性を向上することと、演算回 路を単純化することで計算機の開発を容易にして迅速な完 成を可能にすること、にあった。 2007年度 早稲田大学 CS学科 プログラミング言語論 ソフトウェアによる命令の実現: 側面2 ソフトウェアの再利用 汎用で品質の高いプログラム・ライブラリをどう やって作るか 必要とする命令をプログラム・ライブラリからどの ように選び、望んでいる処理を表現するためにど のように使うか 2007年度 早稲田大学 CS学科 プログラミング言語論 ソフトウェアによる命令の実現: 側面3 ソフトウェアによる命令の拡張・抽象化 プログラム・ライブラリを用いることで、コンピュータに新規の命令 を追加できる 命令の拡張 適切な命令の拡張ができると、命令セットの抽象化ができる (基本命令セットを使ってプログラムを書くと)下位の概念やその 処理を表現しなければならないが、(拡張命令セットを使うと)上 位の概念とその処理を表現するだけでよい (あくまで、うまく拡張 命令セットが定義できるならば、だが) 例: 印刷機能 基本命令セットだと「レジスタCに印刷する文字数 を与え、レジスタDに文字列データの格納開始アドレスを与え、レ ジスタBにバッファ領域の開始アドレスを与え、レジスタAに印刷 用デバイスのI/Oポート番号を与えて、A9FF00番地を呼び出 す」という手順を表現する必要があるが、拡張命令セットだと 「PRT 文字列データ格納開始アドレス」という命令だけで表現で きる 2007年度 早稲田大学 CS学科 プログラミング言語論 「計算」の抽象化 プログラミング言語は、「計算」をいかに抽象 化して表現できるか、という問題意識によって 設計される、と言ってもよい ここで言う「計算」とは、それを実行するのに用い る「計算する機械(=コンピュータ)」の動作・振舞 2007年度 早稲田大学 CS学科 プログラミング言語論 「計算」の抽象化 (cont’d) したがって、対象の「計算する機械」が「フォン・ノイマン・アーキテ クチャ」型計算機であるのなら、そのアーキテクチャが持つ制御機 構や計算機構を抽象化するように言語が設計される ということは、「フォン・ノイマン・アーキテクチャ」と異なる計算機の ためのプログラミング言語には、異なる発展がある、ということで もある それはそれで面白いテーマではあるし、実際、データフローマシ ンなどの「非・フォン・ノイマン・アーキテクチャ」型計算機のための プログラミング言語は数多く提案されている しかし、まずは基本として、「フォン・ノイマン・アーキテクチャ」型計 算機における「計算」とは何か、それを抽象化するとはどういうこ とか、を理解すべきだろう EDSACにおけるプログラム・ライブラリによる命令の拡張は、抽象 化の一つではあるが、すべてではない 「手続の抽象化」に相当する 2007年度 早稲田大学 CS学科 プログラミング言語論 次回予告 「計算」の抽象化 プログラミング言語の設計において「計算」の表現 を抽象化することがなぜ重要なのか 「フォン・ノイマン・アーキテクチャ」における「計算」 とは何なのか その抽象化とは何なのか 2007年度 早稲田大学 CS学科 プログラミング言語論