今日は、ツーゼが Z3 を発表した日(1941)。
コンラッド・ツーゼは(Zuse)はドイツの工学者。
建築と土木を学び、航空機の設計技師をやっていました。
ところが、この仕事ひたすら計算に次ぐ計算。
彼はこれが嫌になって、「自動的に計算を行う機械」の開発を始めます。
1号機である Z1 は 1938年完成。
歯車ではなく、カチャカチャと動く「機械式の」2進数計算機でした。
(金属製の薄い板で計算します。)
しかし、これは上手く動きません。
2号機である Z2 は、 軍の協力もあって 1939年に完成。
機械式ではなく、リレー回路を使った電気式に置き変えていますが、基本的に仕組みは Z1 と同じ。
2号機がうまく動いたため、商売化するために自分の会社を設立し、3号機 Z3 を作りはじめます。
Z2 と同じ方法で、もっと汎用性を高めた改良機でした。
これが完成し、発表されたのが、1941年の 5月12日。
ENIAC の5年前のことです。
Z3 は、パンチテープによって計算の手順を指示できました。
「プログラム可能」なのです。
ENIAC は、電気回路を繋げることでプログラムできましたが、いわゆる「ソフトウェア」のような柔軟なものではありませんでした。
じゃぁ、Z3 が柔軟だったのかと言えば…全然柔軟ではありません。
使える命令は、次の9種類。
・キーボードを読み取る
・結果を印字する
・メモリを読み取る
・メモリに書き込む
・足し算
・引き算
・掛け算
・割り算
・平方根
たったのこれだけ。
ちなみに、メモリアドレスは 6bit 。64個の「一時データ置場」を持っているだけです。
#データは特殊な浮動小数点表現で、符号 1ビット、指数部 7ビット、仮数部14ビットの 22ビットでした。
プログラムはパンチテープで指示されるので、ジャンプ命令はありません。
条件分岐は当然できませんし、そもそも「条件判断」自体がありません。
コンピューターとしては、Simon みたいな構成です。
Simon の方がずっと後ですが。
ただ、Simon よりは記憶容量も大きいし、掛け算や割り算があるだけずっと良いです。
#Simon は 5bit 整数の 足し算と引き算しかできなかった。
これを巧妙に使えば、現代でいうようなプログラム…ジャンプや条件分岐が必要なアルゴリズムも実行できる、と示した人がいます。
その前に、BASIC 時代に「論理演算」と呼ばれるテクニックがあったのをご存知でしょうか?
たとえば、
10 S=STICK(0);
20 IF S=1 THEN X=X+1
30 IF S=2 THEN X=X-1
というプログラムがあったとしましょう。
ジョイスティックからデータを読み込み、変数 X を増減しているのね。
IF 文で条件判断する、という非常に普通のプログラム。
これを論理演算で書くと、こうなります。
10 S=STICK(0)
20 X=X-(S=1)+(S=2)
行の最初の = は、代入式となります。変数 X に、右辺の値を入れる、という指示。
以降の = は、 IF 文の中と同じ、条件式です。
ところで、BASIC では、条件が真なら -1 、偽なら 0 となります。
#BASIC のメーカーによっては、真が 1 でした。
そのつもりで読むと、IF 文で書いたのと同じプログラムが、IF 文無しで書けているのがわかります。
Z3 で条件分岐を使うのは、これに類似のテクニックです。
メモリ上に、条件判断に使いたい値を巧妙に記録しておきます。
この際、その値は 0 か 1 になるように正規化しておきます。
あとは、条件分岐で飛ばしてしまいたかったプログラムの「結果」と、この数値を掛け合わせます。
0 なら結果は「無かったこと」になりますし、1 ならそのままです。
プログラムをジャンプで飛ばしたわけではないけど、実行後に「無かったことに」するのです。
これだと条件判断できるだけで、「ループ」はまだ作れません。
でも、ループはもっと簡単。
パンチテープにプログラムが書かれているのだから、物理的にテープを糊付けして、頭とお尻をくっつければいい。
これで、永久ループの完成です。
…永久ループだから、プログラムが終了しませんね。
Simon と似ていると書きましたが、Simon を与えられたサザーランド兄弟は、Simon に「条件停止」機能を追加しました。
これにより、Simon では不可能だった「割り算」がプログラムできるようになりました。
プログラムでは、条件が整うまで繰り返す、ということがよくあります。
「条件が整った」時に停止するのは、プログラムに必要な機能なのです。
Z3 には、実は「条件停止」が最初から備わっていました。
割り算命令で、0 による除算を行うと、エラーとなって機械が停止します。
先に書いたように、メモリに巧妙に値を置くことで条件分岐とほぼ同じ結果を得られました。
同じように、値が 0 になったら停止する、というプログラムを作れることになります。
さて、これで Z3 が「現代のコンピューターと同じようにプログラムができた」ことを示すことができました。
素晴らしい!
もちろん、これは詭弁だと思います。
僕としては、これを現代的な意味での「コンピューター」だとは認めません。
しかし、2進法の採用やプログラム能力など、これをもって「Z3 は ENIAC よりも先に作られた、ENIAC よりも近代的なコンピューターだった」という主張をする人は、事実としているのね。
というわけで、簡単な反証を。
1942年の ABC マシンは、完成しませんでしたしプログラムできませんでしたが、2進数を使用していました。
1943年に作られたコロッサスは、長年軍事機密のために存在が隠されていましたが、ある程度のプログラム機能があったことがわかっています。
2進数を使う真空管式の計算機でした。
1944年には、Harvard mark I というリレー式計算機が作られています。
これは Z3 と似たような構成で、紙テープでプログラム可能でした。
Z3 をコンピューターと認めるのであれば、これらも ENIAC 以前の、ENIAC よりも近代的なコンピューターとして認めなくてはなりません。
でも、そんなことを言いだす人はいないのね。
明らかに能力不足だからです。
Z3 は、コンピューターの発展に大きく影響する、イギリス・アメリカ以外の国で作られたコンピューターです。
だからこそ、ツーゼはほぼ独学で Z3 を作り上げていますし、Z3 の存在は現代のコンピューターに、ほぼ何の影響も与えていません。
ここら辺の話が…独学で優れたものを作りながら、誰にも認められていないというのが、人情話として面白いのは事実なのね。
しかも、Z3 は戦火の中で破壊されています。
「可哀想な話」をさらに加速するエピソード。
これらが、Z3 を特別扱いさせ、「世界初のコンピューターだった」という伝説を生んでいるように思います。
じゃぁ、Z3 はどうでもいい機械だったかと言えば、もちろんそんなことはありません。
非常に限られた能力だったとはいえ、プログラム可能な機械として完成した、世界最初のものです。
#構想だけなら「解析機関」以降、数多くありました。
先に書いたように、Z3 は第2次世界大戦中に破壊されてしまいますが、ツーゼは続いて Z4 を作成。
これは市販され、ヨーロッパでは影響を持つマシンとなりました。
ただ、「市販されたコンピューター」としては、BINAC に次いで2番目。
また、Z4 は相変わらずリレー式だったため、ENIAC 以降としてはインパクトも弱い。
ここら辺で、Z4 は Z3 ほど「面白いエピソード」が無い。
これも、Z3 が本来の能力以上に伝説的にされる要因かと思います。
戦後は、コンピューターはアメリカとイギリスが競争するように発展していきました。
Z4 以降もツーゼはコンピューターや周辺機器を作り続けているのですが、「時代に影響を与えたか」と言えば、あまり影響はなかったように思います。
Z3 は 1941 年完成で、ドイツとアメリカ・イギリスは敵国同士です。
これも、影響が少ない理由でしょう。
#噂程度の影響は与えたかも知れません。
参考:Simulating Konrad Zuse's Computers
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |