2016年02月の日記です

目次

03日 ガストン・ジュリア 誕生日(1893)
04日 ケン・トンプソンの誕生日(1943)
05日 ノーラン・ブッシュネル 誕生日(1943)
06日 やなせたかし 誕生日(1919)
07日 アン・ワング 誕生日(1920)
11日 世界で最初の{弓括弧}
13日 BCPLについて、訂正
14日 クリストファー・レイサム・ショールズの誕生日(1819)
15日 再訂正:BCPL と Smalltalk の関係
15日 ニクラウス・ヴィルト 誕生日(1934)
17日 トーマス・J・ワトソン 誕生日(1874)
18日 歯科矯正
18日 秒殺(1)
19日 秒殺(2)
21日 おゆうぎ会
22日 スティーブ・ブリストー 命日(2015)
24日 クロード・シャノン 命日(2001)
26日 BCPL の § 記号についての追加調査
29日 ハーマン・ホレリス 誕生日(1860)
29日 関数電卓


ガストン・ジュリア 誕生日(1893)  2016-02-03 09:32:04  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

ガストン・ジュリア 誕生日(1893)

今日は、ガストン・ジュリアの誕生日(1893)。


添付している画像は、節分なので鬼のお面…ではなくて、今日紹介するジュリアが考案した、ジュリア集合図形の一種。

(CC BY-SA 3.0)


この複雑な図形、たった一つの数式で描かれている。

描き方は後で紹介しよう。




ジュリアは19世紀末に生まれた、20世紀初頭の数学者だ。


19世紀の数学は、微分・積分を究極の武器として発達した。

20世紀初頭には「違う方法での数学アプローチ」が求め始められていて、あらゆる部分で微分「不可能」な図形が多数考案されたりしている。


微分とか積分とか聞くと拒否反応を示す人もいるので、簡単に説明しよう。

微分可能、というのは、言い換えれば「滑らかだ」と言っているだけだ。


微分すると、結果としてその「滑らかさ」の度合いを知ることができる。

でも、ここでは結果はどうでもいい。可能かどうかだけを聞いているのだから。

これは、「滑らかか」と聞かれているだけだ。


直線はどこまでもまっすぐで、滑らかだ。円周もどこまでも滑らかだ。

これらは微分可能だ。


でも、三角形の角は滑らかではない。ここを「微分不可能な点」と言ったりする。

じゃぁ、あらゆる部分で微分不可能、とはどういうものだろう。




多くの数学者は、「線」の定義を変えることで微分を不可能にした。


コッホは、直線の定義を「2点の間を3分割して、両端は直線に、中央は三角形の残りの二辺の直線を描く線」と定義しなおした。

…おっと、ここで注意しなくてはならない。コッホは直線を定義したはずなのに、その定義の中に直線が入っている。


この定義には「分割」が入っている。定義の中に定義自身が入ることで、無限に分割され、無限の「三角形の角」を生み出す。

先に書いたように、三角形の角は微分不可能だ。


そのため、コッホの考案した、この「コッホ曲線」は、あらゆるところで微分不可能となる。


19世紀の数学は、微分・積分を究極の武器とした。

その事実から考えると、「あらゆるところで微分不可能」というのは、非常に恐ろしく、非常に興味深い図形だ。




ジュリアは、ここに虚数を組み合わせた図形を考案した。


虚数!


…あぁ、また「難しそう」と思う人がいそう。

この際、虚数の計算方法はどうでもいい。これが興味深いものであることだけを示そう。


普通の数は、「数直線」の上に表すことができる。小学校で習うね。

同じように虚数も、虚数の数直線の上に表すことができる。この点では、普通の数と何も変わらない。


ただ一つ違うのは、虚数の数直線は、普通の数直線と「直角に」交わっている、ということだ。


この世界に、虚数は存在しない。数学者の頭の中だけに存在する、と言われる。


実は、物理学的にも虚数は存在していると考えたほうが都合がよい…つまりは、実際にも存在しているのだけど、少なくとも我々の誰も、その虚数を感じ取ることはできない。

たとえ、虚数の「計算方法」を知っている物理学者であったって、その存在を実感することはできないんだ。


なんでかというと、我々は数直線に落ちた「影」を見ているから。


数直線の上にある、と思われている数は、実は数直線の上ではなく、自由な位置にある。

ただ、その位置から数直線に向けて、まっすぐに「影」を落としている。そして、我々はこの影しか見ることができない。


だから、世界に虚数があったとしても、誰一人として感じ取ることはできない。




さて、数が自由な位置にあり、数直線に影を落としているだけだとしたら、本当の数はどこにあるのだろう?


先に書いたように、虚数は普通の数と直角に交わったもの、と考えることができる。

となると、自由な位置にある…普通の数だけでは表現できない数も、虚数を組み合わせれば表現できる。


これが、「複素数」と呼ばれるものだ。

普通の数と虚数の、二つの数直線を使って「平面」を示すとき、これは複素数平面と呼ばれる。


混乱しないように書いておくと、普通の平面なら、(X,Y) の二つの数字で点を示すことができる。

複素数平面は、 X が普通の数で、 Y が虚数だというだけ。これ自体特別なものではない。


ジュリアの研究は、この複素数の奇妙な性質を調べるものだった。


先に複素数を「自由な位置にある数」と呼んだ。

複素数自体は、普通の数と虚数の組み合わせで示されるけど、決して二つの数ではなく、これで一つの数だ。


1つの数なので、計算ができる。


そこで、こんなことを考えてみよう。


1) 複素数 z に対して、最初の位置 z0 を与える。

2) z に対し一定の操作をしたうえで、複素数 c を足す。

3) 2 でできたものを新たな z として、何度も 2 を繰り返す。

4) 発散したかどうかを、z0 の位置ごとに記録する。z0 を変えながらひたすら繰り返す。



「一定の操作」というのがわかりにくいのだけど、自乗とか3乗とかが一般的だ。

なんでもいいのだけど、「一般的」なものは、面白い挙動が見られるからよくつかわれる(一般的である)。


複素数 c も、なんでもいい。ただし、これは一連の計算の間は固定の値だ。


で、一連の計算というのは、 3 でひたすら繰り返すし、4 で 1 の条件を変えながらひたすら繰り返す。

ものすごい数の計算をしなくてはならない。


4 で「発散したかどうか」とあるのだけど、ここは注意深い説明が必要だ。

なぜなら、ここに複素数の奇妙で興味深い振る舞いが現れるから。




普通の数…まぁ、整数としておこう。整数なら、自乗すれば大きくなる。何度も繰り返せばどんどん大きくなる。

0~1 の範囲の数だと、何度も自乗すれば小さくなる。今度はどんどん小さくなる。


どちらにしても、どんどん一つの方向に向かって数が動き続ける。


でも、複素数はそうじゃない。虚数は、自乗すると「マイナスの数になる」という性質があるからだ。

計算方法はややこしいので書かないけど、大きくなろうとする普通の数と、それを引き戻そうとするマイナスの数がせめぎあって、あちこちを行ったり来たりすることになる。


さらに、複素数 c を足しているので、この振る舞いは非常に興味深いことになる。


ただ、ある程度複素平面の原点 (0,0) から離れすぎてしまうと、すごい勢いでどこかに飛んで行ってしまうことはわかっていた。

数学的には、すごい勢いで数が離れていくことを「発散した」という。なので、原点から離れると発散する。


ジュリアは、この「興味深い」動きを調べようとした。

z0 を少しづつ変えながら、発散したかどうかを記録し続けた。


先に書いたように、ものすごい数の計算が必要だ。


ジュリアの時代には、手回し計算機があったので、手で計算していた時代に比べれば高速に計算できたから、こんな手間のかかることをやろうとしたのだろう。

とはいえ、現代の…コンピューターの計算力を知っている我々から見ると、なんとも気の遠くなる作業だ。



結果は、非常に興味深い。最初に与える z0 が原点に近ければ発散しない、というような単純なものではない。

発散した点とそうでない点を塗り分けると、非常に複雑な図形が出現する。


そして、その境界は非常に微妙だ。

発散した点だらけのあたりで適当に取った点は、やはり発散する。

発散しない点だらけのあたりだと、やはり発散しない。


でも、境界線当たりでは、ほんのわずかに数値を動かしただけで、挙動が変わってしまう。

つまり、「どんなに細かく見ても、境界線を見極められない」。


これこそ、すべての点で微分不可能である、という、最初に書いた図形の一種なのだ。

おそらくジュリアは、複素数の興味深い振る舞いを調べたかったのだろうけど、20世紀初頭に流行した図形のバリエーションを…非常に独創的な方法で作り出したことになる。




ちなみに、最初に示した「鬼の面のような画像」は、z^2+exp(z)+0.21 、という操作で作られている、そうだ。

Wikipedia で CC BY-SA 3.0 ライセンスのものを、ライセンスに従って使わせてもらった。


本来のジュリア集合は、この図の「黒い部分」である。


発散してしまった場合、発散するまでの計算回数を元に、点に色を付ける。

すると、美しいグラデーションが現れる。近い点は、同じ程度の計算回数で発散しやすいためだ。


しかし、見てわかるように、単純なグラデーションとはならない分断面も多数ある。

こうした複雑さがジュリア集合の面白さになっている。




ジュリアの時代には、計算力が足りなかった。

ジュリアは方法論を示して後の世に影響を与えたけど、時代が早すぎた。


ずっと後の話になるのだけど、マンデルブロがこの「ジュリア集合」に興味を示す。

その時にはコンピューターがあったので、簡単に計算を行うことができた。


先に書いた通り、ジュリア集合は原点 (0,0) 付近を離れない点の集合だ。

関係するパラメーターはいくつもあるのだけど、計算するごとに足し続ける値、c は非常に重要になる。

この c の値によっては、初期値が原点の場合ですら発散してしまうことがある。


そこで、マンデルブロはまず、ジュリア集合世界の「見取り図」を作ろうとした。


まず、計算を単純な「自乗」だけに限定した。

初期値 z0 を、原点である (0,0) にして、c の値を変えながら、ジュリア集合と同じように繰り返し計算を行った。

そして、c の位置に応じて、発散したかどうかを複素平面に描いていく。


マンデルブロの目的は、「興味深い振る舞いをしそうな c の値」を探し出すことだった。

原点ですらあっという間に発散するようでは、その c の値に見どころはないからね。


しかし、この「見取り図」こそが、ジュリア集合以上に興味深いものだった。


見取り図を作ることが目的だったので、ジュリア集合よりもずっとパラメーターが少ない。

にもかかわらず、ジュリア集合と非常によく似た振る舞いを示し、細かな部分にジュリア集合と類似のパターンが現れた。


マンデルブロが作成した「見取り図」を、マンデルブロ集合と呼ぶ。

今となっては、マンデルブロ集合はジュリア集合以上に有名だ。


ジュリア集合、マンデルブロ集合、を含み、先に書いたコッホ曲線など、「微分不可能な数学」の一分野を、マンデルブロは「フラクタル幾何学」と名付けた。


今では、このフラクタルの概念も拡張され、いろいろなところで役立っている。

そう、なんだか難しい話に思えた人も多いと思うけど、身の回りで役に立てられている技術だ。



マンデルブロとその業績については、マンデルブロの命日の記事に書いているので、興味がある人はそちら読んでほしい。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

別年同日の日記

04年 鬼は外

13年 文旦


申し訳ありませんが、現在意見投稿をできない状態にしています

ケン・トンプソンの誕生日(1943)  2016-02-04 13:58:15  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、ケネス・レイン・トンプソン (Kenneth Lane Thompson)

…通称、ケン・トンプソンの誕生日(1943)


ケンは何度も書いた覚えがあったのだけど、いろんな話題に出てきただけで、まとめた紹介記事にはしてなかった。

他の記事とかぶる部分も多いのだけど、ざっとまとめていこう。


ケンは、カリフォルニア大学バークレイ校の出身だ。

そして、AT&Tベル研究所に入る。




早くも話は横道に入るのだけど、先日マービン・ミンスキーの追悼文を書いた。

マサチューセッツ工科大学… MIT に所属していた人工知能の研究者だ。


第2次世界大戦のあと、コンピューターは MIT がけん引している。


ENIAC を作ったのはペンシルバニア大学なのだけど、ENIAC の技術をみて、MIT ではすぐに Whirlwind I を作り始める。


ENIAC は最初のコンピューターとされることが多いし、別にそれは間違ってはいない。

でも、近代的なコンピューターとは全然設計が違う。

現代のコンピューターの設計は、どちらかと言えば Whirlwind I の後継となっている、と言ってよいかと思う。


Whirlwind I は、当時としては超高性能なコンピューターで、IBM が量産して軍に収め、全米を守るレーダー網の要として使われた。



その後、Whirlwind I をトランジスタで作り直した、TX-0 が完成する。これも MIT が独自に作成し、しばらく後に学生に開放した。

「計算機」を学生に開放したらどんなことに使うかな、という実験の一環でもあったのだけど、学生たちは計算なんてやらずに、ゲームなど、想定もしなかった用途に使い始める。


楽しそうにコンピューターを使う学生を見て、TX-0 の設計者の一人が、これは商売になると確信する。

デジタル・イクイップメント社(DEC)を創業し、TX-0 をプロトタイプとして PDP-1 というコンピューターを作成する。



同じころ、MIT の教授の一人、フェルナンド・J・コルバトが、IBM 7094 を改造して、マルチタスク実行可能なシステムを作り上げる。

このような技術を、「タイムシェアリングシステム」、略して TSS と呼んだ。


コルバトの作った CTSS は、世界初の TSS だった。


この研究がもとで、ARPA が開発資金を提供する。

1台のコンピューターを同時に複数人数で使える、という TSS は、コンピューターが非常に高価だった時代には、夢のようなシステムだった。



ミンスキーの追悼文でも書いたけど、この研究資金のいくばくかは、ミンスキーが「流用」して自分の研究に使っている。

でも、TSS の研究はちゃんと行われ、MIT とゼネラルエレクトリック(GE)社、そしてAT&Tが参加する、Multics プロジェクトへと変わっていく。


単に TSS だというだけではなく、学術的な面からも、技術的な面からも「使いやすいシステムとはどういうものか」を考えた、非常に有意義なプロジェクトだった。




さて、話を戻そう。


AT&Tのケン・トンプソンは、会社から MIT に出向して、Multics プロジェクトに参加していた。


まだ作成中の Multics は、それでもいくつかのコマンドがちゃんと動作していた。


ケンは、この上で「宇宙旅行ゲーム(Space Travel)」を自作していた。

太陽系の惑星の動きや引力をシミュレーションし、その中を宇宙船で旅行するゲームだ。


当時のコンピューターは、計算を「依頼」して、後で結果を受け取るのが普通だった。

しかし、タイムシェアリングなら個人でコンピューターを直接使用できる。


計算の途中結果を見て、対話的にパラメーターを変化させる、ということもできる。

…つまり、ゲームで遊ぶこともできる。


これは、タイムシェアリングでないとできない、贅沢な使い方だった。

単にゲームを作った、というのではなく、Multics でないと体験できない「キラーアプリ」を作成していた、ともいえる。



ところが、AT&Tは、Multics プロジェクトから撤退を決めてしまう。

プロジェクトは予定よりもずっと遅れており、予算もオーバーしていたため、AT&Tとしてはこれ以上の資金を提供しないことにしたのだった。



ケンはAT&Tに戻るが、宇宙旅行ゲームで遊びたかった。


そして、AT&T内で使われずに埃をかぶっていた中古の PDP-7 を見つけてきた。

先に書いた、MIT の TX-0 をプロトタイプとしたコンピューター PDP-1 の後継機種だ。


#DEC は、PDPに、開発順に番号を付けていた。

 2,3 は 1 と互換性はなく、4 は 1 の低価格版(命令は増えたが性能は落ちた)、7 は 4 の性能を上げた、1 の正当な後継機。



ケンは、宇宙旅行ゲームを PDP-7 に移植した。

しかし、PDP-7 には OS と呼べるものはなく…今でいえば、Z80 よりも低性能の CPU 上で、2進数を使って直接プログラムするような状態だった。


当初は、GE の機械を使って、クロスアセンブルしてプログラムしていたらしい。


しかし、ゲームの移植にあたり、「存在してほしいサービスルーチン」などを順次作りためることで、徐々に OS のようなものが形作られていく。

最終的には、ゲームを動かす基盤としての、最低限の OS も一緒に作り出すことになった。



宇宙旅行ゲームは、もともと Multics で動いていた。

PDP-7 の上に作られた OS は、当然のように Multics とよく似た機能を持つようになっていった。


ただし、個人で使うものだから、高度な機能はいらない。

簡単に作れて便利そうな機能は作りこまれていたが、あれば便利だけど作るのが大変な機能は省略されていた。


そして、この OS は Unics と名付けられた。Multi (複数の) に対し、Uni (1つの) という洒落だった。


#Multics は商標でもあったので、この「明らかに類似した名前」は危険だったらしい。

 でも、個人で使うものだから、その危険さも含めてネタとして名付けられた。

 後に、全く違う名前にするために Unix となっている。



後に、Unix は PDP-11 に移植される。

先に書いたけど、PDP は型番と互換性がわかりにくい。11 は、非常に先進的な設計をしたマシンで、それまでのどの機種とも互換性がなかった。


しかし、先進的な設計だからこそ、パワフルだった。


PDP-7 上では、Unix はアセンブラで使われていた。

しかし、PDP-11 とは互換性がない。今後のことも考えて、移植性のある高級アセンブラ、C言語が考案される。

各種ツールも、Unix 自身も、C言語で書き直された。



パワフルなマシンでは、姑息なテクニックを使用する必要もなかった。

そして、「高級言語」で書かれたプログラムは、従来のものよりも読みやすかった。




AT&Tは、電話業界の大会社、寡占企業だった。


これが問題視されて後に分割されるのだけど、この時点ではまだ「新規事業への参入禁止」という措置を受けているだけだった。

ケンはコンピューターのOSを作ったけど、商売にはできない。


AT&Tは、教育目的に限る、という前提で、Unix を無償開放した。ソースプログラムの入手までできる。


この後、ケンは、1年間の休暇を取って母校である「カリフォルニア大学バークレー校」に出向いている。

そして、Unix のインストールから使い方の講義、ソースリストを参考に、使われているテクニックの解説まで行ったらしい。


先に書いたように、Unix は他のOSに比べて、ずっとプログラムが読みやすかった。

しかも、制作者が直接やってきて、テクニックなどを教えてくれたのだ。


学生たちは、Unix を理解し、自分たちのものとし始める。


ケンが帰ったあと、バークレイ校独自の Unix 、BSD が生み出されることになった。

精力的に拡張され、ネットワーク対応した最初のOSとなった。


#これ以前に ARPANET は存在したが、コンピューター上に「ネットワークのためのソフト」を動作させて接続する、という形式。

 BSD では、OSにネットワーク対応を組み込んでしまった。


#当初は BSD Unix と呼ばれていたが、後にAT&Tが商標権などで訴えを起こし、Unix と名乗らなくなった。




時系列を少し巻き戻そう。


おそらく、ケンは Multics の開発プロジェクトに出向した時…まだ Multics が動き出す前に、CTSS を使っているのではないかと思う。

資料不足でここの関係性がはっきりしないのだけど、CTSS 上で動くエディタを作成しているのだ。


元は別の人が作った、テレタイプ用のラインエディタだった。

CTSS にそれを移植した、という形なのだけど、この際にケンは非常に先進的な機能を一つ、追加していた。


それが、文字列の一部があいまいなまま検索を行える、という機能だ。

通常、文字列を検索するのであれば、当然のことながら検索したい文字列を入力してやらなくてはならない。


しかし、ケンは、形式言語理論で使用される、学術的な表記方法を導入することで、文字列の一部があいまいな状態でも検索ができるような仕組みを作った。

これが、後に「正規表現」と呼ばれるものだ。



ここでは言語理論には立ち入らない。無駄にややこしい話になってしまうから。

ただ、形式言語理論では、書かれていることの意味を解釈する機械的な方法を定義することができて、その際には「文の終わり」を、$ という記号で表す。


これ、「終わり」という意味の記号ね。文字としての $ とは別のもの。


そして、正規表現で検索を行う際は、文の終わりを $ で示す。

他にも「どんな文字でもよい」を . (ピリオド)という「記号」で示したり、直前の文字の繰り返しを * という記号で示したり。

すべて、形式言語理論で使われる表記方法だ。


今では、正規表現は元の言語理論から離れて、コンピューター世界で便利に使えるように拡張されている。

しかし、学術的な表記方法をコンピューターに持ち込んだのが、ケンだったのだ。



ケンは、このエディタを当然のように Unix にも移植している。ed と、sed だ。

両方とも正規表現が使える。


この方法は便利だったので、正規表現を使うさらに多くのソフトが作られていった。

こうして、学術的な元の意味を知らない人にも正規表現が広まっていく。




完全に余談なのだけど、MS-DOS では、「文字列を表示する」というファンクションコールがある。

このファンクションコール、文字列の最後を $ で示す。


だから、金額とか表示できない。Just price $10 なんて表示しようとすると、$ の手前で表示が終わってしまう。


なんでこんな使いにくい仕様に、とおもうのだけど、実は CP/M という 8bit OS を真似したためだ。

同じく 8bit の MSX-DOS も、CP/M 互換にしてあったので当然 $ が文字列の終わりだった。


CP/M の作者、ゲイリー・キルドールは、マイクロソフトが MS-DOS で CP/M の真似をした、と怒っていた。

そして、ただ真似しただけで内容を理解していない、嘘だと思うなら、ゲイツになんで文字列の最後が $ なのか聞いてみるがいい、と言っていた。


キルドールがどういうつもりだったのかは知らないけど、ゲイツは「言語理論から取った」と言えばいい。

正解なら、一般的に知られた表記法を使っただけなのだから、真似した証拠にはならない。

違うなら、違うのだからなおさら証拠にはならない。


まぁ、MS-DOS が CP/M を真似した、というのは歴史上の事実なのだけど、一因はキルドールにもある

文句を言う筋合いではないだろう。


いずれにしても、MS-DOS のファンクションコールは非常に使いにくかった。

みんな別の文字列表示ルーチンを組んで使っていたのではないかな。


余談終わり。




ケンは、UTF-8 の考案者としても知られる。


AT&Tでは、Unix の後継となるOS、Plan-9 を開発していた。

このOSは結局頓挫するのだけど、1980年代に研究が始まり、2000年代に入ってもまだ研究が続いていた。


1980年代なんて、まだ文字コードが 8bit だった時代だ。

…いや、日本ではすでに JIS コードがあったのだけど、UNIX の世界では 8bit と共存できる EUC が使われていたし、Plan-9 で考慮していたとは思えない。


ところが、世界的に Unicode を制定しようという状況になり、Plan-9 も Unicode に対応することにした。

今では Unicode は 32bit まで対応しているのだけど、当初は 16bit にすべてを収めようとしていた。


そこで、Plan-9 では、今まで作った 8bit を前提としたシステムを変えずに、文字コード体系を工夫することで 16bit を表現できるようにしよう、という指針が決められた。


そこで、実際にその「工夫したコード体系」を設計したのがケンだった。

16bit の文字コードのうち、最初の 128個は 8bit で表現できる。…これで、ASCII に関しては今まで通り使える。


続く 1920個…文字コードでいえば、128~2048の範囲は 16bit 、さらに 65536までは 24bit で表現できる。


16bit ということは、8bit を1バイトとしたときに2バイト使うのだけど、コードは ASCII の 128文字とは絶対に重ならないように工夫されている。

(複数バイトにまたがるとき、必ず最上位ビットが 1。また、複数バイトの先頭文字は必ず上位 2bit 目が 1で、続くバイト列は 0 になっている)


だから、コンピューターにとって意味を持つ記号が入って混乱する、というようなこともない。複数バイトの際も扱いやすい。

(ShiftJIS では、2バイト目にアスキー文字が入ることがあり、混乱が起きた。2バイトの前半後半の見極めも難しかった)



この表現方法は、最初は Plan-9 のための物だったけど、後に公式に Unicode 規格の一つとなった。


UTF-8 は、非常に単純で強力だったので拡張しやすかった、

今では Unicode は 32bit に拡張されているけど、やはり UTF-8 の6バイトまでで表現できる。




他にもいろいろな功績があるのだけど、だんだん些細な話になっていくので今回はここまで。


現在は Google で、Go言語を作っているらしい。

僕はまだ使ったことないのだけど、評判のいい言語みたいですね。



後日追記 2016.2.9


そういえば、ケン・トンプソンのバックドアを書いていなかった。

というか、僕がちゃんと理解していなくて、調べて書かなくては、と思ったまま調べてすらいなかったのだけど。


調べてみたらあまりにも興味深い。


だらだら説明するより、概要を手短にまとめたページがあったのでリンクしておこう。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

関連ページ

BSD 初リリース日 (1978)【日記 17/03/09】

世界で最初の{弓括弧}【日記 16/02/11】

別年同日の日記

03年 万豚記

15年 いきなり出鼻をくじくような


申し訳ありませんが、現在意見投稿をできない状態にしています

ノーラン・ブッシュネル 誕生日(1943)  2016-02-05 17:46:42  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、ノーラン・ブッシュネルの誕生日(1943)


ビデオゲームの会社、アタリ社の創業者だ。

…というより、ビデオゲームを発明した人。



ブッシュネルは、子供のころから数学や電気工作が好きで、遊ぶことも好きだった。

子供の頃に父親が死ぬが、保険金が下りたので生活は苦しくはなかったらしい。


とはいえ、お小遣いはもらえなくなった。

(彼が子供のころからギャンブル好きで、お金を渡すとすぐ使ってしまったからだ、という話もある)


そこで、ブッシュネルは得意の電気工作の腕を活かして、電気修理などをして自分で稼いだ。



1961年、ユタ州立大学に入学。さらに後に、ユタ大学に転学している。

ややこしいけど、実はユタ大学も州立。ユタ州立大学と、州立ユタ大学だ。


どちらもユタ州北部にあり、120km くらいしか離れていない。

そして、その中間に「ラグーン遊園地」という老舗の遊園地がある。


ユタ州立大学は、毎年5月16日を「物理の日」として、この遊園地で物理学のイベントを行っている。

遊園地は物理の大きな実験場だ。物理学、という観点から見てみると、とても興味深いものも多い。




ユタ大学にいつ転学したのか、調べてもよくわからなかった。

でも、1968年に卒業している。


ユタ大学は、当時まだ珍しかったコンピューターを持っていた。どうやら、PDP-1 もあったようだ。

このコンピューター目当てで、1966年にはアラン・ケイが大学院に入っている。


また、MIT 出身のアイバン・サザーランドが 1968年に教授として着任している。

ブッシュネルとちょうど入れ違いなのだけど、サザーランドは「コンピューターグラフィックス」という概念を作り出した人だ。



ブッシュネルは、ユタ大学在学中に、先に書いたラグーン遊園地で働いている。


普段は週末だけの勤務で、主な仕事はゲームコーナーの接客だった。


この頃のゲームコーナーというのは、射的とか、ボールを使った的当て、一定時間内にバスケットボールをゴールに何回入れられるか、なんていうゲームが多かった。

電気式でタイマーと得点がカウントされていて、一定の得点を挙げれば景品がもらえた。

ブッシュネルは、こういう接客をやったわけだ。


そして、時々機械の調子が悪くなると、電気工作の腕前を活かして修理をしていた。



ある夏休み、ブッシュネルは毎日働いた。

すると遊園地のほうでも働きぶりが認められ、ゲームコーナーの運営にも意見を出せるようになった。


お客さんにより楽しんでもらうために、どうすればいいのか。

ちょっとした工夫によってお客さんの笑顔が増え、売り上げも上がる。


ブッシュネルは、このときに「アーケードゲーム運営の面白さ」を知ったという。




ブッシュネルは、コンピュータープログラムの授業を受けて、PDP-1 に触れる機会があったようだ。

このときに「SPACE WAR!」で遊び、その面白さに感銘を受ける。


自分でもプログラムをしてみて、いくつかの簡単なゲームを作っているようだ。

しかし、先に書いたラグーン遊園地での経験と合わせ、このゲームをゲームコーナーで提供したら、絶対に儲かるはずだと考え始める。


しかし、コンピューターはまだ非常に高価な機械だった。



ブッシュネルはエンターテインメントで働きたかったようで、大学卒業後はディズニー関連の会社で働こうとしている。

しかし就職先が見つからず、AMPEX に就職する。ビデオテープレコーダーの会社だ。


しかし、これが幸運を招き入れた。

ビデオテープの会社だから、テレビ信号などに詳しい技術者が多数いたのだ。



1969年、ブッシュネルは会社で働きながら、同僚と共に新しい会社 Syzygy 社を設立した。

惑星直列を意味する単語だけど、SPACE WAR! をまねたSFっぽいゲームを作るつもりだったし、変わった単語なので誰も使っていないだろう、と思ったのだ。

(しかし、実際には同じ名前の会社の存在が後でわかる)


ここで「ビデオゲーム」の開発を開始する。


SPACE WAR! はコンピュータープログラムとして作られていたが、同じような内容を電気回路で実現すればもっと安くできる。

画面には高価なベクタースキャンディスプレイではなく、安価なテレビ受像機を使えば安くできる。


ブッシュネルは電気工作が趣味ではあったけど、テレビ信号を扱うような機器を作るほどの腕前ではなかった。

ビデオゲームの開発は主に同僚に任せ、ブッシュネルは同僚に給料を支払う方法を考えなくてはならなかった。



そこで、ラグーン遊園地でやっていたように、ゲーム機器の修理の仕事も見つけてくる。

これは同時に、ゲーム機器の製造販売をしているメーカーを探す目的もあった。


そして、2台のピンボールマシンを修理し、ナッチング・アソシエーツとコネを持つようになる。


1971年、完成したゲーム「COMPUTER SPACE」がナッチング・アソシエーツから発売になった。


よく「SPACE WAR! と同じゲーム内容」としている紹介があるのだけど、参考にしているだけでゲーム内容は全然違う。

SPACE WAR! は二人で対戦するゲームだけど、COMPUTER SPACE は宇宙船で UFO を落ち落とすゲームだ。


一定時間遊ぶことができて、UFO を破壊した数と、自分の宇宙船が破壊された数をカウントする。

時間切れの際に UFO の破壊数が上回っている場合は、時間が延長されて遊び続けられる。

(詳しくは、過去に書いた記事を読んでほしい)




このゲームは売れなかった。

1500台生産したのだけど、売れたのは 500~1000台程度だった。


300万ドルの売り上げだったらしいけど、全く新しいタイプのゲームなので生産コストもかかっている。

材料費と生産コスト、ナッチング・アソシエーツの取り分を引いたら、Syzygy にはわずかな額しか入ってこなかった。


作成に2年もかけていることを考えたら、採算に合っていない。商業的に失敗だった。


ブッシュネルとしては、面白さに自信を持っていた。もっと売れるはずだ。

売れないのは、ナッチング・アソシエーツの売り方が悪いせいだ。



次のゲームはもっと大きな会社に任せないといけない。

ブッシュネルはそう考え、ATARI 社を設立する。


「あたり」って囲碁の用語だ。ブッシュネルは囲碁が大好きで、世界で一番面白いゲームだと考えていた。

わざわざ新しい会社にしたのは、Syzygy が別の会社が使っている名前だと知ったかららしいのだけど、もしかしたら Syzygy のゲームはナッチング・アソシエーツが扱う、というような契約を交わしてしまったのかもしれない。



ナッチングアソシエーツの売り方が悪い…と言いながら、ブッシュネルはラグーン遊園地で学んだことを忘れていなかった。

お客さんを笑顔にするにはどうすればよいのか。実際に COMPUTER SPACE の遊ばれ方を観察した。


主に酒場の片隅に置かれ、酒を飲みながら遊ばれていた。

片手にグラスを持っていたいのに、宇宙船の操縦と発射ボタンで両手を使わないといけない。


それに、酔っぱらって遊ぶには、内容が難しすぎた。



よし、次のゲームはもっと簡単にしよう。

なじみのないSFではなく、誰にとってもなじみのあるテーマを使う。


ドライブゲームを作ることにして、新たなエンジニア、アラン・アルコーンを雇い入れる。




しかし、そのころマグナボックス社が、家庭用の「テレビゲーム機」オデッセイを発売した。

ブッシュネルはこの機械を見て、もっと単純でも面白いゲームは成立する、と気づいた。


オデッセイのゲームは単純だけど、いくつかの内容が遊べた。

ブッシュは、その中でもテニスゲームはよくできていると思った。


そこで、アランにテニスゲームの内容を伝え、同じようなものを作るように依頼した。

出来上がったゲームは、オデッセイのものともまた少し違っていた。


…オデッセイのものよりも面白いゲームになっていたのだ。


このゲームは PONG と名付けられる。


PONG は、片手でダイヤルを回すだけで遊べた。もう片手には、グラスでもサンドイッチでも持っていられる。

ただ相手側から飛んできた球を受けるだけ。単純だけど、受けた位置によって球の方向をコントロールできたから、戦略性があった。


酒場に置くのに申し分のないゲームだった。



試しに酒場に置いてみたところ、すぐに「壊れてしまった」と連絡が来た。お金が入れられないという。

慌てて店に行って筐体を開けると、コインがあふれるほど入っていて、投入口をふさいでいた。


これを見て、「次はもっと大きな会社に生産を任せよう」と考えていたけど、全部を自分たちでやることに決める。

このゲームは確実に売れる。話題になる。


ならば、宣伝力はいらない。中間に別の会社を入れて売り上げを分けるよりも、自分たちでやったほうがいい。



そして、PONG は大ヒットする。


アタリ社はまだ零細企業で、生産記録なんて残していなかった。

なので、実際の販売台数はわからない。しかし、いろいろな証拠から、1万台程度売った、と考えられている。


でも、それよりもデッドコピーが多く売られた。

本物と合わせて、全世界で10万台が売られた、と推計されている。



ブッシュネルは、デッドコピー業者を訴えなかった。

訴えている時間がもったいないほど PONG が売れていたし、資金に余裕ができたので次のゲームも考えたかったのだ。


デッドコピー業者は、ビデオゲーム市場のうまみを知り、後には自社でも開発に乗り出したところが多い。

日本ではタイトーもセガも、PONG のコピーを作っていた。


これにより、それまでは存在していなかった「ビデオゲーム市場」が一気に立ち上がる。



「ビデオゲーム」というのは、PONG を宣伝するために作り出したキャッチコピーだ。

それまでにない、全く新しいタイプのゲームだったから新しい言葉が必要だった。


余談になるが、同じ意味に使われる「テレビゲーム」という言葉は、先に書いたオデッセイで使われている。

だから、この記事の冒頭ではブッシュネルを「ビデオゲームの発明者」と書き、オデッセイは「家庭用のテレビゲーム」と書いた。




ブッシュネルは PONG の類似ゲームをどんどん作る。

特に転機となったのが、一人用の PONG 。


基本的に、PONG は対人対戦ゲームだ。それを、一人でも遊べるようにしたかった。

PONG はテニスゲームだけど、一人で壁打ちテニスを遊ぶようにした。


ただし、ボールが当たるたびに壁が崩れる。崩した壁によって点数が入り、点数を競うゲームにした。


刑務所の囚人が、所内レクリエーションとして壁打ちテニスをするふりをしつつ、壁を壊して脱走を企てる…

そんなストーリーで「BREAK OUT!」(脱獄の意味)と名付けられたゲームは、日本では「ブロック崩し」として知られている。


後には、このブロックを動かしたら面白いだろう、という発想で、タイトーで「スペースインベーダー」が開発されるきっかけになっている。



それはともかく、ATARI が BREAK OUT! を作っているとき、アルバイトを雇って基盤の回路を簡略化させた。

開発時は、とにかく動くことを目指す。でも、大量生産時には、同じ動作を保てるようにしながら少しでも回路を簡略化し、生産コストを下げるのが普通だった。


この仕事を請け負ったのが、後にアップル・コンピューターを創業するスティーブ・ジョブズだ。

ジョブズは、やはりアップルを共同創業するスティーブ・ウォズニアクに仕事を丸投げした。


ウォズニアクは、天才的なセンスを発揮して、回路をものすごく簡略化して見せた。

確かに元の回路と同じ動作はするのだけど、切り詰めすぎて理解が難しい回路になっていた。


生産コストは下がるのだけど、万が一何か問題があったときに修正するのも難しい。

ブッシュネルの注文で、ウォズは不本意ながら回路を「冗長に」作り直さなくてはならなかった。


ジョブズは、この仕事でブッシュネルから 5000ドル受け取っている。

でも、ウォズには嘘をついて 350ドルしか渡していない




ブッシュネルは家庭用ゲーム機を発売しようと考えたけど、そのためにはもっと資金が必要だった。

そこで、ATARI は、ワーナー・コミュニケーションズの傘下に入る。


ブッシュネルは相変わらず社長だったし、この身売りによって億万長者になった。


そして、ゲーム機 ATARI VCS が発売される。大ヒットだった。



しかし、しばらくして ATARI の株が急落する。

VCS が飽きられた、という説もあるけど、これは単に経営上の問題で、まだ VCS は人気だった。


しかし、これが原因でブッシュネルは社長を降板することになり、ATARI を去った。


以降、ATARI は業績が徐々に悪化し、会社は3分割されて売られる。



ATARI の業務用ゲーム部門は、一時期ナムコが所有していましたね。

S.T.U.N. Runner が近所のキャロットハウス(ナムコ直営ゲームセンター)に置いてあって、大好きだった。

ひるいなきスタンランナーズ。コインいっこいれる。ほし20こで あショックウェイブ。




ATARI の子会社も、囲碁用語を取ったものがある。


SENTE 社は、ブッシュネルが始めた子会社。

「先手」から取った。

ゲームのレンタル業だったらしいけど、あまりうまくいかずに廃業。


TENGEN は、ブッシュネル退社後に作られた会社。

囲碁盤の中心を意味する「天元」から取っている。

コンシューマー(家庭用)部門のゲームを作っていた。



ATARI 以外にもブッシュネルはいろいろな仕事をやった。

上に書いた SENTE もそうだけど、ピザ屋を経営したり、コンピューター周辺機器を作ったり。


でも、結局どれもうまくいかず、すべての事業から手を引いた。


今は、各種団体のメンバーに名を連ねていて、自家用ジェット機2台でアメリカ中を飛び回っているけど、自称「忙しい失業者」だ。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

関連ページ

スティーブ・ブリストー 命日(2015)【日記 16/02/22】

別年同日の日記

03年 謎の機能

07年 青いバケツと赤いバケツ


申し訳ありませんが、現在意見投稿をできない状態にしています

やなせたかし 誕生日(1919)  2016-02-06 10:02:27  今日は何の日

▲目次へ ⇒この記事のURL

今日は、やなせたかし さんの誕生日(1919)


アンパンマンや「手のひらを太陽に」でおなじみの方です。

結構、僕の好きな人でした。


僕の想いは、亡くなった時の追悼文に書いています。

命日を記録していなかったことに気づいて、2年後の命日にも追加を書いています。


というわけで、特にもう書くことはありません。

この記事は、ただ誕生日を記録しておくためのものです。




▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

今日は何の日

別年同日の日記

04年 1日30品目

04年 「間違っている」は間違っている

12年 ビデオ圧縮

13年 文旦の飾り剥き

15年 最初のゲーム業界仕事

18年 データバックアップ

18年 インフルエンザ


申し訳ありませんが、現在意見投稿をできない状態にしています

アン・ワング 誕生日(1920)  2016-02-07 17:54:41  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、アン・ワング博士の誕生日(1920)


コア・メモリを発明(1949)した人です。


それ以前は「メモリ」といえば、真空管で構成する、水銀遅延線を使う、ウィリアムス管を使う、のどれかでした。

逆にいえば、この3種類がどれも一長一短で、決定的な方法がなかった、という事でもあります。


コアメモリは、この3つのどれよりも優れた特徴が多く、コンピューターのメモリを席巻しました。

発明以降20年間主要メモリとして使われ続け、40年後の1990年代でも、一部で実用的に稼働していたのです。



インテル社が、コアメモリに変わる新しいメモリを開発・実用化する、ということを目的に設立された会社であることを知っている人も多いかもしれません。

昔のコンピューターにおいては、コアメモリの存在はそれほど大きかったのです。


コアメモリについて、詳細は、アン・ワング博士の命日記事に書いています。

興味がある方は、そちらも併せてお読みください。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

別年同日の日記

17年 レスリー・ランポート 誕生日(1941)


申し訳ありませんが、現在意見投稿をできない状態にしています

世界で最初の{弓括弧}  2016-02-11 00:26:46  コンピュータ 歯車

▲目次へ ⇒この記事のURL

Twitterでフォローしてる人が、「弓括弧 { } が使えるキーボードを持った最初のマシンはどれだろう」という質問を投げかけた。

TK-80BS や APPLE II にはなかった、という注釈付きで。


たちまちいろいろな意見が集まった。見ていて面白い。

是非参加しようと思って、自分が知っている中で一番古い、キーボードを持つマシン…Whirlwind I と、 TX-0 の資料をあさってみた。


この2機種は、ともに Friden 社の Flexowriter というテレタイプが接続されている。

そして、当時は ASCII コードの制定前。使える文字の種類も、今よりずっと少なかった。


Whirlwind I は、弓括弧は使えなかった。

じゃぁ、TX-0 は?…とおもったら、2種類のテレタイプが繋げられていたようで、そのうち片方では使える。


正確にいえば、1959年に改造して使えるようになった


弓括弧だけでなく、Σとかαβγや、⊂☞などの記号も使える。

一方で、アルファベットは大文字だけで、小文字は使えない。


その人に報告した。


で、報告ついでに再び Twitter の会話を見ると、C言語の祖先でもある BCPL ではブロックを示すのに弓括弧を使うけど、当時はまだ弓括弧が使えないのが普通だったのではないか、との疑問が質問の意図だった。



BCPL は ALGOL 系の言語で、ALGOL はプログラムをひとまとまりにした「ブロック」を多用するのが特徴。

ALGOL では BEGIN ~ END でブロックを示した。後の Pascal なんかでも同じ。


でも、BCPL は最初に弓括弧でブロックを示した言語で、後にC言語も同じ方法をとる。

今ではこちらの方法のほうが主流だ。



そして、BCPL は 1970 年ごろ。TX-0 は1960年ごろ。

ちょっと時代が違うか。報告はしたものの、あまり関係なかったかな。




返事が返ってきた。

これは、数式の印字専用かもしれませんね、との感想。


うん。僕もそんな気がする。BCPL の謎を追っている、ということなので、あまり関係なかったかな。


でも、僕もこのテレタイプが何のために作られたのか気になり始めた。


再び調べてみる。

先にリンクしたのだけど、改造した際の文書によれば、TX-0 の後継機である TX-2 用に作られたものだそうだ。

TX-0 / TX-2 は MIT のリンカーンラボで作られたのだけど、別資料によればリンカーン Flexowriter とも呼ばれているようだ。


じゃぁ、そこら辺をキーワードにググってみる。


「The Lincoln Keyboard - a typewriter keyboard designed for computers imput flexibility」


というタイトルの論文が見つかった


コンピューターを柔軟に使うためのキーボード。大きく出たじゃないか。


でも、論文の中身が読めないので、なんに使おうとしたのかさっぱりわからない。


#翌日追記。上の論文、1ページだけで、別ページで公開されていました。

 リンク先もそのページに切り替えています。


 1958/6/1 に公表されたもので、定義した記号の実際の使われ方の例も挙げています。

 主な仕様用途としては「プログラムを書く際や、コミュニケーションをする際に、記号が多い方が便利だから」。




こちらはこれ以上先に進めないので、別方面を調べる。

TX-0 のあとの歴史を追ってみよう。


TX-0 の製作者は、TX-0 に熱中する学生を見て、これが商売になると直感し、DEC 社を起こす。

最初の製品 PDP-1 は、TX-0 をプロトタイプとして作り出されたものだ。


でも、PDP-1 は普通の Flexowriter が接続された。リンカーン Flexowriter ではなく、弓括弧は使えない。


PDP-1 の後継は PDP-7 で、UNIX が最初に作られたマシンだ。

PDP-7 の資料を読むと、ASCII コードを前提として作られているのだけど、テレタイプ社の ASR33 というテレタイプが標準だ。

テレタイプの都合で、弓括弧は使えない。


UNIX が移植され、C言語が作られる PDP-11 では、完全に ASCII コードの時代になっている。

テレタイプもアスキーコードで、すべての文字が入れられるのが前提。

多少キーボードの配置は今と違ったようだが、弓括弧も使えたようだ。



特に手がかりはないな、と思って元の Twitter のスレッドを見ると、ASR37 というテレタイプでは弓括弧が使え、ケン・トンプソンは PDP-7 に ASR37 を接続して UNIX を作ったという調査を書いている人がいた。


なるほど。ASR37 ではもうすべての記号が使えるのか。


…でも、それは話が違う。


元の話は、BCPL で弓括弧が使えた理由、なのだ。UNIX の時にはすでに BCPL を簡略化してB言語としているのだから、その前にどこかで弓括弧が使えたはずだ。


#B言語が発展したのがC言語。




TX-0 に繋げられたキーボードは、もともと TX-2 用に作られた特殊なものだった。

じゃぁ、ちょっと TX-2 を調べてみよう、と思ったら、いきなり TX-2 用の BCPL マニュアルが見つかった。


え? なんで?

TX-2 って、BCPL 作られるよりかなり前のマシンだと思うのだけど、BCPL の移植があったの?


しかもこれ、BCPL の発表が行われた年のうちに移植されている。

あまりにも速い。



ここに来てやっと、BCPL を洗い出してみよう、という気になる。


BCPL は、イギリスのケンブリッジ大学で開発されたはずだ。

遠いアメリカに、すぐに移植されるとは思えない。


ここで、思いもよらない事実を知る。


BCPL の作者、マーティン・リチャーズはケンブリッジ大学の人だけど、MIT を訪問しているときに BCPL を作ったという。


BCPL を作ったのは、プロジェクト MAC で作られた、IBM 7094 上の CTSS 上。

世界最初の「マルチタスク・マルチユーザー環境」で動作するソフトウェアだった。


しかし、IBM 7094 には、標準接続のテレタイプがない。

当たり前だ。当時の IBM はバッチ処理専門で、人が直接操作するようなことは考えていないのだ。


でも、プロジェクト MAC は実験プロジェクトとして、IBM 7094 に複数台のテレタイプ端末を接続し、ユーザーが直接使用していた。



ところで、プロジェクト MAC は、リンカーンラボも関与している。

そしてどうやら、ここで使われたテレタイプ端末が、TX-2 用のリンカーン Flexowriter だったようなのだ。




つまり、そういうことなのだ。

TX-0 で弓括弧が使えた、というのは、BCPL の話題からは的外れだったな…と思っていたのだけど、調査したらそれこそが大当たりだった。


相変わらず、TX-2 用の特殊テレタイプが何のために考案されたのかはわからない。

数学の式を出力するためだったかもしれない。



でも、BCPL は、このテレタイプを前提に設計された。

普通のテレタイプには存在しない波括弧があったから、それを「ブロック」を示すのに使用した。


BCPL の開発は 1967年からで、1969年に発表されたらしい。

そして、TX-2 への移植版も、同じ年に作られている。実際には同時並行で作られていたのだろう。


となると、文法的にも類似と思われる。

Σとか∧∨などの、非アスキーコード文字が普通に使われている。


BCPL は基本的にアルファベットの大文字を使い、小文字を使わない。これも、リンカーン Flexowriter による制約だったのだろう。


僕は現代の…アスキー文字だけで書く BCPL の文法を知らないので比較できないのだけど、知っている人は比較したら面白いと思う。



2016.2.13 追記


上に書いてあること、いくつか間違いがありました。


まず、CTSS で開発された BCPL では、リンカーン Flexowriter を使っていません。

そのため、{ } を使うこともできず、TX-2 版 BCPL とは記号の使い方が大きく異なっていました。


最大の間違いは「BCPL は { } を最初に使った言語である」という点。

この記述自体は間違えていないのですが、正しくもありません。


詳細は、訂正記事としてまとめています


#いつものように、訂正記事のほうが長いです。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

関連ページ

ボブ・バーマー 誕生日(1920)【日記 17/02/08】

世界最初のドメイン登録(1985)【日記 17/03/15】

クリストファー・レイサム・ショールズの誕生日(1819)【日記 16/02/14】

BCPLについて、訂正【日記 16/02/13】

ニクラウス・ヴィルト 誕生日(1934)【日記 16/02/15】

別年同日の日記

03年 海のチーズケーキ

04年 衝動買い

17年 リチャード・ハミング 誕生日(1915)


申し訳ありませんが、現在意見投稿をできない状態にしています

BCPLについて、訂正  2016-02-13 18:07:55  コンピュータ 歯車

▲目次へ ⇒この記事のURL

先日書いた日記の訂正記事です。


いつものことなのだけど、調査して面白い事実を見つけたら、とりあえず書いちゃってます。

で、公表すると各所から突っ込みが来るので、再調査してみると思っていたのと違った、ということもしばしば。


ちゃんと調査してから書け、と言われそうだけど、1人で考えていると気づかない部分とかあって、書いた時点では正しいと思っているんですよ。

この方針については以前表明した通り




さて、今回一番の訂正事項は、「BCPL が世界で最初に { } を使った言語である」という点。


Wikipedia をはじめとして、多くのページにもそう書いてあります。

先回りして書けば、これは間違いではありません。



昔のキーボードって { } は使えませんでした。

BCPL はなぜ、一般的でなかった { } を使ったのだろう、と「最初に { } が搭載された機械探し」を始めた人がいました。

そして、僕も調査に参加したわけです。


その調査報告が前回の日記なのですが、大きな間違いがありました。

誰も疑問に思わなかった前提…「BCPL は世界で最初に { } を使った言語である」というのが間違っていた。


いや、先にも書きましたが、間違いではない。でも、間違っている。

すごく事情が込み入っていて、この短い文章では正確な表現になっていないのです。




前回、TX-2 に移植された BCPL マニュアルを提示して、時期・地理的にオリジナルも同じだろう…と判断していました。

実は、この時点でオリジナルのマニュアルを探していたのだけど、見つけられてませんでした。探し方が悪かった。

TX-2 マニュアルも隅々までは読めておらず、若干勘違いがあった。


その後、BCPLの最初のマニュアル(1967)を発見しました。


予想外なことに、一切 { } を使っていませんでした。

最初に { } を使った、と言われている言語は、一切 { } を使っていなかった。


このマニュアル、当時の紙資料を基に、OCR して再度 PDF 化したものです。

その意味では「作り直された」もので、資料性は落ちますが、検索性が上がっていて便利。


わざわざ手間をかけて配布しているのは、C言語作者のデニス・リッチーです。

実は、恨み節を述べるために手間をかけてまで配布している節がある。



ところで、デニスが持っているのとは別のバージョンを、ドイツのクライネさんも公開しています


こちらはスキャンしたそのままです。

デニスもクライネも、完全なバージョンを持っていたわけではなく、一部ページが欠落しています。

しかし、この2つを合わせることで、ほぼ完全な内容がわかります。


デニスによれば、興味深いことにこの2つの資料は、別のタイプライターで印刷されたものだそうです。

書いてある内容はほぼ同じなのに、文字サイズが違うためにページ割が違う、とのこと。


当時は紙テープにタイプ内容を記録し、同じ内容を何度でも印字することができました。

紙テープに互換性のある別のタイプで印刷が行われたのでしょう。




オリジナル BCPL マニュアルの PDF の配布ページでは、デニスの思い出話も書いてあります。


冷静で落ち着いた語り口になっていますが、実は BCPL 作者のマーティン・リチャーズに対して恨み節を述べています。


デニスは、ブロックを示す文法について、こう言います。


「リチャーズが例示したプログラムでは、$( $) になっている。

 現在、リチャーズはBやCで使われるような { } を使って例を示すことがある。」


リチャーズのWEBページには、現代のパソコン用に移植された BCPL や、そのサンプルプログラムがあります。


これらは、すべてブロックを作るのに { } を使っています。

デニスは、これを「Cの影響を受け、後から改竄したのだ」と断じています。


言葉にはしていませんが、Cが有名になったので、「 { } を最初に使った言語」という手柄を横取りしようとしているのだ、と言っているように思います。




ところで、BCPL は CPL (1963) から派生したものです。


僕は残念ながら、CPL という言語を知りません。名前は知っているけど、使ったことはない。

ネット上の情報によれば、ALGOL 60 をベースとして、COBOL などの「事務処理言語」として必要な機能を持たせようとした結果、非常に巨大になってしまって実用性を失ってしまった言語、のようです。


CPL の作者は、ケンブリッジ大学のクリストファー・ストレイチー。

世界初の「マクロ言語」を開発した人でもあります。


この「マクロ言語」は、コンパイラの前段階として、テキストを置換する簡単な処理をするもの。

実は、以前に MUSYS の話で、このマクロ言語のことを書いています。


マクロ言語は、コンパイラに、簡単な置換を行うフィルタを組み合わせるだけで、ずっとプログラムが幅広いものになる、と示すものでした。



CPL は、Titan と呼ばれるコンピューターで実装されました。

Titan は、Atlas という名前で市販されたコンピューターのプロトタイプ機(1962)。

なので、CPL は Atlas でも動いたそうです。


リンク先の写真に、テレタイプ端末が写っています。

Atlas では Friden 社の Flexowriter が使用されたらしいので、これも Flexowriter ではないかと思うのですが、型番特定には至っていません。


この端末では、§(セクション)記号が使えたそうです。

Wikipedia の英語版の BCPL のページの「ノート」で、ケンブリッジ大学の卒業生だという方が、1975年にはまだこのタイプライターが使われており、§ が使えた、と証言しています



#2016.2.26 追記

 これ、少し違うようです。別記事にまとめました

 §は「表記できたけど、入力できたわけではない」。

 使えたという証言も、表記できたことを言っているか、直接タイプ出来たように記憶違いしているのでしょう。



そして、CPL の文法では、この記号でブロックを示します。


ブロックとは、つまりセクションです。この記号で示すのは、わかりやすいように思います。

ちなみに、セクションの終了は、記号の上に縦棒を重ね打ちして、「打消し」つまり終了を表現します。

(タイプライタなので、1文字戻って別の文字を重ね打ちすることができました)




BCPL は、この CPL を簡略化して、現実的に実装できるようにしたもの。

リチャーズがケンブリッジ大学で言語仕様を定め(1966)、その後 MIT を訪問した際に実装(1967)したもの、だそうです。


ケンブリッジ大学で CPL を簡略化しようとしていたのだから、おそらくはストレイチーの示唆があったのかと思います。


BCPL では、言語の処理を3段階に分け、移植性に考慮しています。

一番中心となる「BCPLコンパイラ」は、BCPL で記述され、どのコンピューターにも簡単に移植できました。


コンパイラが生成するのは、中間コードでした。

この中間コードを実際のコンピューターの命令に変換するには、コンバーターが必要となります。


ここは移植ではなく、機種ごとに作らないといけない部分。

でも、コンパイラを作るよりは簡単でした。



そして、コンパイル前に簡単な文字列置換を行う、「プリプロセッサ」と名付けられた処理が存在していました。

ちょうど、CPL を作ったストレイチーの「マクロ言語」のように、コンパイル前に文字列置換を行うのです。


ただし、BCPL のプリプロセッサは、固定された動きしかしなかったようで、マクロ言語としては使用できません。

じゃぁ、何をするのかと言えば、機種ごとに異なる「記号」を変換し、言語本来の表現に変換するためのものでした。



これにより、BCPL コンパイラは、一切の記号・英小文字を必要としませんでした。


f(a+b) という記述があれば、プリプロセッサにより F RBRA A PLUS B RKET と変換され、そのあとでコンパイルされます。


これは、当時のどんなテレタイプでも扱えることを意味します。




BCPL の最初の実装は、MIT の CTSS …改造された IBM 7094 でした。

前回、リンカーン Flexowriter が接続されたのではないか…と推測していたのですが、これは全く大外れで、IBM 1050 が接続されている、と BCPL マニュアルに明記されていました。


IBM 1050 では § も、 { } も使えませんでした。


そこで、$( $) でブロックを示します。

§に似た形の $ を使い、始まりと終わりを示すために ( ) を付け加えた…ということのようです。


風説では、BCPL では { } を使い、この記号が使えない環境では $( $) で代替した、となっています。

まぁ、代替したのはあっているのですが、{ } の代替ではなく、§の代替だった、というのが真相でした。



先に書いたように、BCPL は、記号を英大文字の単語に変換します。


括弧には3種類があります。

( ) [ ] $( $) は、それぞれ RBRA RKET SBRA SKET SECBRA SECKET となります。


頭についた R S SEC は、おそらく Round Square SECtion の意味でしょう。

BRA と KET は、括弧を意味する英単語 bracket の初めと終わりの3文字です。


SECBRA と SECKET は、Titan では1文字で表現できたのに、CTSS では括弧が2種類しか使えなかったため、2文字での表現になっています。



実際の記号と予約語の対応は、機種によって全く異なります。

Alto 用の BCPL のマニュアル(1979)を見たとことでは、SECBRA SECKET nに相当する部分は、[ ] になっていました。


じゃぁ、SBRA と SKET はどうなったのか…

これらは、連続したメモリアクセス…つまりは配列を作るためのものでしたが、配列には ! でアクセスするようになっています。


Alto で作られた有名なプログラム言語…Smalltalk では、ブロックの表現に [ ] を使います。

また、Smalltalk を中間言語にコンパイルすると、メモリアクセスは ! で表現されるそうです。


Alto ユーザーにとってわかりやすいように、記号類を再定義したのでしょうか。


#この部分、間違えていました。再訂正です。(2016.2.15)

 Xerox 内では、Smalltalk より先に BCPL が普及していました。

 詳細は再訂正記事書きました


また、PDP-11用のOSである tenex 用の BCPL マニュアル(1974)もありました。


こちらでは、SECBRA と SECKET は { } になっています。TX-2 と同じです。


いずれにせよ、ブロック定義は § $( $) { } [ ] など、いろいろな表現があったことがわかります。


ここら辺、プリプロセッサという仕組みが柔軟だからできることでもあります。




ところで、Alto 版や tenex 版のマニュアルには、BCPL 作者のマーティン・リチャーズの名前は入っていません。


TX-2 版マニュアルには、リチャーズの名前が入っています。

どうやら、移植はほかの人がやったのではなく、本人の作業のようです。


CTSS 版は 1967 年。TX-2 版マニュアルは 1969年になっていますが、冒頭に「改訂版が完成した」という手紙がついています。


TX-2 移植がいつかはわからないのですが、1969年よりも早い時点で…おそらくは、リチャーズが滞在している 1967年ごろに移植が行われていたのでしょう。

というのも、このマニュアルの表紙のリチャーズの名前の下には、連絡先としてケンブリッジ滞在中の住所が書かれているのです。


Alto 版マニュアルには、TX-2 版を元に作成された NOVA 版を移植したものである、という注釈がついています。

Data General 社の NOVA 用の BCPL もまた、リチャーズが直接移植したものです(1978)。


#この部分も間違えていました。再訂正です。(2016.2.15)

 NOVA 版 BCPL には2つあり、上に書いたリチャーズの公式移植以前に、Xerox 内で勝手移植されていました。

 詳細は再訂正記事書きました



tenex 版のほうにも、TX-2 版を元にしているという説明があります。


NOVA 版 BCPL についても、マニュアルなどを探したのですが見つかりませんでした。

ただ、ここで TX-2 版を元にしている、ということから、リチャーズは CTSS 版よりも TX-2 版のほうを気に入っていた、という事かと思います。


§ を使うのが本来の姿だけど、ないなら $( $) よりも { } のほうが良かった、ということなのでしょう。




話を戻します。


C言語の作者、デニス・リッチーは、{ } だけでなく、論理和や論理積の表現についても異議を申し立てています。


リチャーズは ∧ ∨ などの論理記号や、場合によっては & で書きたがるが、当時は記号を使わず LOGAND LOGOR などと書いていた、記号でこれらを示すのはB言語(1969年ごろ)の発明である、というのです。


しかし、TX-2 版では ∧ ∨ を使っています。

tenex 版では & \ で、Alto 版では & % です。


C言語が一般に知られるのは、UNIX の配布が始まった 1974年ごろから。1978年の「プログラム言語C」の出版で急激に広まります。


tenex 版は 1974年ですから、& を使っているのはCの影響というより、「AND」の記号として & を使うという、ごく自然な選択かと思います。

Alto 版は 1979年なので影響があってもおかしくないけど、むしろ tenex と同じ発想ではないかな。or の表現は両方とも違うし。


たしかにBよりも後ではありますが、そもそもBはCが有名になってから知られるようになったものです。

これらをBの真似だ、とするのは違うでしょう。



ここからは推測です。


BCPL の CTSS 版(1967)を元にして、すぐに Multics 版と TX-2 版が作られたのではないでしょうか。

移植性を気にして作られているのですから、すぐに移植してみるというのはありそうです。


デニスとケンは、移植のために CTSS 版 BCPL のマニュアルを渡された。

それをデニスは保存していて、公開した。

移植は仕様通り… CTSS 版をほぼそのまま移植する形で行われた。


Multics 版のマニュアルなどは見つからなかったのですが、Multics の BCPL で書かれたソースの一部は見つかりました

日付は 1973 年となっているので、ずいぶんと後のものです。しかし、CTSS 版と同じく、$( $) を使っていることがわかります。



一方で、リチャーズは TX-2 への移植に立ち会い、あまりに文字セットが異なる TX-2 のリンカーン Flexotype 用に、各種記号の意味を割り振った。

実際、TX-2 版はオリジナルと比べると、多くの記号を使うように変更されています。


そして、この記号セットを気に入り、以降の BCPL は TX-2 版をベースにするようになった。

…非 ASCII 文字はどうしようもなかったでしょうけど、ASCII に取り入れられた { } などは、そのまま使えます。

∧などは、先に書いたように & に変更するなどの違いがあったと思います。


ただ、少しおかしなところもあります。

リチャーズは、1969年にBCPLの論文を発表しています。


ここでは、プログラム部分が手書きになっており、ブロックの表記に $( $) を使っています。

一応、本文の中で「非常に文字セットが限られた機械でも使える」と説明しているので、{ } などの一般的でない文字を使わなかっただけ、というようにも思いますが。



TX-2 は Project MAC で使用されてはいますが、Project MAC 自体はコンピューターの研究をなんでも行うごった煮プロジェクトで、Multics 開発で TX-2 を使った、というわけではありません。


そして、デニスとケンは、Multics 開発のために Project MAC に参加したのです。TX-2 版の BCPL を知らなかったとしても当然でしょう。




AT&T が Multics から撤退(1969)した後、ケンは UNIX を作り上げます。

そして、その上で BCPL を簡略化した、B言語を作ります。


このときに、ブロック表記は { } となりました。


別に、TX-2 版を知らなくても、当然のように同じ記号に行きついたのではないかと思います。


先に書きましたが、BCPL の文法上、3種類の「括弧」が必要でした。


CPL が考案された Titan のテレタイプ端末では、3種類が使えました。

しかし、通常のテレタイプ端末では、2種類しかありませんでした。


だからこそ、3つ目に $( $) という2文字の組み合わせを使っていたのです。

ここに、 { } という「3番目の括弧」が登場したなら、当然それを使うでしょう。


TX-2 のリンカーン Flexowriter では、3種類目の括弧として { } が使えました。

ASCII 対応した端末でも、3種類目の括弧として { } が使えました。



両方とも3種類目が { } だった、というのは偶然で、しかし3種類目の括弧があるならそれをブロックに使う、というのは必然です。


ビット演算に & を使った、というのも、先に書いた BCPL の各種移植と同じように、必然的なものでしょう。




さて、長くなったので要点だけをまとめ直しましょう。


・BCPL は、記号部分を自由に変えられる実装。

 当初仕様ではブロックを § で、CTSS 版では $( $) で示したが、TX-2 版では { } で示す。


・リチャーズは TX-2 版が気に入ったようで、以降は TX-2 版をベースとし、各機種に移植し続ける。

 tenex 版のように、直接移植したわけではないバージョンでも、TX-2 由来のものがベースとなった。


・ケンは CTSS 版 BCPL を元にB言語を作った。この際、ASCII が使えるようになったので、ブロックを { } で示すように改良。

 ブロック表現に関しては、おそらく TX-2 の影響はない。


・デニスはB言語を元にC言語を作った。このC言語は有名になり、現在でも標準的な言語の地位にある。


・BCPL が「最初に { } を使った言語」と呼ばれるようになり、事実と異なるとデニスが反発。



以上を前提として、蛇足っぽくなりますが前回から引き続いての結論を。



世界で最初に { } を使えるキーボードを搭載したコンピューターはどれだろう、という最初の問いかけへの答えは、TX-2 です。

より厳密には、TX-2 に接続された、リンカーン Flexowriter 端末のキーボードが { } を使えるようになっていました。


前回、この Flexowriter を CTSS にも接続したのではないか…と考えていたのですが、これに関しては誤りでした。

お詫びいたします。

リンカーン Flexowriter は TX-2 (と、今回の話に関係ない TX-0)でしか使えなかったようです。



問いかけの裏にあった、なぜ { } が一般的でなかった時代に、BCPL で { } を使おうと思ったのか…という疑問自体は、「疑問の前提が間違えている」が答えになります。


BCPL では、当初 { } を使おうとは考えていません。

$( $) 表記は { } が使えないときの代用表記…と一般的に考えられていたのですが、この考え方が誤りで、$( $) は § の代用表記でした。


TX-2 に移植する際に、この代用表記が { } に変わります。

また、$( $) 表記をしていた BCPL からB言語が作られた際に、TX-2 版とは無関係に { } が使用されるようになります。



BCPL は { } を使った最初の言語なのか?


これに関しては、立場の違いでどちらともいえます。


「最初」というのは、「由来」を聞いているのでしょうか?

それとも「一番最初に登場した」言語を聞いているのでしょうか?




▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

関連ページ

デニス・リッチーの誕生日(1941)【日記 13/09/09】

世界で最初の{弓括弧}【日記 16/02/11】

再訂正:BCPL と Smalltalk の関係【日記 16/02/15】

再訂正:BCPL と Smalltalk の関係【日記 16/02/15】

別年同日の日記

03年 オロブロンコ

15年 改正風俗営業法の施行日(1985)

17年 ウイリアム・ショックレー 誕生日(1910)


申し訳ありませんが、現在意見投稿をできない状態にしています

クリストファー・レイサム・ショールズの誕生日(1819)  2016-02-14 23:07:40  コンピュータ 歯車 今日は何の日

▲目次へ ⇒この記事のURL

今日は、クリストファー・レイサム・ショールズの誕生日(1819)


およそ1年前、命日の際に取り上げています。

命日が誕生日の3日後なのね。


詳しくはそちらを見てもらうとして、QWERTY 配列キーボードを考案した人です。

これ、数字の下の段のキーが、左上から順に QWERTY という順に並んでいるのでそう呼ばれます。


別の並びとしては DVORAK 配列とか有名だけど、僕は使ったことはありません。

(別に DVORAK の順に並んでいるわけではなく、配列考案者の名にちなむ)




詳細は命日記事に譲るので、もう余談です。


今でもコンピューターのキーボードは QWERTY 配列になっていますが、記号類などは昔とずいぶん変わっています。

ここ数日、昔のキーボードには { } とかの記号ないよね、って話を書き続けています。


この話書くために、すごく膨大な数のキーボード画像見ました。

いやー、いろいろある。昔は今ほど「標準」がしっかりと決められていなくて、本当にバラエティに富んでいる。


今では、US 配列は数字の 2 の SHIFT 状態が @ になっています。

日本で使われる JIS 配列は、ここが " になっている。


US 配列は当時一般的に使われていたキーボードを元にした…ということになっているのだけど、1970年前後に一般的だった ASR33 端末なんか、むしろ JIS 配列に似ていたりする。

それ以上古くなると、今度は記号類が極端に減って、SHIFT しても記号なんかでなかったりするはずなんだけど、なんで記号の配列が「あまり使われていなかったもの」に変わってしまったのかと思うと興味深い。


#JIS 配列は ISO 配列を元にしているのだけど、この配置は SHIFT 状態で ASCII コードを +32 ないし +64 すればよいだけなので論理的に作りやすい、という説がある。

 でも、むしろ話は逆で、当時一般的に使われていた ASR33 のような配列を元に ASCII を制定したのではないかと思う。

 よく調べてないから鵜呑みに信じられても困るけど。




Space-cadet keyboardなんていうのも見つけた。


3日前の記事に書いた、TX-0 に後からつけられたキーボード…リンカーン Flexowriter の延長線上にあるのではないかと思うのだけど、詳しい由来はよくわからない。というか、そこまで調べていない。


MIT で作成された、Lisp machine で使われていたキーボードで、奇妙な記号がいろいろと使える。

括弧なんか ( ) [ ] { } に加えて、〈 〉も使える。< > (大なり小なり)と区別がつかないで困ったりしなかったんだろうか。


☜☞ (環境によっては見にくいかも。人差し指で左右を示す形)に加えて、👍👎(環境によっては表示されないかも。親指を立てる、親指を下に向ける)まである。


リンカーン Flexowriter は、ASCII 時代になって記号が増えることで消えてしまった時代の仇花なのだと思っていたから、思わぬ後継機種があることに驚いた。


まぁ、結局一般化はしなかったわけだけど、今なら Unicode があるからこれらの文字を入れられないでもない。

その記号が入るからと言ってあまり便利にならないのだけど、洒落でどこかの会社が復活させないだろうか。

値段次第では買ってもいいのだけど。


#あ、でも僕は記号類の配置が US 配列だとイライラしてしまうので、ダメかも。




BCPL と { } の話は、まだ気になる部分があって調査しているのでもう1回くらい書くと思います。

面白い話のタネを提供してくださった、ツイッターで会話していたグループの方々に感謝です。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

今日は何の日

別年同日の日記

03年 コメット入手!

05年 冒険百連発!

15年 おばあちゃんとぼくと

15年 ENIAC公開日(1946)


申し訳ありませんが、現在意見投稿をできない状態にしています

再訂正:BCPL と Smalltalk の関係  2016-02-15 00:52:45  コンピュータ

▲目次へ ⇒この記事のURL

BCPL の話、完全に趣味の領域に入っています。

当初の疑問は解けたのですが、気になった部分の追跡調査。



前回調査で、僕は BCPL の Alto 版マニュアルが 1979年だったのを見て、一部の記号の定義などが Smalltalk の影響下にある、と考えました。

でも、むしろ Smalltalk が BCPL の影響下なのではないか、という指摘を受けました。


なるほど、そういえば、アラン・ケイは Smalltalk を BCPL に変換するプログラムを書いたことがある、と言っていました。

Smalltalk と BCPL は、どちらが先かは不明ながら、深い関係があるのでしょう。


Smalltalk の最初のバージョンは NOVA で作られ、その後 Alto に移植されています。

NOVA 版の BCPL があったのであれば、Smalltalk が影響を受けている、ということもあり得そう。




まず、NOVA について書いておきましょうか。


NOVA を作った Data General 社は、1969年創業。

「世界初のミニコン」と呼ばれる、DEC PDP-8 の開発責任者が興した会社です。


PDP-8 は、当時としては驚くほど廉価なマシンでしたが、安くするために 12bit を処理単位としていました。

このため、処理速度は遅く、搭載できるメモリ量にも厳しい制限が出ます。


Data General は、PDP-8 を 16bit にしたようなコンピューターを作る、という目的をもって設立されています。

NOVA は創業したその年のうちに発売。


PDP-8 のように安く、16bit でよりパワフルだったために、結構普及したようです。

ただ、会社としての開発力は DEC のほうが上。NOVA が売れた、とはいっても、PDP-8 のほうがやっぱり強い。


その上、NOVA は PDP-8 のライバルにすぎず、PDP-11 が主流になると Data General 社は苦戦します。

(もちろん、NOVA に変わる別のマシンなどを発売してはいるのですが)


つまるところ、NOVA は一時期普及したマシンではあるものの、今から見るとマイナー機種の一つです。


Xerox では、NOVA を発売直後に購入し、研究に使っていたようです。




影響関係を知りたいのですから、BCPL と Smalltalk のどちらが先に作られたのか、が重要です。

まずは Smalltalk の一番古いバージョンがいつ作られたのかを確認しておきましょう。


Smalltalk の最初のバージョンは、1973 年に、NOVA の上で作られています。

さらにその前に、BASIC で書かれた簡単なプロトタイプもあり、1972年10月に動作しています。


Alto が完成したのは 1973年の春だそうですが、Smalltalk はその年のうちには移植されています。

このバージョンは、Smalltalk-72 と呼ばれています。


#研究プロジェクトだったため、2年ごとに成果をまとめなくてはなりませんでした。

 Smalltalk は、 72 74 76 78 80 が存在します。


Smalltalk-72 エミュレータで遊んだ話を書いている方がいました。

後の Smalltalk のような統合環境ではなく、まだ「言語」にすぎませんが、その言語仕様は後のものと大きくは変わらないようです。

ブロックの指定には [ ] が使われています。


#翌日訂正:

 うわ、自分の目が節穴でした。[ ] じゃなくて、( ) を使ってますね…

 上のページでリンクされていた 72 のマニュアルはリンク切れなのですが、1976年に書かれたSmalltalk-72マニュアルを発見しました。

 この中でも、ブロックの指定は ( ) で書いています。


 これ以降、Smalltalk は [ ] 、で話が進みますが、結論としてはあまりこの違いは重要ではないので、「間違えてやがる」と笑いながら読み進んでください。




つづいて、BCPL の移植時期を調べます。


前回、Alto への BCPL 移植は 1979 年…と考えていたのですが、1973年の Alto 版 BCPL マニュアルを見つけました。

いろいろ違いはありますが、基本的には 1979年のものと変わりません。


ずっと後の1983年に書かれた文書ですが、9ページ目に BCPL という項目があり、「Alto で最初に動作した高級言語は BCPL だった」となっています。


というわけで、Alto 上では、Smalltalk に先駆けて BCPL が動作していたことは間違いありません。


しかし、先に書いたように Smalltalk は先に NOVA で作られています。

BCPL も、Alto 版は NOVA から移植された、とわかっています。


ということで、NOVA では、どちらの言語が先に作られたのかが焦点となります。


ただ、その前に解決しなくてはならない問題が一つ。

NOVA への BCPL 移植、BCPL 作者のマーティン・リチャーズが行ったのは、1978年なんですよね…


なんで 1973 年に NOVA から Alto へ移植されているんだ?




探していたら、思わぬところに情報がありました。

なんと、Smalltalk をつくった中心の2人…アラン・ケイと、ダン・インガルスが、Squeak 開発者の掲示板で思い出を語っているのを見つけたのです。


まず、ケイの証言から、一部を抜粋します。


「NOVA の発売から2年間、NOVA には高級言語がなく、プログラムが作りにくい状況が続いていました。

 そのため、PARC のジム・カリーが BCPL を移植しました。

 最初は、アセンブラで BCPL のバイトコードインタプリタを作り、ゆっくりと BCPL で書かれたプログラムが動き始めます。

 その後、機械語コードを生成するバックエンドが BCPL で書かれ、効率よく動くようになりました」


後で書きますが、NOVA の発売は 1969年です。

それから2年なので、移植は 1971年ごろですね… Smalltalk よりも先に開発されていることが裏付けられました。


「BCPL は Alto でもいくつかのソフトを作るのに使われた。

 Smalltalk か Lisp で書かれなかったソフトは、すべて BCPL だろう」


つまり、この3つですべてのソフトが作られた、と。

BCPL は非常に低レベルな(アセンブラで書くような)プログラムを作れたので、Alto にアセンブラはなかった、という意味合いかと思います。



もう一つ、ダン・インガルスの証言する、Smalltalk のプログラムを BCPL に変換するプログラムの証言です。


「テッド・ケーラー、グレン・クラスナーと共に、Smalltalk から BCPL への変換器を作りました。

 これは、Dorado Smalltalk に搭載することができました。」


Dorado は、Alto の後継に当たる機械で、Dorado Smalltalk は 1978年に作られています


「テッドは当初、機械語を生成するコンパイラを作っていた。

 しかし、BCPL なら Xerox のすべてのハードウェアで使えるので、BCPL を生成するように変更した。

 この変更は1日で完了したが、書き出されるのは完全な BCPL ではなく、80% 程度の品質だった。

 テッドとグレンは、それを元に手で完全な BCPL プログラムを完成させた」



ここまでで、Xerox 内での開発経緯がわかりました。

時系列でまとめておきましょう。


・NOVA BCPL(1971)

・NOVA Smalltalk (1972)

・Alto BCPL(1973)

・Alto Smalltalk(1973)

・Smalltalk to BCPL translater(1978)


前回僕は、Alto 版 BCPL の { } が [ ] に変わったのは、Smalltalk の影響だろう、と書きました。

しかし、この開発経緯を見る限り、Smalltalk の影響で BCPL が改変された、ということはなさそうです。


ここでもう一つの疑問。

BCPL が TX-2 - NOVA - Alto と移植されるうちに { } が [ ] に変わったのはなぜでしょう?

また、どこの段階で変わったのでしょう?




ここで、NOVA に接続されていた端末は、そもそも { }が使えたのだろうか、という疑問が出ます。

しかし、調べてみても、NOVA に使われた標準端末がわかりません。


NOVA の元となった、PDP-8 では、Teletype 社の ASR33 が標準的に使われていました。

まずは、NOVA も、おそらくこれを使っていたのではないかと推察。


1977年になって、Dasher 端末という、CRT を備えた純正端末が発売されます。

詳細不明なのですが、マニュアルは 1977年に発行されていて、タイトルが Dasher display terminals models 6052, 6053 operator's manual であることはわかりました。


ここで、6052 は D1 、6053 は D2 と呼ばれる端末です。

海外のキーボードマニアの集まる掲示板に、Dasherレイアウトが示されていました。


D1 は非アスキー、D2 はアスキーキーボードであることがわかります。

D1 の配置と、先に書いた ASR33 のキーボードを比べると、特殊キーの配置まで含めてほぼ同じであることがわかります。


おそらくは、D1 は今まで使い続けてきたユーザーのための、キーボード配列の互換性を保った商品。

NOVA で初期に使われた端末は ASR33 、ということでほぼ間違いないでしょう。




そして、ASR33 には { } がありません。

おそらく、TX-2 版の BCPL を NOVA に移植する際に { } を使えなくて [ ] にしたのでしょう。

Alto 版は、NOVA 版をそのまま移植したので [ ] のままになった、と考えられます。


しかし、それなら NOVA 版はオリジナルの $( $) に戻せばよかったのでは? とも思います。


いや、TX-2 版の BCPL しか知らず、オリジナルが $( $) を使ったことすら知らなかったのかもしれません。


BCPL の移植は 1971 年ですから、BCPL の論文 (1969) 発表後です。

論文では $( $) を使っていますから、これを知っていれば $( $) にしたかもしれません。


結局、{ } を使わない理由は ASR33 で入力できなかったから、ですが、その際になぜ [ ] を選択したのかは不明です。

おそらくは、単に論文の発表もオリジナル版も知らず、TX-2 版が入手できたから移植しただけなのではないかな、とも思います。


#もしくは、知っていたとしても $( $) なんて表記は見にくいので、見やすいように変えたか。




ところで、ASR33 には ←↑があります。

こちらは BCPL には使用されていませんが、Smalltalk では多用されます。


←は、右辺の結果を左辺の変数に代入することを意味します。アスキーしか使えない環境では := で代用されます。

↑は、メソッド(手続き型言語の関数に相当)を終了し、戻り値を返すことを意味します。アスキー環境では ^ で代用されます。


おそらくは、Smalltalk の文法は ASR33 を前提として設計されたように思います。


Alto のキーボードは、おそらく ASCII 対応にしたうえで、さらに ←↑のキーもあります。




…と、ここまで調査したところで、じゃぁ Smalltalk に対して BCPL の影響はあったのでしょうか?


皆無ではないと思います。もしかしたら、Smalltalk の VM が BCPL で書かれた、なんてこともあるかもしれません。


#ケイによれば、Smalltalk か Lisp で書いていないものは、BCPL で書かれているのです。

 この3つの言語で VM が書けそうなのは BCPL だけです。


前回「BCPL の Alto 版がブロックに [ ] を使うのは、Smalltalk の影響ではないか」と書きました。

これは間違えていたわけですが、じゃぁ逆に「BCPL の [ ] が Smalltalk に導入された」とは思いません。




ここからは急に話が変わります。


Smalltalk に大きく影響を与えた言語に、LOGO があります。

シーモア・パパートによって設計された言語で、MIT の Project MAC の一環として実装されました。


そして、LOGO は、Project MAC の重要人物の一人である、マービン・ミンスキーの作った Lisp の影響を強く受けています。


Lisp は非常に面白い言語なのですが、紹介し始めるとややこしいので今はしません。

ただ、「リスト」という重要な概念があることだけを紹介します。


リストは、他の言語でいえば「1次元配列」です。

ただし、この中のデータには何でも入れることができます。リストですら入れられます。


リストをリストにしたものがあれば、それは2次元配列と同じように使えます。


Lisp のプログラムもまた、リストの形で示されます。

Lisp にとっては、プログラムもデータの一つに過ぎないのです。


そして、Lisp の命令は、基本的にリストを処理するものばかりです。

この「処理」には、プログラムの実行も含まれます。


たとえば、条件分岐は、複数のリストのどれかを選んで「実行」することで行われます。

繰り返しは、リストを規定回数「実行」することで行われます。


普通のプログラム言語では、プログラムとは実行され続けるもので、その流れを制御するのが条件分岐や繰り返しです。

しかし、Lisp ではそうではなく、「どのように実行するか」の指示を出すことでプログラムを制御します。


LOGO も Lisp の影響を受けているため、リスト型を持ちます。

リストは [ ] で表現され、実行制御もリストで行います。


つまり、実行されるプログラムは [ ] で括られたブロックのように見えます。


Smalltalk も、LOGO の影響を受けた言語なので、同じように [ ] で表現するリストを持ち、実行制御も同じように行われます。



NOVA 版 BCPL では、プログラムのブロックを [ ] で表現します。

後で作られた Smalltalk も、プログラムのブロックを [ ] で表現します。


しかし、BCPL は命令文をまとめた「複文」を示していて、Smalltalk ではの「リストに入れられたプログラム」を意味します。

見た目が似ていても、全く別のものなのです。


このため、少なくともブロック表現については、BCPL から Smalltalk への影響はないと思われます。




さて、まとめましょう。


・制作順は、BCPL のあとに Smalltalk 。

 前回僕が書いた、BCPL の表記が Smalltalk の影響で変更されたのではないか、という推察は誤り。


・TX-2 から Nova に BCPL が移植された際、端末による使用できる記号の制限のため、ブロック表記を [ ] とした。


・LOGO を元に Smalltalk が作られた際、リスト表記としての [ ] を受け継いだ。


・どちらもプログラムブロックを [ ] を示しているように見えるが、その意味は全然違う。

 このため、BCPL から Smalltalk への影響もないと思われる。



結論としては特に面白いものはないですね…


今回の調査で一番面白かったのは、以前から話には聞いていた Smalltalk to BCPL translater の詳細がわかったことかなぁ。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

BCPLについて、訂正【日記 16/02/13】

別年同日の日記

03年 体調悪し…

05年 忙しい一週間・火曜日

08年 三代目永眠

13年 ページワン


申し訳ありませんが、現在意見投稿をできない状態にしています

ニクラウス・ヴィルト 誕生日(1934)  2016-02-15 16:01:04  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、ニクラウス・ヴィルトの誕生日(1934)


Pascal(1970) や Modula-2(1978) を作った人です。


Modula-2 は、一時期もてはやされていて憧れがあったのだけど、僕は使ったことがありません。

基本的に Pascal の後継(である、Modula の)改良版だそうです。


Pascal って、よくできていたし「将来のコンピューター言語はこれだ」というように言われたのだけど、欠点も多々あった。


それを解消しようとした意欲作が Modula で、でも意欲作であるが故の無理もあったみたい。

開発途中で無理に気づいて開発をやめてしまったため、詳細は明らかになっていません。


そして、無理な部分を修正したのが Modula-2 。

Pascal の良さは継承しつつ、悪いところはきちんと修正されていた。

だからこそ、熱狂的にもてはやされた。


でも、よくできているものが普及する、とは限らない。

Modula-2 は普及せず、今ではほとんど忘れ去られています。




Pascal のほうは、一定の普及を見ましたし、僕も使ったことがあります。


以前に少し書いたことがあったな。

大学で DOS 版の TurboPascal (Borland 社の作った、Pascal実装の一つ)を使っていました。


Pascal はコンパイル型言語なのだけど、TurboPascal はコンパイルがむちゃくちゃ速い。


当時、BASIC では F5 キーに「RUN」というコマンドが定義されているのが普通で、プログラムを作ったら F5 キーを押せば動き出します。

TurboPascal もこれに倣っていて、F5 キーを押すとコンパイルして、すぐに実行される。


この待ち時間が、事実上無いの。

インタプリタである BASIC のように実行できて、コンパイラなので速度は速い。


TurboPascal の実装が良かった、というのもあるのだけど、Pascal 自体の言語設計が上手だった。

構文解析がしやすいように巧妙に文法が定められていて、頭から終わりまで解析すると、その時点でコンパイルが終了していたのね。


#普通、コンパイラは1回目で変数名や関数の定義を把握し、2回目で命令を生成します。

 Pascal は、命令の生成と定義の把握を同時に行える文法にしてあった。




Pascal は、P-code と呼ばれる中間言語を生成します。

実行する際は、P-code インタプリタと呼ばれる仮想 CPU を使って、この中間言語命令を実行してやる。


だから、直接 CPU に命令を出すコンパイラに比べると遅いです。


でも、P-code 形式の良さもある。

まず、コンパイラの移植が簡単です。ターゲット CPU ごとに作り変える必要はないのですから。


#もちろん P-code インタプリタを作る必要はあります。


仮想 CPU なので、暴走しても停止させる、なんて芸当も可能です。

先に TurboPascal が F5 ですぐ実行できた、と書きましたが、実行中に停止することもできたので、本当に BASIC と同じ感覚で扱えました。


そして、十分にデバッグができたら、P-code から実際のターゲット CPU の命令に変換すればよいのです。

そうすれば、高速に動作させることができました。


これらの特徴はすべて、Pascal が教育用として考えられていたから。


教育用でありつつ、十分に強力で実際に役立つアプリケーションも作れる。それが Pascal の特徴でした。

実際、Pascal は Pascal で作られています。




先日から調査して書いている、BCPL (1967) と似てますね。


BCPL は、中間言語を生成して、インタプリタや、実際の CPU 命令へのコンバータを使って実行します。

実は、BCPL のこの中間言語は O-code と呼びます。呼び名も似ています。


BCPL が先に考えた、というのではなく、当時こういう形式が流行したのです。

ヴィルト自身、Pascal の前に Euler (1965) という言語を作っていて、その時にも同じように中間言語形式を使っています。


#パスカルにオイラー…偉大な数学者の名前です。


しかし、ヴィルトが Pascal を作った際に「P-code」という呼び名を広めたため、現在ではこうした形式を一般に P-code と呼んでいます。


P が何の意味か…は不明なのですが、ヴィルトが Modula-2 を作った時には M-code と呼んでいます。

ということは、P は Pascal の略なのでしょう。


しかし、今では P-code という呼び方が一般化してしまったため、pseudo (仮想的な)や portable (可搬性のある)の略とされます。




Pascal が当時どれほどの人気を持っていたか、示しておきましょう。


Apple II には、純正の Pascal 処理系が発売されていました。

Lisa も、Macintosh も Pascal でプログラムを作ることを前提として内部のプログラムが用意されました。


IBM が PC を作成したとき、必要としていた言語は、IBM の大型機でも使用されていた FORTRAN と COBOL 、それに家庭用 PC なら絶対必要な BASIC 、そして Pascal でした。

これらをすべてマイクロソフトに依頼し、マイクロソフトはこの4つに加えて DOS を開発しています。


TurboPascal は、当初 CP/M 用から開発されたので、Pascal は Z80 / 8080 マシンでも使えました。

もちろん、CP/M 互換の MSX でも使えます。


他にも、移植されたマシンは数知れず。

みんな、これが BASIC の次に来る言語だ、と心から信じていましたし、実際 Pascal はよくできたシステムでした。




WEB 上で動く、TurboPascal エミュレータがありました。


Borland 社が、TurboPascal の DOS 版の「コンパイラ部分」のみをフリーウェアとして公開したことがあります。

そのコンパイラ部分を使用したエミュレータです。


TruboPascal は先に書いたように、プログラム作成中に F5 を押しただけですぐに実行できました。

上のエミュレータでは、そうした統合環境を試すことは出来ませんが、雰囲気くらいはつかめます。


「D」を押すと、用意されているサンプル一覧を見ることができます。

「W」を押すと、ファイル名を聞いてくるので、上の一覧で見られるファイル名を、拡張子まで入れてください。


「R」を押すと実行できます。

実行中でも、何かキーを押せばすぐに元の状態に戻れます。


「E」を押すと、ソースファイルを編集できます。

このエディタは、ブラウザ上の TEXT 入力にすぎません。コピペも可能です。

セーブはない(S コマンドが画面上に表示されているが、実装されていない)ので、保存はコピペでローカルファイルにしてください。


エディタ使用時は、左下に「Close Editor」という表示が出るので、クリックすれば終了します。




TurboPascal にはグラフィックライブラリがあり、上で公開されているサンプルでもグラフィックを使用しています。


Apple II の Pascal にも、グラフィックライブラリを作ろうとしたことがあったようです。

でも、Apple II の VRAM って、非常に複雑なのね。

ハードウェアから見ると非常に美しい、よくできたものなのだけど、ソフト側から見ると難解。


ここに、理想的なグラフィック環境を作り上げるにはどうすればよいか、社内でもなんとなく競っていたようです。


ビル・アトキンソンが、Apple II のグラフィックはどうせにじむのだから、「点線」を描いても「直線」に見える、というテクニックを駆使して、非常に高速なラインルーチンを書いた。


これ、高速だから「QuickDraw」と名付けていたらしい。この頃は正式名ではなかったらしいけど。


…元の話、どこかで読んだのだけど探しても見当たらない。

ウォズが「アトキンソンはずるをしたけど、ジョブズは見破れず気に入ってしまった」と証言しているのは、手元にある「Apple II 1976-1986」に載ってました。



後に Lisa を作るときに、このライブラリが流用され、さらに Macintosh でも使用されます。

これらのマシンは白黒だけど、Apple II 用の QuickDraw はカラーを考慮していたので、内部的にはカラーを扱えるようになっていたらしい。


QuickDraw は「理想の」描画環境を目指したので、解像度に依存しないし色数にも依存しない。

(0,0) から (0,100) まで直線を引くと、100 ドットの線が引かれる。数学的に正しいです。


これ、昔の BASIC とかだと 101 ドットの線が引かれるからね。


QuickDraw は数学的に正しいから、他の解像度の環境に持って行っても、適切に倍率を掛けて描画して、同じ結果を得られた。

画面とプリンタでは解像度が全然違うのに、同じ結果が得られたのは、裏にこういう仕組みがあったからです。


今だと、PostScript が同じような仕組みを使っているし、Mac の画面描画も PostScript ベースになっているのだけど。




Macintosh … 今の MacOS X 搭載のやつじゃなくて、Classic と呼ばれる OS 9 までのやつね。

その ToolBox と呼ばれる ROM に搭載されたプログラムも、Pascal 前提でした。


だから、Cで扱おうとするとやりづらい。

Pascal とCでは、文字列を扱う方法が違うんです。


Cでは、文字列の最後に NULL (キャラクタコード 0 の文字)を置く。

Pascal では、最初の1バイトに文字列長を入れる。文字列長がわかっているので、最後に NULL などを置く必要はない。


たしか Mac 用のC言語では、文字列をそのまま Pascal 文字列に変換してくれるような仕組みがあったと思うのだけど、よく覚えていない。

仕組み上、Pascal では 255文字以上の文字列は扱えない。




なんか Pascal から連想するいろんな話をつらつらと書き連ねただけになってしまいました。

まぁ、時にはこういう回があっても。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

関連ページ

BCPLについて、訂正【日記 16/02/13】

別年同日の日記

03年 体調悪し…

05年 忙しい一週間・火曜日

08年 三代目永眠

13年 ページワン


申し訳ありませんが、現在意見投稿をできない状態にしています

【Pascal】 EulerはALGOL60のコードを出力する、コンパイラというよりもALGOLの機能拡張だったはずなので、中間コードを出力したとは思えませんが、どうなのでしょうか。 (2018-01-08 12:12:45)

トーマス・J・ワトソン 誕生日(1874)  2016-02-17 12:14:06  コンピュータ 歯車 今日は何の日

▲目次へ ⇒この記事のURL

今日は、トーマス・J・ワトソンの誕生日(1874)。


IBM の初代社長です。起業した人かというとちょっと違うのだけど。

ちなみに、2代目社長となるトーマス・J・ワトソンはこの人の子供。


わー、なんだそれ。子供に自分と同じ名前付けるな。

ややこしいので、一般に父親は「シニア」または「ワトソン」、子供は「ジュニア」または「トム」(トーマスの愛称)と呼ばれます。


…というわけで、この文章ネタはもう3回目。


シニアの命日と、ジュニアの誕生日で使ってます。




ややこしいので改めて書いておくけど、今日はシニアのほうの誕生日。


凄腕のセールスマンだったけど、販売のために使った手法が法に抵触していて逮捕、一度は有罪に。

しかし、その後控訴して無罪を勝ち取ります。


その後、晴れて無罪となったので、手腕を買われて雇われ社長に。

パンチカード集計機やタイプライターなどを売っていた会社でした。


このときに社名を International Business Machines に変更。

意味は「国際事務機器」かな。略称で IBM と呼ばれます。


シニアは、この会社を大企業に育て上げました。



でも、シニアは IBM を「コンピューターの会社」にはしていない。

機械を売るのではなく、ビジネスソリューションを売るサービス会社でした。


サービスのために、多くの社員を抱えていた。

社員は家族同然と考える彼にとって、コンピューターを導入して「人手を減らす」なんて言うのはやってはならないことだった。


とはいえ、コンピューターと呼ばなかっただけで、SSEC という、演算部分が真空管で、当時としては最高速度のプログラム可能計算機を開発させているのだけど。


僕が調査している中では、一番古い「NOP命令」を搭載したマシンでもあります。

コンピューターじゃないけど、NOP は持っているのね。




詳細は、先ほどもリンクした命日記事に書いてますので、そちらをお読みください。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

今日は何の日

別年同日の日記

10年 Netwalker 環境設定

13年 メレンゲ

15年 クリストファー・レイサム・ショールズ 命日(1890)

15年 手相うらない ちょっとみせて 発表(1995)


申し訳ありませんが、現在意見投稿をできない状態にしています

歯科矯正  2016-02-18 12:21:54  家族

▲目次へ ⇒この記事のURL

いま5年生の長男が2年生の頃、学校の歯科検診で不正咬合と診断された。


歯医者に行ってみてもらってください、というので歯医者に行くと、矯正を始めるにはもう少し待ってからで良いと思います、と言われる。


それから毎年繰り返し、ことし「じゃぁ、そろそろ始めても良いかもしれませんね」と言われた。

で、歯科矯正するならこちらがいいですよ、と別の歯医者を勧められる。


かかりつけの医者、診療内容には「小児矯正歯科」を謳っている。

でも、やってないらしい。




お勧めされた歯医者(車で行かないといけない程度には遠い)には、もうちょっと早く来たほうが良かった、と言われた。

低学年から始めたほうが、変な癖がつく前だから治療が楽らしい。


とはいえ、こちらも歯医者の指示に従っていただけだ。


歯科医にも専門があって、矯正の専門家から見ると速い方が良いのだけど、そう思ってはいない歯科医もいるらしい。

一言で歯科と言ってもいろいろなので、仕方のないところだろう。



で、学校でも矯正を勧められるくらいなので少しくらい保険がきくかと思ったけど、矯正は完全に保険適用外。

べらぼうに高い。治療したものかどうか、躊躇したくらい高い。



とはいえ、歯は一生の問題だ。

高いとは言っても、矯正にかかる手間は個人差もあるし、やってみないとわからない部分もある。

やってみたら手間がかかったので料金高め、とかだと患者のほうも困るので、料金は基本的に一律だという。


最初の診療から、治療計画を立てるまで2週間。

この2週間の間に治療はしようと決めていたので、治療計画を聞いて、お願いしますと即決。


で、その場で歯形をとって、治療器具を作る。

2週間後、できた治療器具を入れてもらいに行く。



歯科矯正というとワイヤーで引っ張るイメージがあるのだけど、それだけではない。

長男の場合、舌の使い方に問題があるのが原因なので、それを修正しないといけないという。


うちの長男、乳歯から永久歯への生え変わりの時期に、乳歯が抜けてから新しい歯が生えるまでずいぶん時間がかかった。

前歯が抜けてから生えるまで、1年半くらいかかったはず。


で、前歯がないと「さしすせそ」のような音を出せない。

これらは、前歯と舌の間にわずかな隙間を開け、そこに空気を通すことで出す音だからだ。


これらの音を出そうとして、無意識に舌を前歯に強く押し当てる癖がつくという。

そして、普段から押し当てたままになってしまう。


その後永久歯が生えてきても、舌が押し当てられているので十分に伸びることができず、前歯をかみ合わせても隙間が空いたままになる。


これが不正咬合なのだけど、隙間があるので喋りづらく、舌を押し当ててしまい隙間が保持される、という悪循環に陥る。

さらには、歯が前に押されるので出っ歯(これも不正咬合)になる。まっすぐ下に向いても隙間がある歯が前に向けば、余計に隙間ができるわけで、良い話が一つもない。



というわけで、作られた治療器具は、舌の動きを制限するためのもの。

上両奥歯から前歯のほうにワイヤーを伸ばし、舌を前歯に押し当てられないように「フェンス」を作る。



最初はすごく嫌な感じがするだろうから、まずは慣れること、と言われ、基本的には今はこれだけ。

「舌打ち」で大きな音が出るように時々練習してね、とは言われている。


舌を前歯に当てている子は、大抵下の筋肉が弱く、後ろにひっこめておくことができないらしい。

舌打ちはこの筋肉を使う動作なので、繰り返すことで下を後ろにひっこめて置けるようになるのだとか。


他にも舌のトレーニングはあるのだけど、器具になれる1か月後から練習を始めるという。

ワイヤーなどをつけて歯列矯正するのも、1か月後に様子を見てから。




今週の頭にこれを装着して、長男は非常にしゃべりづらくなっている。


「さしすせそ」はかろうじていえるのだけど「たちつてと」は壊滅的。

これらは、前歯に舌を当ててから、勢いよく離して空気を前歯にぶつけて出す音だからね。


フェンスを入れたらご飯が食べにくい、というのは想定していたけど、しゃべりづらいことのほうがずっとストレスのようだ。



装着の直前、先週の土曜日に、参観日があった。

長男は5年生になったころから非常に積極的で、誰もやりたがらない仕事を率先してやっている。


参観日でも、発表の前に「これから~~の発表を行います」などのスピーチをする役割だった。

これは、上手にやっていた。


そして、3月に入ると「6年生を送る会」があるそうで、このスピーチも立候補していたそうだ。

喋りにくいけど大丈夫かな、とちょっと心配している。


心配だったら先生に相談しな、とは言ってあるけど、多少喋りづらくてもやりたい気持ちはあるらしい。




▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

家族

関連ページ

セガサターンモデム【日記 16/07/28】

ここらでコラムス【日記 16/12/22】

秒殺(2)【日記 16/02/19】

別年同日の日記

05年 忙しい1週間・木曜日

07年 最近のうちの子

15年 占い開発の初期

17年 ハンス・アスペルガー 誕生日(1906)

18年 GetBass


申し訳ありませんが、現在意見投稿をできない状態にしています

秒殺(1)  2016-02-18 15:11:34  業界記

▲目次へ ⇒この記事のURL

そろそろ、昔話を再開しましょう。


記憶にはなく、ネットで記録を探しても見つからないのですが、1996年の AOU エクスポは、おそらく2月の16~17日。

毎年、2月第3週の金・土にやっていた…と思いますので。ちょうど20年が過ぎたところ。


で、このショーに出品予定だったのですが、間に合わずに出せなかったゲームの作成に参加していました。

この後、このゲームはロケテストもしないまま開発中止になっています。


つまり、どこにも披露せずにお蔵入り。関係者以外誰も知らないはず。

そんなゲームの話を書いてよいのか、と自分でも迷いますが、20年もたっているのだからそろそろ書いても良いでしょう。




ファイナルアーチの海外版 (Super Major League) の開発が終了したのは、1995年の暮れのこと。

開発が終わり、チームは解散。僕はすぐに別のチームに配属になりました。


このチームが作っていたのが、ST-V の縦スクロールシューティングゲームで、この時点での仮タイトルが「秒殺 - Second kill」でした。

先に書いた通り、開発中止したので正式タイトルはありません。以降「秒殺」と呼びます。



セガって、ほとんど縦シュー作ったことがない。

いや、皆無とは言いませんが、経験が蓄積されるほど頻繁には作っていないのです。


でも、まだこのころは縦シューというのはゲームの重要ジャンルの一つでした。

社員の中でも、縦シューが好きだという人は結構いた。


そういう人たちが集まって、ST-V の性能なら新しい縦シューが作れる、と会社に掛け合って開発をしていたのが、秒殺でした、




縦シューは上に書いたように重要ジャンルなのですが、稼げるジャンルではありませんでした。

お店にとっては、ゲームの種類を揃えるために2~3台は置いておきたいけど、良くてトントン、場合によっては投資を回収できないジャンル。

だから、できるだけ安く作らなくてはなりません。


ST-V は発売前から、3D が使えるのに非常に安価なボード、とされていました。

安価なら縦シューを作るのに十分。3D なら、他社が出せないような新しい表現ができる。


そうした「新しい縦シューのジャンル」を作り出すのがプロジェクトの目標でした。




でも、新しいジャンルの創出って、言うほど簡単ではないのよ。


ST-V の実機が動き始めるはるかに前から、縦シュー好きの企画の人が、アイディアを温め続けていました。

ただ、実際の 3D がよくわかってないから、申し訳ないけどアイディアのほとんどが「机上の空論」。


3D だったらこんなことができる、あんなことができる…と、空想を膨らましているだけで、実際に作ってみないとわからない「3Dの欠点」には一切気づいていない。

企画先行型の落とし穴です。


たとえば、3D でパースを付けた街の上を飛べることになっているのに、地上物と空中物を同じ弾で倒せることへの違和感は考えていなかった。

パースがついているから、そもそも「弾の真下にいる」地上物は、俯瞰したカメラでとらえた画面の上では、弾と重ならないのです。

でも、座標上では重なったことになるから、「敵に当たった」と判断することになる。


この程度なら、画面の見た目で重なることを優先、で済むのですが、一事が万事そんな調子。

3D にする、3D の表現を取り入れる、ってかなりややこしいことでした。




そもそも縦シューの開発経験が乏しく、ノウハウがない、というのも問題でした。


秒殺のメインプログラマは、手相占いでメインプログラマをやった先輩。


怒首領蜂など、CAVE系の縦シューが大好きでした。

自分が好きだから一応かなり研究して、基礎部分を作り上げます。


でも、「遊ぶのが好き」という観点で研究したとしても、実際に作ってみないとわからないことがある。

このときに作成した基礎部分、それほど設計が良くありませんでした。



そして、企画担当者は彩京シューティングが好き。

僕は、チームに入るときに企画の方から「ガンバードを遊び込んでほしい」といわれました。

彩京の当時のヒットゲームの一つね。


#僕は縦シューはそれほど好きなジャンルではないのですが、仕事でやるのだからソフトを購入して、クリアできる程度にはやりこみました。

 だから、ガンバードはそこそこ好きなゲームの一つ。



ゲーム好きでないとよくわからないかもしれないけど、「縦シュー」といっても会社ごとに個性が違い、ゲーム内容はかなり異なります。

CAVE系のゲームは、アクション性が強くてパターンを作りにくい。反射神経が勝負です。

でも、彩京のゲームはパターン化しやすい。敵の弾もそれほど自分を狙ってこないため、繰り返し遊んで記憶することが大切。


さて、メインプログラマーが CAVE 好きで、企画が彩京好き、というのは困った問題を引き起こしました。

最初に CAVE のようなゲームを想定したプログラムを作ったのに、企画書ではそうではない動きばかり要求されるのです。


チーフ以外に2名のプログラマがいましたが、それぞれに担当したボスの動きなどの必要性から、元のプログラムをコピーして改造し、微妙に違うプログラムが多数存在する状態になっていきます。


コピーが多数あるので、バグが見つかった時には全部を修正しないといけないし、そもそもメモリを無駄遣いしている。

だんだん収集がつかない状態になっていきました。




僕がチームに入ったのはそんな時。

メインプログラマの先輩が、手相で一緒にやった僕の腕を信頼してくれ、僕をチームに入れるように部長に掛け合ったのです。


しかし、これが難題でした。



先に書いたように、秒殺のプログラマーは僕のほかに3人。


メインは、先に書いたように手相のメインプログラマの先輩でした。

手相の時は、この先輩と2人でプログラムを作りました。



もう1人、手相でご一緒した先輩がサブプログラマをしています。

…僕とメインの二人が手相の時のプログラマだったのに、もう1人一緒にやったプログラマがいる、というのは計算に合いませんね。


この人、手相の時は企画でした。

手相の前に作った占いもヒット、手相は大ヒットで、そのまま企画を続けるのに実績は十分…と思うのですが、なぜかプログラマに転向。


入社前は個人でゲームを作っていたようで、プログラムも、企画も、グラフィックもできる人でした。

この方とは、後に別のゲームでまたご一緒することになります。



あと一人、メインプログラマーと仲の良い後輩で、僕よりは当然先輩の方。


以前に書いたけど「わくわくタマ&フレンズ」作った人。

この方とも、後に別のゲームでまたご一緒しました。




この話、長いので次回に続きます



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

業界記

関連ページ

セガサターンモデム【日記 16/07/28】

ここらでコラムス【日記 16/12/22】

秒殺(2)【日記 16/02/19】

別年同日の日記

05年 忙しい1週間・木曜日

07年 最近のうちの子

15年 占い開発の初期

17年 ハンス・アスペルガー 誕生日(1906)

18年 GetBass


申し訳ありませんが、現在意見投稿をできない状態にしています

秒殺(2)  2016-02-19 14:52:24  業界記

▲目次へ ⇒この記事のURL

秒殺のプロジェクト進行は、予定よりも遅れていたようです。

本当なら、春のゲームショーには参考でも良いので出展するはずだった。でも、このペースでは出展が微妙。


だから、とにかく仕様書が作られ、先輩プログラマ3人が猛烈な勢いで実装していました。


プログラマならわかると思いますが、猛烈な勢いでプログラムするときって、品質は二の次になる。

とにかく動けばよい、という形で、類似ルーチンを切り張りして、似て非なるプログラムがどんどん増殖します。


これを3人でやっているのです。

人のプログラムに手を出してしまうと混乱するから、誰かが作ったルーチンを改造したいときは、コピーして改造する。

その改造ルーチンを別の人が使いたいときは、さらにコピーして改造する。


類似ルーチンが増えすぎ、どこかにバグや仕様変更があった時は、全部に手を加えないといけません。

管理が煩雑化しますし、何よりもメモリの無駄遣いでした。



途中から投入された僕の仕事は、このプログラムをすっきりと整理する、ことでした。

ただし、ショーが迫っているため、3人の作業を邪魔してはなりません。


混沌が追加され続ける作業を止めずに、混沌をなくすのです。




例えば、敵が弾を撃つことを考えてみましょう。


弾を動かすプログラムと、その弾を発生させるプログラムがあります。

発生時は、その弾を撃つ敵キャラクターの位置から弾が発生し、プレイヤーの操作する自機を正確に狙って飛ぶように移動方向が定められます。

そして、そのパラメータに従って、弾が動き続けます。一定速度でまっすぐ飛ぶ、のです。


秒殺でも、当然こうしたプログラムが最初に用意されたようです。


でも、縦シューやる人ならわかるけど、敵弾って自分を狙うばかりではないよね。

例えば、自分とは関係なしに、一定のパターンでばら撒かれる弾がある。

そういう動きを企画書で指示されたため、弾の発生プログラムがコピーされ、「角度」を渡せるように拡張されます。


さらに、弾を同時に3発、15度の角度を開けて撃つような指示があり、「散弾角度」や「同時発射数」が指示できるような拡張もあり、「弾の速度」などを変えられるような拡張もされています。


弾を動かす方のプログラムも、最初は弾の速度が一定だったのが、速度可変になったり、途中から加速する、自機を狙うホーミング弾を動かす…などなど、拡張されます。

これらがすべて、「少しづつ違う別のプログラム」として作られてしまっているのです。


これらを何とか整理してほしい、というのが僕に与えられた仕事でした。




まず、弾のデータを保持する構造体を整理しました。

多数あるプログラムごとに、少しづつ違う構造体があったのを、全部共用できるように。


ミソは「特殊処理ルーチンへのポインタ」を持たせたこと。

ポインタが NULL なら線形の動きをしますが、ポインタが存在していれば特殊ルーチンを呼び出します。


これは、ホーミング弾や加速弾などの特殊な動きに使われます。

あとは、線形でも速度が変えられるように「速度」パラメーターを持たせたり、その程度。


発生プログラムのほうは、自機を狙うかどうかのフラグ、発射角度、同時発射数…など、非常に多くのパラメータを受け取る関数を用意します。

先ほど書いた「特殊ルーチンへのポインタ」も、ここでセットできるように。


でも、引数が多すぎると使いにくいですし、今までのプログラムを全部書き換えないといけなくなる。

そこで、今までの関数と同じ体裁で、内容は「書き直した関数を適切に呼び出すだけ」の関数(ラッパ関数)を用意します。


これで、今までのプログラムはそのまま動くし、今後特殊な弾が必要になっても、多数のパラメータを適切にセットすれば、プログラムを改造する必要はなくなるはず。


といっても、一部で今までの構造体を直接アクセスするようなプログラムもありました。

そういう箇所は、個別対応で書き換える必要がありました。


#簡単にいえば、共通部分をまとめたスーパークラスを作り、処理の違う部分は個別のメソッドとしました。

 継承クラスとしてメソッドをオーバーライドしたものを作ることで、多様な動作を作り出せます。

 …と、オブジェクト指向の知識があればそう説明できるけど、使用言語はC言語でした。



2016.4.29追記


前提となるゲーム技術を解説しているページを見つけました。

というか、かつて存在したページが、Wayback Machineに保存されていた、という形かな。


上記ページの説明では「タスクシステム」と呼んでいますが、処理とデータをメモリブロック(上記記事ではワークと呼んでいる)内でひとまとめにする技法です。


上記ページでは「ギャラクシアン発祥説」を唱えているけど、、ギャラクシアンではこの技法は使われていないそうです。と、付記しておきます。


以下は、上記ページの内容を読んで理解した、もしくはすでに知っていた人向けの解説。



タスク生成がインスタンスの生成になります。

汎用ルーチンを使うなら(=クラスを継承するなら)、ワーク内のデータは位置を揃える必要があります。


上記記事で解説していませんが、例えば「画面に表示するキャラクター」のクラスであれば、X Y 座標とキャラクタの ID などをワーク内の共通位置に持てば「キャラクタ表示」関数を共通化できます。



ワーク上に処理関数へのポインタを置いて呼び出すのはメソッド呼び出しになり、ポインタの書き換えはオーバーロードに当たります。


キャラクタクラスを継承して「敵」のクラスを作ったとします。

あたり判定など、共通の処理は敵全体の共通処理です。


敵の動きなどは種類ごとに異なるので、「敵の動き」というメソッドを作ります。

(処理関数へのポインタを持たせる)


敵の共通処理の中で、このメソッドを呼び出すようにしておけば、敵の処理自体は共通化したままで、個別の動きは変えられるわけです。



僕が入る前の「秒殺」のチームでは、他の人が作ったタスクシステム上にすでに存在していた「画面表示キャラクター」用のクラスは使っていたのですが、そのクラスの下に敵の種類・敵弾の種類ごとに別々のクラスを多数作ってしまっていました。


僕の作業は、これらの多数のクラスの「スーパークラス」として、「敵」や「敵弾」のクラスを作り、個別の敵・敵弾は、そこからの派生クラスとした、というものになります。



以上、追記終わり。




大切なのは、すべてを統合した「巨大関数」について、詳細な仕様を残しておくこと。

呼び出し方法はもちろんのこと、どこのプログラムが、どんな理由でつくられており、実際にどのルーチンで呼び出されたときに有効になるか。

これを整理して文書化しておきます。


そうしなくては、「プログラムが理解できないから、いじってバグが出るのが怖い」という理由で、またコピーが増えることになります。

どこにどんな意味があるのか、実際どこで使われているのかが明確になっていれば、手を加える際にも間違いが減りますし、実際に影響がありそうな部分で動作の互換性を確かめられます。


弾だけでなく、敵の動きやボスの動きなども同じように統合していきます。



そもそも、チーム配属された時点で、僕はプログラムは一切理解できていないわけです。(まだ見てもいないのですから)

プログラムの理解から初めて、こうしたプログラム整理をするだけで、配属から1か月くらいかかった記憶があります。




しかし、1か月というのはショーへの締め切りを意味していました。

今後拡張しやすいように内部を整理する、という作業だけに追われ、結局ショーに向けての「拡張」を開始することができません。


ショーへの出展は見送り、と決定されます。


正直なところ、ここまで頑張ってきた企画・プログラマの面々には申し訳ないのですが、急に投入された僕から見ると、この時点でのゲームは全然面白くない。


形だけを突貫で整えた、というだけで、バランス調整などが入ってません。


ゲームの面構成も、今すぐ使えるプログラムを組み合わせた、という感じでバラエティに乏しい。

どの面も同じように見えます。



そのことは、企画者もわかっていたようです。

ショーへ出展しない、と決まった時点で、「間に合わないとわかっているから手を付けなかった」部分の拡張に入ります。



僕は、地上の敵に複雑な動きをさせたいので、配置してほしい、と頼まれました。


ここまで、地上物は「地上に固定」されていたのね。

ところが、ここで頼まれた地上物は、テクスチャに描かれた道の上を走ることになっている。

この「道」はただの絵で、どのように動かすか、というデータすらない状況。


しかも、3D表現を活かすために、この「道」がついているのは、実は巨大な空中物の表面だという設定になっていて、3Dでぐりぐり回るのです。

そんなこと、それまで一切考えられていない。


最初は、「それらしい動き」で誤魔化そうとしましたが、多数の敵を「巨大な空中物」の表面に固定するのには無理がありました。

ちゃんと計算するプログラムを作らないとだめだ、と思い、関数をくみ上げている最中に、プロジェクトの中止が決まりました。


だから、僕はこのチームで「プログラムを整理した」だけで、何も作り上げるような作業ができていません。




中止が決まる直前、春のショーが開催されました。1996年の AOUショーね。


このショーでは、タイトーから「レイストーム」が発表されていました。

すでに人気のあった縦シュー「レイフォース」の続編でありながら、3D表現を大胆に取り入れた、新たなジャンルを作り上げていました。


#知らない人は、レイフォースのリンク先の Youtube 動画を見た後で、レイストームを見るといい。

 ゲームシステムがほぼ同じで、前作を遊んだ人には違和感なく遊べるにも関わらず、画面表現が全く違う驚きがある。


狙いは全く同じ。ただし、秒殺はいまだ見せられる状態になっていないし、既存の縦シューをポリゴンで模倣するのが精いっぱいの段階で、「新たなジャンル」を感じさせるまでにはなっていません。


レイストームは、ヒットタイトルの続編で、違和感なく遊べるシステムを作り上げながら、新しい画面表現に成功していました。

どう考えても勝ち目のない勝負。プロジェクトの中止も当然でした。




メインプログラマの先輩は、本当に縦シューが好きで、このプロジェクトにかなり入れ込んでいました。


ただ、やっぱり作成経験が乏しかった。どんなに遊ぶのが好きでも、それで上手に作れるわけではない。

プログラマだけでなく、企画も含めてね。


経験が少ないジャンルって、よくあるゲームの模倣を作るのだけで精いっぱいで、新たなアイディアを入れる余裕がないのです。


メインの先輩は、このしばらく後に、家庭の事情もあって、退社して実家に帰りました。

入社直後からお世話になっていて、仕事以外の趣味分野でもゲームや本の貸し借りをしたりする仲の良い方だったのですが、その後は連絡もしていません。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

業界記

別年同日の日記

03年 とりあえず復活

04年 究極のプログラムツール

05年 忙しい1週間・金曜日

15年 ロケテストとショー発表


申し訳ありませんが、現在意見投稿をできない状態にしています

おゆうぎ会  2016-02-21 16:48:35  家族

▲目次へ ⇒この記事のURL

毎年恒例、保育園のおゆうぎ会。


1年間の締めくくり、特に年長さんの卒園前の締めくくりの色合いが強い、保育園年間最後から2番目の大行事です。

(一番最後は卒園式)


長男の時から毎年見てきましたから、今年で参加するのは10回目かな。

そして、次女は今年年長さんなので、これが終わったらあとは卒園式を残すのみ。

我が家にとっても、基本的には最後です。




といっても、見ているほうは結構暇なんだよね…

自分のこともが出るところだけ熱心に見て、他の子の演技は全く見てないような親御さんもいます。


まぁ、見てなくてもいいんですけど、縁起の最中に露骨に席を立って移動する人もいる。

わが子の演技をビデオ撮影している人もいるので、演技中の移動は迷惑です。



午前中の早い時間は、基本的に3歳未満。特に0歳児は、10時ごろになるとお昼寝の時間だから。

そして、午前中は6歳未満。つまり、年長以外。


午後はたっぷりと年長さんだけの演技です。



保育園では、年齢別に保育している時間もありますが、年齢の垣根を払った縦割り保育の時間もあります。

なので、次女は下の学年の子にも仲の良い子がいる。


「~~ちゃんの演技、ビデオに撮っといて!」と頼まれているので、僕午前中もビデオで撮り続けます。

ただぼーっと見てるより、見る気になってみるのでずっと面白かった。

(ちなみに、妻は午前中は着替えなどのお手伝い。午後は自分の子の演技なのでゆっくり鑑賞です)


毎年誰かが泣いてしまう1歳児クラス、今年は誰も泣かなかった。

裏で着替えなどを手伝っているお母さん方は「奇跡だ!」と言っていたそう。


こちらも、次女の仲良しの子の妹がいるので、ビデオ撮影してました。

1歳だと、舞台の上で呆然としちゃって動けない子もいるのだけど、楽しそうに踊っている子が多くてかわいい。



その一方で、2歳児クラスの子は一人泣いてました。

たくさんの人の前、強いスポットライトを浴びると、いつもと違う雰囲気で圧倒されて、緊張感に耐えられない子がいるんだよね。




年長さんは、全員での群舞と、数人ずつのグループの踊りが2つ、簡単な演劇で、1人4回舞台に立ちます。


午後は年長さんだけなので、子供によっては舞台が連続する。

それでいて、衣装も凝っていて着替えに時間がかかるので、急に「待ち時間」が発生することもあります。


#古い保育園なので、歴代お母さん方が作った衣装がたくさんあります。

 子供向けの振袖や袴もあるし、アイドル風、ウェスタン風、法被姿に宇宙人? など、とにかく多彩。


待ち時間が発生すると、急にPTA会長とか主任の先生が出てきて、「場を繋げって言われたので」と身もふたもない暴露をしたうえで最近の保育園の話とか始めます。

まぁ、これも一興かと。



演劇は、不思議の国のアリス。うちの次女はアリス役でした。主役。二人いるんですけどね。

主役はやることが多いので、途中で交代することにしないと、保育園児には覚えきれないから。




次女は、夏のお泊り保育の際に風邪を惹いてしまい、参加できませんでした


これが残念だったので、ここしばらく、風邪をもらわないようにできるだけ外出を控えてきました。

休みのたびに、遊びに行きたいとか言われていたのだけどね。


これで大きな行事が過ぎたので、ちょっと安心して出かけられそうです。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

家族

別年同日の日記

17年 在庫処分


申し訳ありませんが、現在意見投稿をできない状態にしています

スティーブ・ブリストー 命日(2015)  2016-02-22 11:42:59  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日はスティーブ・ブリストーの命日(2015)。


昨年訃報を見たときにはじめてこの方のことを知りました。

いや、名前くらいは見かけていたはずなのですが、ちゃんと興味を持っていなかった。


ATARI のエンジニアで、スプライトを考案した人ですね。


リンク先では特許書面がリンク切れになっていますがこちらにあります




以前、ATARI の設立者の、ノーラン・ブッシュネルの話を書いたことがあります。

そこで「ブッシュネルのアイディアを元に、コンピューター・スペースを作り上げた同僚」というのが出てくるのですが、このうちの一人がブリストーです。


ちなみに、ATARI 最初のヒットゲームである PONG! は、別の人。

やはり AMPEX 時代の後輩技術者、アラン・アルコーンが作っています。


アルコーンは、PONG! の大ヒット後、ブッシュネルに誘われて ATARI に移籍しています。

その後、ブリストーも ATARI に移籍。


ブッシュネルは、技術者としてはアルコーンよりもブリストーのほうを高く評価していたようですから、実際ブリストーの腕前は大したものだったのでしょう。

その後、続々とゲームを作り出します。大ヒットとなった Break out! もブリストーの作。



スプライト開発の経緯は、先にリンクしたページが詳しすぎて、ここで改めて(丸パクリで)書くのもはばかられるので、そちらをご覧ください。

まぁ、簡単に書けばアメリカン・フットボールのゲームを作りたくて、多数のキャラクターを表示する方法を考案したようなのです。


これで作成された ATARI Football は、アメリカでは大ヒット。

日本ではあまり知られていない…ということなのだけど、僕このゲーム知ってるわ。


アメフトって、フォーメーションをどのように決めるかがすごく重要なゲームで、局面に応じて適切なフォーメーションを選択し、そのうえでボールを適切にコントロールする…つまり、アクションゲームとなる部分があるわけです。

頭脳プレイも必要、アクションプレイも必要、このバランスを絶妙にそろえたゲームでした。…だったようです。


というのも、このゲームを見たことはあるのだけど、アメフトのルールを知らないものにとってはあまりにもハードルが高いゲームなのです。

フォーメーションを定めて、そのフォーメーションごとに定められた「最適な動作」を行うことが重要なのだけど、アメフト知識がないと全く何してよいのかわからないのね。


日本で売れなかった理由、よくわかります。

でも、近所のお店にはこれ置いてあったんだよね…




さて、ブリストーは後に「キーゲームス」の技術者も務めています。

これ、今日調べていて初めて知った。


Wikipedia に書いてあったのだけど、非常に面白い話なのに、書き方が悪くて伝わりにくい。

かみ砕いて説明しようかと思います。


#Wikipedia を見ただけで、そもそもの出典を僕が読んでいません。

 なので、勘違いがあったらごめんなさい。



まず、ゲーム業界の商習慣の話を十分に知らないと理解できないのに、それらは全く書いてない。

そこの説明から。



ゲーム商売は、「メーカー」と「ディストリビューター」「オペレーター」に分かれています。


メーカーは、ゲームを作る会社。ATARI 社なんかもそうですね。

オペレーターは、ゲームセンターなどの運営者。お客様に触れる、一般に一番目にするところです。


その間に「ディストリビューター」があります。

ゲーム会社からゲームを大量に仕入れ、オペレーターに卸す流通業。


さて、アメリカの場合、州ごとに各種の規制などが異なります。

なので、ディストリビューターも州内の流通だけを受け持ち、他州にまでは手を出さないのが普通。


そして、1つの州の中にも、当然複数のディストリビューターがいて競業しています。



ATARI 社創設当時のアメリカでは、商習慣として、メーカーは「1つのゲームにつき、1つの州で、1つのディストリビューターとだけ契約する」ことになっていたようです。

ゲームごとに流通独占契約を結ぶのですね。


PONG は大ヒットゲームで、コピーが公式の 10倍も作られた、と考えられています。

これも、ATARI がある会社と契約してしまうと、州内の別のディストリビューターは契約できなかったため。


ゲームが大ヒットしていて、扱えば莫大な利益があるのに、契約できないから諦める…なんて物わかりのいい話はありません。


出来が多少悪くても、似たようなコピー品があり、契約できるなら扱うのです。

会社を維持するための努力ですから、綺麗ごとは言っていられない。




ブッシュネルは、これを馬鹿馬鹿しい商習慣だ、と考えました。

なんとか、ATARI 社が複数の会社と契約できるようにしたいと考えました。



そこで、たまたま近所に住んでいた keenan さんに掛け合って、ダミー会社の社長に据えます。


愛称 kee さんのゲーム会社なので kee games 。でも、会社のマークは key (鍵)のような形にしてあります。

ここで重要なのは「ATARI のマークとは全く違う」ということ。ATARI とは別会社であることが重要なのです。


重役は、ブッシュネルと、アルコーン。でも、これは「経営重役」なので、あまり名前を表に出しません。

そして、技術者は、ブリストー。「ATARI から寝返って別の会社に就職した」という噂を広めました。



ATARI 社がゲームを作ると、それを元にすぐにキーゲームズも「コピー品」を作ります。

事実上2社は同じ会社なのですから、そっくりで高品質のゲームを作るのは簡単でした。


そして、1つの州で最大手のディストリビューターと、ATARI は契約します。

2番目の規模のディストリビューターは、「そっくりのコピー品を作る」キーゲームズが契約します。


これで、ディストリビューターはほとんど抑えられてしまう。


その他のコピー品を扱うところもあるかもしれませんが、流通にあまり乗らなければ儲かりません。

儲けがなければ、そのうちコピー品を作る業者もいなくなるでしょう。


もちろん、キーゲームズは事実上 ATARI と同じ会社ですから、利益は全部 ATARI に入るのです。



ブリストーが独自にゲームを作ることもあり、その時は ATARI がコピー品を作ります。

とにかく、2つの会社をうまく使って、商習慣を気にせずにゲームを流通させることが大切でした。




同じようなゲームが複数流通し、「独占契約」に意味がなくなったことで、徐々に商習慣は崩れていったようです。

後には、ディストリビューターの独占契約自体が無くなってしまいました。


これでキーゲームズも役割を終えました。ATARI 社に吸収合併されます。

でも、ATARI 社としては取り立ててこの事実を公表することもなく、両社は「何か関係がありそう」だと推測される程度にとどまっていました。


関係が明るみに出たのは、結構最近になってからなのだそうです。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

別年同日の日記

03年 美術と芸術

05年 確定申告

10年 八景島

12年 経験した中で最大のバグ

14年 雪・科学館・おゆうぎ会


申し訳ありませんが、現在意見投稿をできない状態にしています

クロード・シャノン 命日(2001)  2016-02-24 11:56:55  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、クロード・シャノンの命日(2001)


誕生日記事を書いているので、詳しくはそちらをお読みください。

この記事は、命日を記録する目的のみ。



実は今日は、スティーブ・ジョブズの誕生日(1955)でもあるのだけど、こちらはまだ書く気がせず。

どうも、死んでから神格化されてしまっていて、迂闊に書けない雰囲気なのだよなぁ。


うめさんの漫画もあるし、映画化もされるし。

とっても酷い人で好きなんですけどね。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

別年同日の日記

10年 SH-03Bに思うこと

10年 DoCoMo のメール配信遅延

12年 親戚いっぱい

13年 訃報

15年 当時の雰囲気


申し訳ありませんが、現在意見投稿をできない状態にしています

BCPL の § 記号についての追加調査  2016-02-26 16:46:27  コンピュータ

▲目次へ ⇒この記事のURL

少し前に、最初に { } を使った言語とされる BCPL は、なぜ当時「使えなかった」文字である { } を使おうとしたのか、という話を追いかけていた


これは一応決着がついて、そもそも BCPL は { } を使ってはいない、記号類を環境ごとに変更できる柔軟な設計で、TX-2 では { } が使えたので、たまたま使っただけだ、ということがわかっている。


でも、疑問は次々に出てくる。

その後も調査を続けているのだけど、どうも話が入り組んでいてまとまらない。


まとまらないので詳細は後日、ということにするのだけど、面白いので一部を紹介していこう。




話が入り組んでいるので、まずは昔のコンピューターで使った文字コードの調査をしてみよう、と思った。


昔はコンピューターを「電子計算機」と訳したように、計算機能が主だった。

でも、ある段階から、計算結果を人間にレポートすることが重要になって、出力時にアルファベット(以下、文字と書く)を使えるようになる。


出力で文字を使うのだから、少なくともプログラマは文字を入力できる必要がある。

たとえば、IBM では数値を示すパンチカードに、特殊な形式で穴を開けることで文字を示すことにした。


ややこしい入力方法とは言え、「文字コード」が誕生するわけだ。


イギリスで作られた EDSAC は、プリンタとしてテレタイプを接続していた。

キーボード部分はコンピューターに接続していないのだけど、当時のテレタイプは、タイプした内容をパンチテープに保存できた。


プログラムは、この「パンチテープ」として入力された。

なので、ここでも IBM と同じように、パンチの穴として文字を表現できるわけだ。


どちらの場合も、使用できる文字は電動タイプライターの活字に制限される。

{ } は存在しないから使えない。




イギリスのマンチェスター大学で作られた、マンチェスター Mark I…

The Baby markI の実験のあとに作成された、本来作りたかった計算機。


EDSAC の流れを汲んでいて、テレタイプで入力したパンチテープでプログラム入力する。


今回調べるまで知らなかったのだけど、この Mark I で、FORTRAN よりも昔にコンパイラ言語が作成されていた。


autocode と呼ばれるものなのだけど、ちょっとややこしい。

というのも、イギリスでは autocode が「コンパイラ」と同義語のように使われたようで、autocode と名付けられた言語がたくさんあるのだ。


Mark I でも、2つの autocode がある

文法なども全く違うのだけど、どちらも「Mark I では使えなかった文字」が含まれている。


たとえば、1つ目の autocode では、変数への代入に → が使われる。

2つ目の autocode では、条件判断に ≤ が使われる。


これらは、Mark I に接続されたテレタイプでは使えない文字だ。

リンク先に文字コード表があるけど、文字平面は「シフト」できるので、これ以外に数字が使えたらしい。


→ ≤ も、シフトした平面にあった可能性がないとは言わないのだけど、後で書く理由で、文字になくても使えたのだと思う。




Mark I と同じ設計者が、Atlas というコンピューターも作っている。

こちらにも autocode があるのだけど、先に書いたようにこの言葉は「コンパイラ」程度の意味しか持っておらず、言語仕様などは全く異なる。


このatlas autocode のマニュアルがあるのだけど、注目すべきは 2.1 章。


Atlas には Flexowriter (当時人気のあったテレタイプの商品名)がつながっている、としたうえで、使える文字種を挙げている。


π とか ½ のような、今見ると奇妙な記号もあるのだけど、今見ても一般的な記号が揃っている。


そして、すぐ下に「バックスペースを活用して、これらの文字も作れる」と、いくつか例が上がっている。


≠ ≥ ≤ ; ↑


≤ は、先ほど書いた MarkI の autocode でも使っていた記号だ。


今ではバックスペースは「直前の文字を削除」の意味だけど、本来タイプライタでは「削除」なんてできない。

1文字戻す、というのが正しい意味合いだ。


そして、1文字戻って別の文字を打てば、文字は重ね書きされる。


< に _ を組み合わせれば ≤ になる。

: に , を組み合わせれば ; になる。

= に / を組み合わせれば ≠ になる。


MarkI autocode にあった → なんかは、 - と > を組み合わせればできるだろう。


↑ はどうやって作るんだ? と思った。(使える記号種に、^ は無い)

公開されているのはスキャンしたマニュアルを OCR したもので、元画像も公開されている。


見てみたら、↑ と書かれているものは * に | を組み合わせ、* としたものだった。

形が全然違うけど、そのすぐ後ろに「autocode では、* をべき乗の記号として使う」とあるので、一般的なべき乗記号に合わせたようだ。



さて、ここで新鮮な驚きが。

autocode のソースコードとしては、テレタイプで打って作ったテープをコンピューターに読み込ませる。


紙の印字上は ≤ は1文字かもしれないが、ソースコードとしては3文字だ。

< _ の2文字の間に、バックスペースの制御コードが含まれている。



言語仕様として、予約語の中にバックスペースが含まれる!


ちょっと衝撃だった。まさかそんな言語が世の中に存在しようとは思っていなかった。




でも、この発見は疑問に思っていたことに答えをくれる。


Atlas の後継機である Atlas 2 …のプロトタイプ機である Titan の上で、CPL 言語が開発された。

(Atlas にもすぐに移植されている)


CPL もまた、autocode の流れを汲んでいたようだ。

以前の記事で、CPL はブロックの開始に § を使用する、と書いた。

ブロックの終わりは § に | を重ね打ちした § だ。


…そう、すでに「重ね打ち」テクニックを使っているにもかかわらず、それを一般化して考えていなかった。

ここだけの特別なものだと思っていた。


そして、一番の疑問は、Titan に接続されたテレタイプに § 記号はあったのか、ということだった。


これ、おそらくは小文字 s の重ね打ちだわ。

タイプライターの高級機種には、行を上下に半分ずらしてタイプする機能があった。

( X2 とか、X2 とか書くためだ)


裏が取れていないので確定はできないけど、おそらく§は、s を行半分ずらして重ね打ちしたもの。

§ は、さらに | を重ね打ちしたもの。


§ は、見た目の上では1文字なんだけど、バックスペースも含めて5文字の長さの「予約語」となる。


begin ~ end って書いたほうが楽なんじゃね? ってくらいのタイプ数だ。




BCPL が作られたとき、言語設計上は § を前提としているのだけど、環境によって別の記号も使えるように作られた。


ここで新たな疑問が出る。


BCPL では、「Titan では使えた特殊記号 § が使えなかったから、違う文字にしたのだろう」と考えていた。


でも、Titan だって § は使えなかったのだ。s の重ね打ちだった。

なんで、BCPL では s の重ね打ちをやめたんだ?



これは悩まずにすぐに答えにたどり着ける。

BCPL は最初 CTSS で作られ、すぐに TX-2 で動き始めた、と調査してある。

この両機種とも、小文字の s が使えない。


CTSS は、IBM 7094 で動いている OS だ。

そして、先に書いたように、IBM のコンピューターはパンチカードに通常とは違うやり方で穴を開けることで、文字を表現した。


パンチカードの1文字に対応する穿孔個所は12あり、1文字を 12bit で表せるように思える。

しかし、穴を開けすぎるとカードが弱くなり、読み込み時に機械に引っかかってトラブルを起こしやすくなる。


そのため、穴の組み合わせ方法は制限されていて、48文字しか表現できなかった。


7090のマニュアルの、102ページからプリンタの説明があり、使える 48文字と、パンチカードで表現する方法が載っている。

7094でもプリンタは同じものが使われた。



TX-2 は、Titan と同じく Flexowriter がつながっているのだけど、活字部分を変更した特注品だった。

小文字は、一部の数学や物理で変数として使われやすいものだけを残して、各種記号に変更されている。


他の機種では持っていなかった { } などがある一方で、小文字 s は存在しない。



というわけで、BCPL は s の重ね打ちで § を表現することができなかった。


小文字の s があれば CPL に忠実に作っていたかもしれない。

初期の2機種とも小文字 s が使えないという不運な偶然が { } を言語に取り入れさせたのだ。




…あれ、これはこれで話としてまとまったな。

最初に書いた通り、「まとまらないから」一部を紹介するつもりだったのだけど。


えーと、ここにあげた機種以外にも、古いコンピューターの文字コードを片っ端から調査しています。

そして、その文字を入れるための「キーボード」の扱いがどうだったか、ということと、その文字コードの影響を受けてどのように言語が作られていったか、も。


3つの、密接に絡み合いながらも異なるものの歴史を調査したら、分離して3本書くと影響がわかりにくくなるし、一つにまとめて書くと話がごちゃごちゃするし…で悩んでたのね。



特に、言語の歴史はすごく面白い論文があったので紹介しておきます。


Knuth 大先生が書いた、初期の言語についての論文です。

FORTRAN 以前に autocode があったことを挙げているけど、さらにそれ以前の言語から書かれている。


言語といっても、「CPU を使いやすくするために命令を充実させた仮想 CPU」とか「数式を入れたら計算プログラムを出すだけで、制御構造一切なし」とか、そういうものだけどね。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

BCPLについて、訂正【日記 16/02/13】

別年同日の日記

04年 メインマシン絶不調…

13年 シュガーバニーズとマドレーヌ

15年 ずんずん教の野望

18年 横浜散策


申し訳ありませんが、現在意見投稿をできない状態にしています

ハーマン・ホレリス 誕生日(1860)  2016-02-29 12:24:29  コンピュータ 歯車 今日は何の日

▲目次へ ⇒この記事のURL

今日は、ハーマン・ホレリスの誕生日(1860)


閏日の誕生日です。珍しい!

今日の紹介を逃すと、次は4年後になってしまいます。


まぁ、普通は28日か、3月1日を「誕生日」の扱いにするのでしょうけど。




ハーマン・ホレリスは、パンチカード集計機を作成し、計算・集計事務に革命を起こした人です。


「計算する機械」は歯車式でそれなりに作られているのだけど、「データを処理できる機械」というのはそれまでなかった。

今だって、コンピューター仕事で何が重要かというと、計算よりも「データ処理」です。


ホレリスが作った集計機は、10年以上かかると見積られた集計作業を、たった1年半で終わらせています。

しかも、1年半の間に「2回集計して間違いがないことを確認する」作業まで終わらせているのです。


それまでの10倍以上の作業効率。

これを革命と言わずに何と言いましょう。




たとえば、国勢調査の場合でいえば、1人の人に関する様々なデータを、1枚のカードに入れておくのね。


そして、集計機を使うと、まず「分類」ができる。

年齢別にいくつかの山にカードを分けたりできます。


そして、枚数を数えられる。年齢別に分けた山ごとに枚数を数えれば、年齢ごとの人数分布がわかる。


集計ができる。

年収が書かれていたとしたら、年齢ごとの年収を全部足し合わせられます。

すでに人数がわかっているのだから、計算すれば年齢ごとの平均年収がわかります。


まぁ、こんな感じ。

今のコンピューターのように完全自動ではないけれど、分類したり集計したりを繰り返せば、望むデータを手に入れられるのです。


例えば、最初に年齢で分類するのではなく、家族構成(子供の人数)で分類することもできます。

すると、年収と子供の数の関係性を調べたりもできる。



これ、今のデータベースでも、「カード」が「レコード」という単位に変わっただけで、ほぼ同じ概念。

コンピューターのデータベースが広く普及したのって 1990年代後半だと思うのだけど、その100年前に同じようなものを作り上げていたのです。


#まぁ、パンチカード集計機を元にコンピューター化したのがデータベースだ、ともいえるのだけど。




IBMのパンチカード集計機は、カード1枚に 80桁の数値情報を入れられました。


後に、パンチの穴の組み合わせで文字も表現できるようにしています。

1枚 80文字です。これが、後に「1行 80桁」というコンピューター画面の基準となります。


今では画面上に自由なサイズの Windows を開けるので、1行が 80桁というイメージはないかもね。

でも、画面サイズで 640dot が基準とされやすいのも、横 8dot の英字フォントで 80桁を表示すると 640dot 必要になるためです。




もっと詳細を知りたい方は、以前に命日記事を書いていますので、そちらも併せてお読みください。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

今日は何の日

関連ページ

シーモア・パパート 誕生日(1928)【日記 16/03/01】

別年同日の日記

12年 閏日


申し訳ありませんが、現在意見投稿をできない状態にしています

関数電卓  2016-02-29 15:30:14  コンピュータ 歯車 家族

▲目次へ ⇒この記事のURL

日曜日、子供たちと久しぶりに理科ハウスへ。

昨年11月末に行って以来だな。


ここは相変わらず面白い。


この日は中学生の女の子グループや、科学好きのお母さんと娘さんが来てたり、女性比率が高かった。

女性でもやっぱり理科が好きな人ばかりで、視点が鋭い。


そして、その鋭さが男とは違う、ということが面白い。

細かなことがいちいち新鮮に感じられる。




プラネタリウムで、「1時間にどれだけ空が動くか」という話が出た。

答えは結構みんな知っていて、15度。


じゃぁ、1日後の同じ時間の空はどれだけ動いているか。

公転が360度を365日で行うので…1度にちょっと足りないくらい! という答え。


ここでは正確性を求めてないから、これでいい。



遊んでいて夕方変える間際、急に思い出して、タイガー計算機で 360/365 を計算してみる。


まず、タイガー計算機で割り算をする、というのが知らない人には難しい。

さらに、小数点以下まで計算を続けるのが難しい。


これを実演してみよう、という意図だった。


答えは 0.9862。まぁ、そんな感じだろう。


でも、あっているかどうか確かめようと、スマホを出して電卓アプリで計算。0.986301。

タイガー計算機は、1桁づつ求めて精度を上げていくので、最後の桁が多少違うけど、あっている。



…と、この話はどうでもいいんだ。

問題は、このとき出した電卓アプリを見て、周囲の小学生が「わっ! なにそれ! すげー」ってなったこと。


√程度なら普通の電卓にもついているけど、Sin Cos とか Log とか π とか書かれたボタンがあるのに驚いたようだ。

もちろん、理科ハウスなので、小学生でもこの程度の関数は知っている子ばかりが集まっている。



あぁ、これは関数電卓、と教えてあげる。

いろんな関数が使える、という説明と、これはスマホアプリだけど、本当の電卓もあるからお小遣いためて自分で買いな、とそそのかす。


スマホだったら、安いのは2万円出せば手に入る。

本物の電卓だと、3万円くらいするかなー、と。




このとき、「本物」として僕の頭にあったのは、最近の関数電卓はグラフとか描けるんだなー、と数年前に調べたときのやつだった。


でも、単に計算ができればいい奴なら、もっと安く売っていたね。千円で十分買えた。



というのも、帰り道に買い物に寄ったスーパーの文房具コーナーに売っていたから。キャノン製で税込み990円だった。


うちの長男、釘づけ。パッケージ裏の説明を読んで、複素数も計算できる! と驚いている。

じゃぁ、-1 を√してもエラーにならないのかな、とかいろいろ聞いてくるが、その機種を買ってみなければそれはわからない。


さっき「自分のお小遣いで買いな」と理科ハウスで言った言葉を覚えていて、お小遣いで買いたいという。

まぁ、おもちゃを買いたいというよりずっと有意義な買い物だろう。


小学五年生、自分で貯めたお小遣いで、関数電卓お買い上げ。




家に帰って、わくわくしながら説明書を読んでいる。

複素数を使うには、複素数モードにする必要があった。じゃぁ、-1 は、実数部が -1 、虚数部が 0 ということで…√。


エラーになった。複素数の√って、実数のルートと意味合いが変わってくるからね。

モード切替した時点で、√は使えなくなるようだった。


しかし、それは些細な事。


最近円周率を 20桁まで暗記していた長男、πボタン一発で10桁の円周率が出てくる、ということに喜ぶ。

Sin / Cos が、デグリーでもがラジアンでも計算できることに喜ぶ。

計算式通りに入れれば、優先順位も考慮して正しく計算してくれることに喜ぶ。


ともかく、長男にとってはとってもわくわくするおもちゃのようだ。



今朝は、「算数好きの友達に自慢する!」と言って、いつもより早く学校へ行った。




自分も小学生の時に初めて「自分の電卓」を手に入れてうれしかった覚えがあるので、電卓をおもちゃとする嬉しさはよくわかる。

僕の場合、父が仕事で使っていた古い電卓を譲り受けただけで、特別な機能はなかったけど。


#今は懐かしい FL 管のもので、内部計算が常に表示されている。

 掛け算程度なら瞬時に出るけど、√キーを押すと、激しく動く数字が見られて楽しかった。




▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

家族

関連ページ

シーモア・パパート 誕生日(1928)【日記 16/03/01】

別年同日の日記

12年 閏日


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -