コンピュータ28ページ目の日記です

目次

前のページ
2016-01-23 iOSでtextのコピー・ペーストができないバグの回避
2016-01-29 【追悼】マービン・ミンスキー
2016-01-29 AI囲碁
2016-02-03 ガストン・ジュリア 誕生日(1893)
2016-02-04 ケン・トンプソンの誕生日(1943)
2016-02-05 ノーラン・ブッシュネル 誕生日(1943)
2016-02-07 アン・ワング 誕生日(1920)
2016-02-11 世界で最初の{弓括弧}
2016-02-13 BCPLについて、訂正
2016-02-14 クリストファー・レイサム・ショールズの誕生日(1819)
2016-02-15 再訂正:BCPL と Smalltalk の関係
2016-02-15 ニクラウス・ヴィルト 誕生日(1934)
2016-02-17 トーマス・J・ワトソン 誕生日(1874)
2016-02-22 スティーブ・ブリストー 命日(2015)
2016-02-24 クロード・シャノン 命日(2001)
2016-02-26 BCPL の § 記号についての追加調査
2016-02-29 ハーマン・ホレリス 誕生日(1860)
2016-02-29 関数電卓
2016-03-01 シーモア・パパート 誕生日(1928)
2016-03-04 1985年のパソコン事情
次のページ
iOSでtextのコピー・ペーストができないバグの回避  2016-01-23 21:48:49  コンピュータ

▲目次へ ⇒この記事のURL

iOSのJavascriptのバッドノウハウ。


iOS8でバグが報告され、iOS9になっても修正されなかった…つまりは「もはや仕様」のバグへの対処方法。


以前からお手伝いしている仕事で、ユーザーさんから指摘があってバグっていることを知った。

iOS8 からのバグだったのに、1年以上もデバッグ担当が誰も気づいていなかったという問題。


input TAG の type="text" か、textarea によってテキスト入力を作った際、テキスト部分の長押しで、全選択やコピー・ペーストなどのメニューが開く。


この際に、Javascript などが動作していて特定の処理を行っている場合、メニューが消えてしまい、結果的にコピー・ペーストなどの操作ができなくなる、というのがバグの概要だ。




特定の 処理とは、「画面全体の再レンダリングが必要となる処理」である。


画面の一部領域だけ書き換えれば済む問題はバグを引き起こさないようだ。

ここで「全体の再レンダリング」とは、スクロールのような処理を含まない。


スクロールは、単純に画面をコピーしてずらすだけだから。


より具体的にいえば、DOM 要素の style を変えることで、表示位置やサイズなどを変える。

より厳密にいえば、サイズを「変える」必要すらなく、「サイズに関与するプロパティ」に書き込みを行うだけでいい。


style 要素が変わればよい、という意味では、css の transition 指定や animation 指定でも同じことになる。

とにかく、テキストメニューが開いているときに、再レンダリングが起きること。


top left width height などの指定はもちろん、border padding margin などの指定でも起きる。


opacity などでは大丈夫な一方、box-shadow ではバグが起きた。

どうも、opacity はあらかじめ存在する矩形領域の中だけの「一部書き換え」で済むが、box-shadow は矩形領域の外側だというのが影響するようだ。



これらの変更が、HTML 内のどこかで使われているだけでバグが生じる。

テキストの近くにあるとか、画面表示領域内かどうかなどは無関係だ。




どうすればよいか。


お仕事のプログラムでは、テキスト入力のある画面内で、javascript でアニメーションしている部分があった。


このアニメーションは、setInterval で動いていた。

そこで、一定時間ごとに動作する関数の冒頭で、text 入力中かどうかを確認し、入力中なら何もせずに return することにした。


お仕事では、テキスト入力はダイアログを出して行うことにしていたので、ダイアログに相当する div が「表示されている」ことを確認して return していた。


document.activeElement を使うと、現在フォーカスしている DOM 要素を取得できる。

document.activeElement.id とすれば、その DOM 要素の id を知ることもできる。


これを使って、text 入力にフォーカスされていたら何もしない、とする方法ならどんな場合でも使えそうだ。


#僕は試していないので、うまくいかなかったら申し訳ない。




Javascript ならこの程度の対処で済むのだけど、問題は CSS で animation 指定などをしている時だ。

CSS なので、Javascript と違って「状況によって何もしない」というプログラムを作ることはできない。


そのアニメが本当に必要か考えて、不要なら失くしてしまうのも手だ。

今回は、大したアニメではなかったので、失くしてしまうことで解決した。



次善の策は、text 入力に focus / blur イベントを仕掛けて置いて、animation する DOM の class を変えてやる方法だろう。

そして、この class が付いた場合のみ、animation するように css を作っておく。


jQuery があればこんな感じかな。


#こちらも試してない


▼javascript

$('input[type="text"]').bind("focus",function(){
  $(".anim").removeClass("move");
}).bind("blur",function(){
  $(".anim").addClass("move");
});

▼css

.anim.move {
  animation:~
}


上のコードは、input type="text" にフォーカスが当たったら、class="anim move" のタグから、move を取り去る。

そして、フォーカスが消えたら、class="anim" のタグに move を加える。


css では、class="anim move" のタグに対してアニメの指定をしている。

text にフォーカスした時は、 move が消えるのでアニメは止まる。



▲目次へ ⇒この記事のURL

別年同日の日記

12年 ゲームボーイの CPU

15年 アプリケーションサーバとしてのQNAP

15年 宮永好道 命日(1993)

18年 サターンポリゴンのゆがみ


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

【追悼】マービン・ミンスキー  2016-01-29 10:35:16  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

マービン・ミンスキーが、1月24日に亡くなったそうだ。


26日にはニュースになっていたようだけど、僕は27日になって妻から聞いて知った。

今週ちょっと忙しくて、ネットの情報をそれほど見ていなかったのだ。だから、追悼文もすぐ書けなかった。


もっとも、ミンスキーをそれほど強く記憶していたわけでもない。

妻に「ミンスキーって人が亡くなったらしいよ」と聞いても、すぐに誰だか分らなかった。


ミンスキー? と問い直して、AIの研究家だそうだよ、と言われた。

…で、思い出した。マービン・ミンスキーか。ミンスキートロン作った人だ!



と、すぐに思い出したのがこれくらい、というので、僕がたいしてミンスキーに詳しくないのがわかる。

そんな僕が追悼文を書いたところで、駄文にしかならない。



僕の知識の多くは、「ハッカーズ」という書籍からきている。

コンピューター黎明期の、わくわくするような冒険譚。僕にとってはジュブナイル小説のようなものだ。


まぁ、冒険譚といってもトムソーヤのようなことはしない。実際の山を駆け巡るわけではなく、彼らはコンピューターというフロンティアを切り拓いた。

「ハッカーズ」には、若さゆえのいたずらっ子がたくさん出てきて、誰も見たことのない地平を切り拓く。これがジュブナイルでなくしてなんであろう。


そして、ジュブナイルには「子供の成長を見届ける大人」が必要だ。

ハッカーズの第一部では、その一人がジョン・マッカーシー…ジョンおじさんだ。


マービン・ミンスキーは、ジョン・マッカーシーの同僚で、ともにAI研究の創始者のひとりだ。

ただ、ハッカーズにおいては、ミンスキーはマッカーシーよりも扱いが小さい。

というのも、当時のミンスキーは、マッカーシーの弟子で最大の理解者、というような位置づけだからだ。


#とはいえ、無視できない重要人物なので、それなりに出てくるのだが。



マッカーシーは「若者がコンピューターに熱中している」ことを知り、彼らのやりたいようにやらせただけだった。

ハッカーが少しでも速度の速い、少しでもステップ数の短いプログラムを作ろうと工夫していても、それはバイクで速度を出して喜んでいるようなもの…若さゆえの楽しさだろうけど、ほとんど意味はない、と考えていた。


ミンスキーは、若者の中に飛び込み、自らも一緒に熱中した。

小さなプログラムを作ることには大きな意味があるし、直接プログラムをしたものにしかわからない「体験」があると感じていた。


当然、ハッカーたちはミンスキーのAIの講義には必ず出席したらしい。

ミンスキーはハッカーとして尊敬を集めていたし、その偉大なノウハウの一端を学べるのだから。




ある日、ミンスキーは PDP-1 の画面上に渦巻き曲線を描こうとしていた。


直線を描くのは簡単だ。だけど、整数演算しか使えない PDP-1 では、曲線を描くのは難しかった。

だけど、「渦巻き」がかけるプログラムは、すでにハッカーの間で作られていた。


こんなプログラムだ。

当時はアセンブラだけど、わかりやすいようにC言語風に表記する。



while(1){
  Y' = Y;
  X' = X;
  Y = Y' - (X'>>4);
  X = X' + (Y'>>4);
  pset(X,Y);
}


つまり、一個前の座標から新しい座標を生成して、そこに点を打っているのだな。

ちなみに、PDP-1 の座標系は、ディスプレイ中央が (0,0) になっている。



ミンスキーは、これをちょっと間違えて、最後の Y' を Y としてしまったらしい。

直前の行で Y を書き換えているので、「1個前の座標」にならない。


実をいうと、それ以外の Y' X' は無意味だ。

「一個前」と明示するために最初に X Y を保存しているのだけど、そもそも書き換えの影響を受けるのは最後の Y' だけ。

そこを書き間違えた。


つまり、次のプログラムを実行したことになる。



while(1){
  Y = Y - (X>>4);
  X = X + (Y>>4);
  pset(X,Y);
}


これが、偶然からの大発見だった。

描かれる線は、渦巻きではなく正円になった。


正円が描けるということは、SIN / COS の三角関数を生成できる、ということ。

ミンスキーは偶然から、整数演算のみで三角関数を導き出すプログラムを作ってしまったのだった。



これはすごい発見だったのだけど、ミンスキーはこれで終わりにしなかった。

この、偶然見つけたアルゴリズムの「意味」を数学的に検証して、「3つの円」を表示するプログラムを編み出した。


当時、ハッカーの間で、ディスプレイに興味深い画像を表示する、短いプログラムを作るのが流行していた。

Hacks 、もしくは HAX (読み方はどちらも「ハックス」)と呼ばれる。


3つの円を表示する、といっても、単純に表示するのではない。

表示に関係するパラメーターを、コンソールの2進スイッチにより与え、あえて「円を崩して」表示できる。


これによって3つの円は非常に複雑な形状へと変化し、パラメーター次第でいろいろな図形が描き出される興味深いプログラムとなった。



3つの円を描きだすので、ミンスキーはこれを「Tri-pos」と名付けたのだけど、ハッカーたちは「ミンスキートロン」と呼んだ。


#リンク先のミンスキートロンはエミュレータで再現されたもの。

 上のメニューで何か選ぶと、2進スイッチが「お勧めの設定」になっていろいろな図形を描いてくれる。

 もちろん、自分でスイッチをいじって変化を楽しんでもいい。




ジャック・デニスの話を以前に書いたことがある。


デニスも、マッカーシー、ミンスキーと共に、MITのハッカーを導いた人だ。

ただ、マッカーシーとミンスキーは当時すでに偉い人だったけど、デニスは当時は新米だった。



だから、マッカーシーとミンスキーは「師匠」であり、デニスは「兄貴」だった。


それはともかく、3人ともMITのハッカーたちと共に過ごし、コンピューターに対する先進的な考え方を持っていた。


当時のコンピューターは、バッチ処理が普通。

パンチカードの束をセットして、後は結果が出るのを待つだけ、という使い方だ。


でも、3人とも、コンピューターはいつも人間が使える状態にあって、対話的に使えたほうが良いと考えた。


当時のコンピューターは非常に高価なので、1人1台、なんてことはできない。

コンピューター1台で、同時に複数のプログラムを走らせる方法…今なら当たり前の、マルチタスクの研究を始めた。



最初は、PDP-1 を使った小さなシステムだった。


これが成功し、成果を ARPA に報告すると、さらに研究を行うために ARPA が資金提供してくれることになった。

その額、300万ドル。


#どうも、文献によって金額が違うのだけど、後からの追加などもあったためだと思う。



ARPA は、この資金を「コンピューターをマルチタスクで使うための研究」に拠出した。

でも、マッカーシーやミンスキーは、この資金を元に「プロジェクトMAC」を立ち上げた。


このプロジェクトは、コンピューター科学の研究プロジェクトとされた。

「マルチタスク」もその一つではあるのだけど、他にもいろいろな研究をする。



それまで、マッカーシーらは年間 10万ドルの予算しか与えられていなかった。

ところが、いきなり 300万ドルが使えるようになったのだ。


そして、ミンスキーはこの「マルチタスク研究のための資金」の 1/3 、100万ドルを使い込んだ!

マルチタスクで各個人がコンピューターと「対話」できるようになれば、対話するためにコンピューターが人間を理解する必要がある。


じゃぁ、人工知能はマルチタスクでできることの研究として重要だ。

マルチタスク研究の一環なのだから、お金を使って何が悪い!



使い込んだといっても、別に私腹を肥やしたわけじゃない。

優秀な学生ハッカーたちを雇い入れて、プログラムを作らせたのだ。


ハッカーたちは、ほっといてもプログラムを作る。それが楽しいからだ。

例えば、世界最初のテレビゲームの一つとされる、Space war! を生み出した。


でも、ゲームをしたかったんじゃない。それを作ること自体が楽しかったのだ。


だから、プログラムの目的はなんでもいい。

ミンスキーが、バイト代を出すから人工知能の研究を手伝ってくれ、というのであれば、喜んで参加した。



ARPA は怒らなかったのか?

大丈夫、デニス(というより、その師であるコルバト)がちゃんとマルチタスクの研究をやっていたから。


デニスは後に Multics のプロジェクトに参加するのだけど、最初はそんな大掛かりではない。

IBM に協力してもらって…IBM は乗り気ではなかったようなのだけど、IBM 7094 というコンピューターを改造して、マルチタスク機能をつけてしまった。


ミンスキーが 1/3 を使った、という分け方の「根拠」は僕は知らないのだけど、マッカーシーとミンスキー、コルバトで3等分したのではないかと思っている。




この後、プロジェクトMACは、MITのハッカーが集う場所になっていく。

研究内容は多岐にわたった。当時としては最先端の実験、というものが多かった。



今回、訃報に触れたときに、ミンスキーが「LOGO や Lisp の開発にも携わった」という評伝があった。

恥ずかしながら、僕はそれを知らなかった。


パパートが書いた「マインドストーム」という本があって持っているのだけど、ずっと前に読んだ切り、内容はほとんど覚えてない。

もう一度読み返してみた。



プロジェクトMACには、後にシーモア・パパートがやってきて、「コンピューターを使った教育」の実験を始める。

パパートは、本の中でこの頃を振り返って、二人の「強い影響を受けた人物」を挙げている。


1人がミンスキーだ。最も重要な人物、としてあげられている。


パパートは教育心理の専門家で、子供の心に詳しかった。

ミンスキーは人工知能の専門家で、人工知能がどのように学習するかに詳しかった。


この二人が、実際に子供の教育現場に立ち会いながら、子供がどのように学習していくかを、時に心理学の見地から、時に「学習機械」としての見地から、意見を出し合って理論として固めていったのだ。


これはパパートにとって最も重要な経験だった、と回顧させているのだけど、LOGO の開発自体に手を貸したわけではないようだ。

もっとも、LOGO は子供の教育に使える言語として考えられたわけで、「意見交換」を LOGO の開発だとみなすのであれば、そう言えなくもないけど。



ミンスキーは、計算理論が、単に「数学の計算方法」ということではなくて、その人の世界観を形作るための重要な存在である、とパパートに示したそうだ。

これが、何よりもパパートの考え方を変えたとのこと。


ちなみに、もう一人の「影響を受けた人物」はアラン・ケイ

ケイはパパートの元で学んだ弟子のような位置づけなのだけど、「子供のことを考える」という点で、誰よりも強い情熱を注いでいたそうだ。


Lisp も LOGO と同じような感じで、Lisp 自体はマッカーシーが考えたものだ。

でも、マッカーシーとミンスキーは常に近い位置にいたので、いろいろと意見交換はしているみたい。

どこまでが「開発に携わった」といってよいのかわからない。


ただ、一つ言えることは、ミンスキーは恐ろしく頭が良くて、意見を求められれば畑ちがいの分野であっても、喜んで飛び込んで実のある意見を出せた、ということ。

関係した誰もが、ミンスキーはとても頭が良かった、と振り返っている。


そして、何よりも面白がりで、いたずら好きだったらしい。

ハッカーと仲良くなれたのも、そういう子供っぽいところがあったからなのだろう。




ミンスキーは、パパート共に「ニューラルネットワーク」の研究もしている。


たくさんの電線に可変抵抗(ボリューム)をつないだ、配線のお化けだ。

でも、これは人間の脳のニューロン構造を模倣している。


脳は、ニューロン間の接続の「強さ」を可変させることで物事を学習する。

同じように、電線間の接続の「強さ」を、可変抵抗で調整していけば学習する機械になる。


ただ、ニューラルネットワークは、恐ろしく可変抵抗が多い。

何をどう回せばよい学習になるのかわからない。学習することはわかっていたのだけど、扱うのは職人芸だった。


1958年に手法が示され、60年代に流行したのだけど、ブームの初めの頃は、「人間の脳を模倣しているのだから、すごいに違いない」という期待論が上回った。

でも、先に書いたように、学習方法すら確立していなかったのだ。


これに対し、1970年代に、ミンスキーとパパートがニューラルネットワークの数学的な解析を行う。

これで、能力の限界がわかった。

「上手なプログラムを作れば分類できる」ものを分類できる、というのが能力の限界だった。


実は、これはすごいことだ。

上手なプログラムを作れば…というけど、それは職人芸だ。

でも、ニューラルネットワークは、学習することができる。プログラムする必要はない。


ただ、この時点では学習手法が確立しておらず、学習も職人芸だった。

ブームは急速にしぼんでしまった。



1986年に、ニューラルネットワークが再注目される。

結果を見て、「誤差」をフィードバックすることで学習する、という手法が確立するのだ。


これでニューラルネットワークの「第2次ブーム」が起きる。



僕はこの頃大学生だったのだけど、研究室の先輩が興味を持って、「脳を模倣するらしい」とプログラムを自作していた。

そしたら、研究室の教授が、何やら英語の論文を持ってきてくれた。


しばらくして、ゼミで先輩が論文の内容を発表した。

フィードバック学習の手法と、その限界についての論文だった。


フィードバック学習方法では、ニューラルネットワークをあまり複雑にできない。

これは、「脳を模倣する」と言いながら、脳ほど複雑にはできないことを意味する。


ミンスキーの結論も一緒に書かれていた。

上手なプログラムで分類できる程度のものしか分類できない。

…ただし、これは「十分に複雑なニューラルネットワークがあれば」というのが前提だ。


この二つを組み合わせると、出てくる結論は一つ。

ニューラルネットワークでは、下手なプログラム程度の結果しか出せない。


先輩は急に興味を失って、作るのをやめてしまった。



#念のために書いておくと、この後もニューラルネットワークは研究され、現在「第三次ブーム」と言われている。

 ディープラーニングと呼ばれる手法で、上手なプログラムと同程度以上の成果を、上手なプログラムを組むよりも低いコストで実現できるようになった。

 ただし、ここでいう「低コスト」はプログラム時間に関することだけ。

 学習のための膨大な「教材」と、膨大な学習時間が別に必要。


#関係ないけど、2000年ごろに「サポートベクタマシン」という自動学習手法が流行した。

 これも、最初は理論が未完成で期待されていたのだけど、理論が完成すると「上手に組まれたプログラム並みの能力しか出ない」ことがわかり、ブームが過ぎた。

 もちろん、適材適所で、普通のコンピューターが良いところ、ニューラルネットワークが良いところ、サポートベクターマシンが良いところは違うのだけど。




ミンスキー、調べれば調べるほど、逸話が次々と出てくる。


とても書ききれないので、手持ちの「ハッカーズ」と「マインドストーム」から、面白いところだけ抜粋して、ついでに自分の大学時代の、ミンスキーに関係しそうな思い出話を書いた。


今後も機会があったら、少しづつ業績を紹介していきたいと思う。




▲目次へ ⇒この記事のURL

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

今日は何の日

関連ページ

サシっす!!【日記 18/04/14】

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

ケン・トンプソンの誕生日(1943)【日記 16/02/04】

シーモア・パパート 誕生日(1928)【日記 16/03/01】

「人工知能」の生まれた日(1955)【日記 16/08/31】

別年同日の日記

05年 外構チラシ

09年 ジョウビタキ

10年 加湿器

15年 「デフォルト」という言葉の意味

15年 プログラム言語における「デフォルト動作」

18年 テクニカルサポート


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

AI囲碁  2016-01-29 14:42:31  コンピュータ 歯車

▲目次へ ⇒この記事のURL

Google が作った囲碁プログラム (AlphaGO) が、ヨーロッパチャンピオンと対戦して勝利したそうだ。


昨年秋に対戦したらしいのだけど、ニュースになったのは昨日。

囲碁はチェスや将棋に比べてずっと難しいので、このニュースにはちょっと驚いた。


でも、なんで囲碁が難しいのか、という話に触れている記事を見かけない。

(僕が探せていないだけかもしれないけど)


ちょっと解説してみよう。




まず、僕は囲碁についてそれほど知識を持っていない。

ルール詳細すら知らず、「陣形を作るゲーム」であることは知っている、という程度。


以前に将棋について少し書いたのだけど、将棋も囲碁も、シミュレーションゲームだ。

将棋は、局所戦…小さな戦いを表現している。駒が人で、人と人が殺しあう。


#日本の将棋は、殺さずに捕虜にして、仲間にすることができる。


それに対して、囲碁は国家レベルの戦略をシミュレートしている。

局所的な戦いは関係ない。そもそも、国家レベルの戦いでは、実際の戦闘がおこらない「にらみ合い」が多い。


お互いににらみ合い、前線を形成しつつ、相手の補給路を断つ。

補給路を断たれた相手は降伏するなり野垂れ死ぬなどして、いずれその領地は自分のものとなる。


こうして、前線で相手を囲い込みながら領土を広げるゲームが「囲碁」だ。




ここで、ゲーム性が大きく違うことに気づいただろうか。

将棋もチェスも、駒を動かして、相手を取る。


つまりは、「点」から「点」への動きだ。

ある地点の駒を別の地点に動かせば、相手の駒をとれる。

もしくは、自分の駒を動かさないと、相手にとられる。


盤面がいくら広くても、駒の数は有限だ。

その駒すべてについて、動かせる手を全部試すことは、実はそれほど難しいことではない。


…チェスならね。

いや、本当はチェスだって全部なんて試せないのだけど、それは後で書く方法でカバーできる。


ともかく、チェスの動きはそれほど多くはない。

特に、終盤に向かって駒が減っていくので、先読みが簡単になっていく。


チェスを指す機械が作れるだろう、という考えは、コンピューター以前からあったくらいだ。



将棋は、取った駒をいつでも盤上に投入できる。

これにより、盤上の駒が少なくなる終盤は、駒を「動かす」のではなく、どこでも好きな位置における、という可能性が高まる。

これによって、終盤に向かって複雑さがどんどん増していく。先読みが難しくなっていく。


チェスより将棋のほうが難しい、というのはこのためだ。




囲碁は、石を「好きなところに置く」ことの連続で、動かさない。

また、相手の上に乗る、というようなこともない。


相手の動きを阻止するために「すぐ横に置く」ことは多いのだけど、これも絶対ではない。

状況によっては、全く異なるところに置くことがある。


つまり、自分も相手も、石を置く場所の手がかりがない。

手がかりがないからどこに置いていいのかわからないし、相手がどこに置くのか読みづらい。


これが、囲碁の難しさの一因になっている。



google もルールから説明するのは面倒だからか、単純に「盤面の広さ」から、取り得る局面の数を示して「囲碁は非常に大きい」と言っている。


チェスは 8x8で、将棋は 9x9 、囲碁は 19x19 だから、囲碁は圧倒的に「取り得る局面」は多い。


でも、局面の多さが難しさを示すのだとしたら、同じく碁盤で行う五目並べも、囲碁と同程度に難しいということになってしまう。

盤面の大きさが難しさにつながる部分は確かにあるのだけど、それほど重要ではない。




本当に囲碁が難しいのはここからだ。


先に書いたように、将棋は「点から点」の動きだった。

でも、囲碁は「線で囲む」ゲームだ。より正確に言うと、線を「形作っていく」ゲームだ。


人間なら、星と星をつないで星座を作ることができる。

「点」をつないで線を「形作り」、そこに絵や物語を見出すのだ。


でも、コンピューターはそんなことできない。点はいつまでたっても点であり、線になることはない。

点を伸ばしてやがて前線を作り、相手を囲い込む…というゲームは、コンピューターにはどこに手を打つべきかもわからない。


もちろん、石と石の間が1マス開いていたら、そこに石を置いたらつながるな、程度の判断ならできる。

でも、5マスも離れていたら、そこを埋められるかもしれない、なんて思わない。


同じような局面が多数あった時に、どちらのほうがつながりそうだ、とか判断できない。




「判断できない」というのは、非常に致命的な問題をもたらす。


話は戻るだけど、チェスや将棋は、駒が有限だから動かすことは簡単、と書いた。


でも、もっと重要なのは、「意味が分かりやすい」ことだ。

駒が相手の駒に乗れば、取ることができる。乗られれば取られる。


できれば取られないのが一番いい。でも、歩を犠牲にすることで王を守れるのであれば、王を優先して守ったほうがいい。


こうした「手の評価」が簡単にできる。


手の評価ができるからこそ、駒の動きをいくつも試してみて、「一番いい手」を選び出すことができる。


将棋の場合、数手先まで読んだりする。

でも、「1手」でも、動かせる駒は非常に多い。そのまま2手、3手と先読みすると、そのたびに駒の数だけ動かせる可能性が増えて、調べきれなくなる。


この場合も、「手の評価」を使うことで、大幅に可能性を減らすことができる。

王手がかかっているのに、無視して別の駒を動かす必要はない。自分の王がとられるのは最悪の結果なのだから、とにかくそれを防ぐ手を考える。

それ以外の手を採用する必要はないので、先読みすべき手を大幅に減らすことができる。


王手は極端な例なのだけど、自分がわざわざ悪い手を打つ必要はないのだ。

同様に、相手も悪い手を打つ必要はない。これで、先読みの「可能性」を大きく減らすことができる。


最終的に一番いい手を選ぶにも、先読みをするのにも、とにかく「手の評価」が大切なのだ。



ところが囲碁は、基本である「どうやれば線がつながるか」がわからない。

繋がりそうな箇所がいくつかあったとして、どれを優先すべきかわからない。


つまり、もしコンピューターが超高速で、すべての手を総当たりで試せたとしても、その結果から「一番いい手」を選び出せない。


ここが囲碁の難しさの本質だ。

何がいい手なのか。


これ、実はコンピューターだけでなく、人間にもわからない。

もちろん慣れた人にはわかるのだけど、初心者にはとっかかりがなさ過ぎて入門しづらい。


囲碁人口が少ない理由の一つだ。

同時に、わかっている人にとっては、単純ではない、非常に奥深いゲームとなる。



余談なのだけど、米国のゲーム会社…ビデオゲーム業界を生み出した「ATARI」社の社名は、囲碁の用語「あたり」からきている。


子会社に SENTE 、TENGEN という会社もあった。これも囲碁用語の「先手」「天元」からきている。


ATARI 社の創始者が、囲碁を「世界で一番面白いゲーム」だと考えていたことに由来する。




唐突だけど、大学の時のコンピューターサークルの先輩が、卒業研究に「コンピューター囲碁」を考えていた。


90年代の頭かな。

今調べたら、このときには後で書く GNU GO がもうできていたようなのだけど、今と違ってネットは普通ではなかったので知らなかった。


で、コンピューターにルールを教えることすらできない。

「コンピューターに囲碁を教えるのは何が難しいか」という、失敗談をまとめるのが精いっぱいだった。


学生が1年間で研究するには、ちょっと荷が重かったテーマなのだ。



で、GNU GO なのだけど、これ以前にも囲碁ソフトがなかったわけではない。

でも、GNU GO は、GNU だからソースを公開していた。他の人が研究して、さらに強いものを作る土台となった。



GNU GO は、少なくとも「全く無意味ではない」手を打てる程度には囲碁のルールを学べていた。


手を考えるときは、碁盤を配列として用意し、数値を入れられるようにしておく。


石が置いてある「周囲」のマスに、+1 する。すべての石について行う。

これが第1段階。


すでに数値が入っているところを、すべて +1 する。

そして、数値が入っているマスを石と同じように見なして、また「周囲」を +1 する。

これが第2段階。


以降、同じ操作を繰り返し、数値を大きくしていく。

石の周りに「濃度」を持つ勢力範囲が染み出していく…そんな雰囲気を感じ取ってもらうといい。


何段階行うかは任意。というか、その時によって最適な回数は異なるので、状況を見ながら調整。


5段階までやったとしたら、最後にすべてのマスの数値から、5を引く。

マイナスになるところは 0 だと考えて無視。


石の周囲に増やした数字は、0 に戻るはず。

でも、「周囲を +1」した時に重なっていた部分は、重複してカウントされているので 0 に戻らない。

ここはつまり、周囲の石の間を埋めて、前線を作るのに役立ちそうな場所、ということになる。



これで、少なくとも「石を打つとよさそうな場所」がわかる。

複数ある場合にどう評価するか、状況によって全く新しいところに打たないといけないときにどうするか、などは別問題。


ともかく、GNU GO がこの手法を広めて、しばらくはこれ以外の良い方法がなかったらしい。




90年代の中ごろ、画期的なアルゴリズムが考案される。


どこに打てばいいのかわからないなら、乱数で打てばいいじゃん、という割り切り。


もちろん、本当に乱数だけで勝負していたら、とんでもなく弱い。

ここに「学習機械」を組み合わせる。


ランダムに打った手のデータを覚えておいて、とにかく、むちゃくちゃなうち筋でもいいのでゲームを終了させる。

(ランダム同士で打ち合えばいい)

ゲームが終われば勝敗がわかる。きっと、負けたほうの「ランダム」は弱い手だ。データは覚えているから、同じような局面になった時には避けよう。


逆に、勝ったほうの手は、同じような局面ではまだ使おう。


これをひたすら繰り返すと、強そうな手と弱そうな手がわかってくる。


あるとき勝った手が、同じ局面で別の時に打ったら負けたとする。

この手は強いと思っていたけどそうじゃなかった、ということだ。


逆に、何回も打ってすべて勝った手があったら、これは本当に重要な手なのだ。

今後も同じ局面では打つのがいい。



ここにあるのは、ひたすら過去のデータを積み上げるだけで、打った手の評価は「しない」という方針だ。

囲碁の手の評価は、先に書いたように難しい。だったら、評価しないでもいい。

でも、最後に勝ったかどうかだけは覚えておいて、途中の手すべてに「勝ち負け」のフラグを積み重ねていく。


…これ、マッチ箱エンジンだよね。

ただのマッチ箱でも、マルバツゲームの思考ルーチン程度は作れてしまう、というアルゴリズムの実験。



もちろん最初は弱かった。

でも、2006 年に、この手法をさらに応用して学習部分を強くしたプログラムが作られる。


ひたすら戦って「勝った」「負けた」を記録するだけではなくて、勝った打ち筋なら、途中から手を変えたらどうなるか、などを試すようにしたのだ。

これによって、勝てそうな局面で、さらに強い手を探すことができるようになった。


このプログラムは、コンピューター囲碁大会で優勝した。

以降、この手法が主流になっていく。




実は、こういう「ランダムを使ってひたすら学習する」のは、囲碁の世界に限った話ではない。


最初のほうに書いたけど、チェスや将棋では、一手ごとに「その手が良いか悪いか」を評価している。

この評価部分は、昔は人間が作っていた。そして、評価方法の善し悪しが強さに直結した。


評価方法の善し悪しというのは、つまりパラメーター調整のことだ。

昔は職人芸でプログラマがやっていたのだけど、最近の流行は「ランダムに設定したパラメーターでひたすら戦わせ、勝ったものだけを残す」というような手法だ。


これにより、コンピューターが自分で最適なパラメーターを学習するようになった。

評価方法の調整は職人芸の時代から、コンピューターオートメーションの時代に入ったのだ。



そして、囲碁でもそれが適用された、に過ぎない。

元々評価手法自体が作りづらかったので、思い切って評価をしないことにした。

評価は、試合結果によってのみ決まる。


そして、ひたすら試合を繰り返して、結果から学習する。

機械が勝手に学習したものなので、機械が「良い手」だと思っているものが、なんでいい手なのかは誰にも説明がつかない。


でも、実際強くなったのだからいい手なのだろう。

今回プロに勝ったという Google の囲碁プログラムも、こうして作られたものだ。


何で勝ったのか、どういう仕組みで考えているのかは誰にもわからない。

わかるのは、強くなったという事実だけだ。




今回の Google のプログラムでは、学習部分にニューラルネットワークを使っているそうだ。


ニューラルネットワークは、十分な学習を積んだ場合に、まだ見ぬ問題であっても「正解に近いと思われる回答」を得られる特徴がある。



以降は、詳細が明かされていないので想像に過ぎない話。


単純に「過去に打った手」を参照するのではなく、盤上の局所的な形勢などを見て、それらしい正解を出せるように学習させてあるのではないだろうか。


囲碁は「線を形作る」と最初のほうに書いたのだけど、これはパターン認識の世界だ。

そして、パターン認識ではニューラルネットワークは非常に役立つことがわかっている。


近年流行のパターン認識では、局所的なパターンの特徴を、「局所」のサイズを様々に変えながら抽出し、それらをパラメータとして組み合わせたうえでニューラルネットワークの入力とする。


この方法だと、局所的な特徴も捉えられているし、ニューラルネットによって全体のバランスも考慮される。

囲碁の広い盤面を全部「記憶」するのではなく、局所的なパターンを元に判断を下すこともできるだろう。



そして、実はこのパターン認識方法は、人間の「目」の働きを模倣したものだ。

目は局所パターンを識別し、局所的な形状を「特徴」として不可逆圧縮し、その組み合わせとしてデータを脳に送っている。


この「特徴抽出」によって、人間は線を線と感じたり、丸いものを丸いと感じたりすることがわかっている。

点に過ぎない星を見て、それがつながった「星座」を思い浮かべるのもこれに近い働きだ。


なので、「前線を作る」ゲームである囲碁が、パターン認識の世界に踏みこんだというのも、ある意味当然なのかもしれない。




話はここまでの部分で終わっていて、以降は余談。


途中で書いた「マッチ箱エンジン」だけど、マッチ箱エンジンで囲碁の19路盤を学習させたらどうなるか…という解説記事があった。


英語だけど、図表が多数入っているのでわかりやすく、面白い。


ざっと解説すると、多数のマッチ箱に9色のビーズを入れておくと、マルバツゲームの相手をすることができる。

箱は、現在の「盤面」の状況を示している。対応する箱から、ビーズを1個取り出すと、その色が「どこに打つか」を示している。


最初は、すべての色のビーズを入れてある。

当然、打てない場所の色も出てしまう。マッチ箱は、最初はマルバツのルールも知らないのだ。


それは捨ててやり直す。つまり、人間がルールを教える。

正しい手を打った場合も、マッチ箱はランダムに打つことになるので、おそらく負けるだろう。


マッチ箱が負けたら、最後の手順で打ったビーズは捨てる。その手を打ってはいけなかったのだ。

もしもマッチ箱が勝ったら、途中で使ったビーズをすべて1個増やしてやる。勝ったご褒美だ。次からはこの手を打ちやすくなる。


マッチ箱はだんだんと良い手を打つようになってくるし、究極的には絶対負けない、最強プレイヤーとなる。



…というのがマッチ箱エンジンなのだけど、解説記事は途中までこの解説をしつつ、最後に19路盤への応用の話になる。


打てる可能性が非常に多いので、マッチ箱が大量に必要になる。


最後の画像は、必要なマッチ箱を置くための面積を、わかりやすいものと比較した図だ。

なるほど、ゲームの規模がわかりやすい。



というか、先に書いた通り Google の囲碁プログラムは基本的にマッチ箱エンジンだ。

(多少工夫して、知らない手でも打てるようにはなっているけど)

マッチ箱じゃなくてコンピューターを使っているけど、この図にあるようなものを実現してしまったということですよ!




最近の囲碁のアルゴリズム詳細について、詳しい資料がありました

今回、いくらかはこの資料を参考に書かせていただいています。




2016.3.20追記

3月中旬、AlphaGO は世界最高峰の棋士である韓国人、イ・セドル九段と対局し、4対1で勝ちました。

と同時に、上記記事を書いたときにはあまり報じられていなかった詳細が報じられました。


やはり、推察したとおり盤面を画像として認識しているそうです。

チェスや将棋では駒の位置関係など、データを中心に扱いますが、画像として「なんとなく」状況把握している。


今までの AI などにはなかった新しい手法です。


と同時に、駒の位置関係だけが重要で、駒の価値や動きに意味がないからこそできる手法だとも思います。


AlphaGO を開発したディープマインド社は、汎用性のある AI を目指して研究しているそうです。


実際、AlphaGO と同じ仕組みをインベーダーゲームやブロック崩しなどの単純なゲームに応用し、スーパープレイヤーを作り出すことに成功しています。


とはいえ、パックマンのルールは複雑すぎて理解できません。


ニューラルネットワークは、なんにでも応用できる汎用性がある一方で、単純な問題にしか対応できません。


囲碁もまた、十分に奥深いゲームではあるが、ルール自体は非常に単純。

だからニューラルネットワークが活きてきます。


DeepMind 社の創始者の詳細記事が、昨年末発売の Wired に掲載されていたようです。


AlphaGO がイ・セドル九段との対局初日に、WEB ページでも公開されたようです。

今日知って読んだところ、非常に面白かったのでこの追記を行った次第です。



▲目次へ ⇒この記事のURL

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

歯車

関連ページ

サシっす!!【日記 18/04/14】

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

ケン・トンプソンの誕生日(1943)【日記 16/02/04】

シーモア・パパート 誕生日(1928)【日記 16/03/01】

「人工知能」の生まれた日(1955)【日記 16/08/31】

別年同日の日記

05年 外構チラシ

09年 ジョウビタキ

10年 加湿器

15年 「デフォルト」という言葉の意味

15年 プログラム言語における「デフォルト動作」

18年 テクニカルサポート


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

ガストン・ジュリア 誕生日(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】

デヴィッド・カトラー誕生日(1942)【日記 19/03/13】

世界で最初の{弓括弧}【日記 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年 青いバケツと赤いバケツ


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

アン・ワング 誕生日(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)


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

スティーブ・ブリストー 命日(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年 雪・科学館・おゆうぎ会

19年 完全停止


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

クロード・シャノン 命日(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年 閏日


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

シーモア・パパート 誕生日(1928)  2016-03-01 11:49:49  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、シーモア・パパートの誕生日(1928)。


LOGO 言語を作り出した人です。


誕生日を間違えていました! 本当は、前日の2月29日だったそうです。


日本語で書かれた情報の多くには、3月1日と書かれているのですが、英語の情報はみんな 2月29日と…

大変申し訳ありませんが、記事の日付を変えると URL が変わってしまうため、このまま残します。


ちなみに、2月29日はハーマン・ホレリス(パンチカード集計機の発明者)の誕生日でもあります。


パパートは数学者であり、児童発達心理学者でした。

そして、数学者として、マービン・ミンスキーと一緒に論文を作成したことがありました。


マービン・ミンスキーは以前も書きましたが、MIT が進めていたコンピューターに関するごった煮プロジェクト、「Project MAC」の中心人物の一人です。


Project MAC には MIT 以外にも多数の参加企業がありました。

Bolt Beranek and Newman (以下 BBN)もその1社です。


BBN は MIT の教授が創始した会社で、音響設計のコンサルタントを業務内容としていました。

音響設計というのは、非常に高度な計算力が必要となります。そのため BBN では初期のころからコンピューターに積極的にかかわっています。


そして、その高い技術力から、ARPA (米国防高等研究計画局)からも信頼される軍事企業でもあります。

インターネットの初期プロトコルの設計にも多数関わっていますし、最初のウィルスも、 BBN の「遠隔地のコンピューターにプログラムを届ける」実験として作られています。




さて、Project MAC の一環として、コンピューターを子供に教えるためのプロジェクトがありました。


当初は既存の言語を使って教えていたようなのですが、どうも子供に教えるには概念が難しすぎる。

子供が楽しく学べる言語はないものだろうか?


Project MAC の一環として、新しい言語が構想されます。


ミンスキーの紹介で、児童心理発達学者でもあるパパートが、子供にとって学びやすい言語を設計します。

そして、その実装は BBN に任されました。



MAC の主要人物の一人、ジョン・マッカーシーは、LISP という言語を設計していました。

設計時は、FORTRAN しか言語がなかった時代ですが、FORTRAN とは全く違う概念で作られていました。



FORTRAN は「手続き型言語」と呼ばれます。今でも、大多数の言語が手続き型です。

しかし、LISP は「関数型言語」と呼ばれます。プログラムとは何か、という概念から違うものになっています。



ただ、LISP は非常にシンプルで強力な言語なのですが、シンプルすぎて、何をするのにも1から面倒をみる必要がありました。

ある程度最初からいろんなことができる状態に整えてやって、子供でもすぐ始められる LISP を作ればよいのではないか。


これが最初の LOGO のアイディアでした。



この段階ですでに LOGO という名前がついています。文字デザインの「ロゴ」の意味。

名前の由来は、大雑把な見た目が重要であり、細かな部分は些細な問題に過ぎない、と示したかったため、だそうです。


コンピューターは計算機です。

そして、子供に「計算」と言えば、学校の算数のテストを思い起こさせてしまいます。


算数のテストでは、正確でないと点数をもらえません。

でも、ここではプログラムを動かす楽しさを知ってほしい。正確さは二の次でいいから、大雑把に動かして楽しんでほしい。


そう考えられていたのです。




ここで、パパートの最大の功績は、「プログラムを教える」という概念を捨て去ってしまったことです。


LOGO はもともと、コンピュータープログラムを子供に教えるために構想されたものです。

目的はプログラムの教育。計算機を使いますが、「計算」をさせたいのではありません。


パパートはこれをさらに推し進め、プログラムを教えるのではなく、「コンピューターを友達ととらえ、一緒に楽しむ」ようにしたのです。



子供の脳は非常に柔軟です。

公園で遊んでいて、知らない子がやってきたとしても、すぐに打ち解けて一緒に遊び始めたりします。


来たのが自分よりずっと小さな子で、同じ遊びができないとしたら?

その時は遊びの内容を変えるでしょう。柔軟にルールを変化させ、小さな子も遊びの輪に加われるようにします。


その子が自分とは違う言葉をしゃべっていたら?

それでも、子供たちは身振り手振りで意思を伝え、一緒に遊ぼうとするでしょう。

その子の使う言葉を、少しづつ学ぼうとするかもしれません。



では、相手がロボットだったら?

ロボットと遊ぶのが楽しければ、子供はロボットの言語を学びます!


誰かがプログラムを教えようとはしなくても、子供が自分からそうするのです。




パパートは MIT に移籍し、本格的に LOGO のプロジェクトに参加します。


この際、まずは LOGO で制御できるロボットを実際に作ってもらい、ロボットが簡単な絵を描けるようにしました。

子供たちは、ロボットに絵の描き方を教えることができます。


「コンピューター」という捉えどころのないものではなく、「ロボット」という具体的な相手を設定したことが大切でした。


絵が思ったように描けないとき、子供たちはロボットの気持ちになって、自分の体を動かしながら考えます。

そして、わずかに動く角度が間違えていたことや、図形の組み合わせの順番を勘違いしていたことに気づくのです。



「対象物をよく観察する」ことの必要性に、子供が自分自身で気づいていく、という過程が重要です。

大人が「教えてあげよう」と口を出さないことが大切。


自分なら紙の上にすらすらと描けるものを、何も知らない「他の人」に伝えるにはどうすればよいか?


うまくいけば、綺麗な絵が描けるはずです。

うまくいかなくても、何かがおかしい絵が描かれるので、改良のヒントは与えられる。


結果をもとにフィードバックしながら自分で解決していく。

パパートは、この過程こそが一番大切だと考えていました。




知識を「知っている」ことと「理解している」ことは大きく違います。

大人でも、勘違いしている人は非常に多いです。


専門家がせっかく解説してくれているのに、「あぁ、知ってる」で済ませてしまう大人のなんと多いことか!

「知ってる」いう言葉で自分の知識の多さを自慢するつもりなら、全く無意味なことです。



知っている、というのであれば、それを誰かに伝えるつもりで文章にまとめてみるとよいでしょう。

細かな部分が矛盾していたり、説明に詰まったりするところがあれば、「理解していない」のです。


そして、ちゃんと伝えようと細部を調査する。観察する。それを通じて理解が進む。

これが、学問の基本姿勢です。学問に限らず、社会で生活するうえで常に必要となる技術です。



LOGO では、自分なら簡単に描ける図形を、ロボットに描かせようと試みることになります。

そのためには、手順を文章…つまり、プログラムとしてまとめる必要があります。


描いてみたら間違っていた。じゃぁ、どこかが違う。細部を調査し、観察し、誤りを見つけ出す必要があります。


子供は、いつもと違う方法で「お絵かき」することが楽しくてやっているだけです。

しかし、やっていることは学問上の「研究」や、社会での仕事の進め方と何も変わりません。



結果として学ぶのは、LOGO のプログラムの仕方、ではありません。

何かを研究し、その内容を人に伝えるためにまとめ上げる力…つまりは「人間社会で生きる力」を学ぶのです。




パパートが LOGO 研究をしたのは 1960年代から。

当時はテレタイプの時代でしたが、後に「ビデオ端末」が作られ、画面にグラフィック表示ができるようになると、ロボットを使わずに画面上に図形を描けるようになりました。


そして、特別なロボットが不要となったことで、LOGO 言語は普及を始めます。

1980年に「マインドストーム」というパパートの著書で、コンピューターを使った学習方法として紹介されたのも大きな要因でした。


ロボットは「タートル」と呼ばれていたため、今でも LOGO の方法で図形を描く方法を、「タートルグラフィック」と呼びます。

実際のロボットではありませんが、「画面上のキャラクターに動きを教える」形で図形を描くため、子供でも学習しやすい図形の描画方法です。



今では、「タートルグラフィック」は様々な初心者向け言語に取り入れられています。

LOGO にヒントを得て作られた Smalltalk や、Smalltalk で作成された Scratch は、LOGO の「正当な後継者」と言えるでしょう。


Microsoft も、初心者向け教材として Small Basic を作っています。

この中でもタートルグラフィックが使えます。


つい先日知って遊んでみたのだけど、Scratch なんかに比べて、無駄にロボットらしくゆっくり動くアニメーションで楽しいです。


#もちろん、アニメーションをカットして高速に絵を描くことも可能。



▲目次へ ⇒この記事のURL

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

今日は何の日

関連ページ

【訃報】シーモア・パパート【日記 16/08/03】

【訃報】シーモア・パパート【日記 16/08/03】

肩の力が抜けたところで【日記 16/03/26】

別年同日の日記

09年 おゆうぎかい

14年 冒険遊び場

15年 イチダントアール

17年 エドウィン・ハーバード・ランド 命日(1991)


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

1985年のパソコン事情  2016-03-04 16:54:59  コンピュータ

▲目次へ ⇒この記事のURL

こんなツイートを見た。



うーん、昔話ばかり書いている人間としては解説しないといけないか。

この人、人気者だから同じこと考えて解説する人は山ほどいそうだけど。


別のツイートで、スペックとかの話ではなくて、当時の日常の追想みたいなのを読みたい、と書かれていたので、そういう形式で。




まず、「ネットのないパソコンが一般的だったのはしっくり来ない」と書かれているけど、一般的ではなかった。


1985年ごろのパソコンは、全然一般的な製品ではなくて、よほど好きな人しか買わなかった。


40人のクラスに、1人か2人持っているかどうか…という感じだったから、5%くらい。

全然一般的ではない。


パソコンに興味を持つなんて中学生前後の男だったのだけど、ベビーブームの世代だ。

学校でもクラス数は多い。


僕の学校の場合、6クラスくらいあった。それで、学年でパソコンを積極的にやっているのは、10人くらい

珍しい趣味を持っているわけで、クラスを超えて仲が良かった。


#実際に持っている人でいえば、もうちょっといる。

 でも、買ったものの楽しめずに脱落、という場合も多いのだ。




当時のパソコンは、全く互換性がないものが多数あって、10人集まっても機種はバラバラ。


これで何をやるのか、といえば、大抵はゲームだ。

ゲームセンターに行けばゲームがあったけど、小中学生ではお金もあまりない。


でも、パソコンならゲームが遊び放題。

友達の家に集まっては、その家のパソコン用のゲームでみんなで遊ぶことになる。


#写真は、PC-6001mkII。仲の良い友達が持っていて、よく「スペースハリアー」で遊んだ。



今のパソコンと同じように「いろんなことができる」と考えると間違いで、「いろんなゲームができる」が正しい。

アルファベットとカタカナは使えるけど、漢字すら使えないので、ワープロにもならない。


当時はファミコンは発売された少し後で、まだゲームセンターのアクションゲームの移植が多かった。

ドラクエの発売と大ブームは 1986年だ。



パソコンでは、ゲームセンターの移植よりも、オリジナルのアクションゲームが多かった。

これは、性能が低かったから移植なんてできなかった、という面もあるのだけど、その分工夫を凝らした面白いゲームが多かったんだ。


ゲームセンターのゲームは、100円で少しの時間遊んでもらう、というのが基本なので、短時間のものが多い。

でも、パソコンのゲームは、じっくりと長時間プレイするように工夫されたものが多くて、ファミコンとは違う世界があった。


そして、当時のゲーム好きは、そうした「まだ見ぬゲーム」に強くあこがれていたんだ。

だからこそ、高くてもパソコンを買う必要があった。




当時の主な記録媒体は、カセットテープ。


機種にもよるけど、16KByte ~ 64KByte しかメインメモリがなかった。

今なら、小さな写真も納まらないサイズだ。


そして、このたった 64KByte のメモリにデータを読み込むのに、カセットテープでは 5~10分くらいかかった。

当時は今よりもずっと「漫画」の人気が高かったから、テープの読み込みを待ちながら漫画を読んでいた。


カセットテープにどうやって記録ができるのだろう?

ハードディスクなんかと同じ「磁性媒体」だとは言っても、あれにデジタル記録ができるとは思えない。


…と、現在の妻に言われたことがある。僕が昔話をするときに、妻が知らないからと、からかっていると思われたのだ。


もちろん、カセットテープはデジタルで記録できない。

だから、デジタル信号を、アナログの「音」に変換する。


1200Hz と、2400Hz の音。普通の「ラ」と高い「ラ」だ。

これで 0/1 を表現し、1秒間に 1200bit を記録する。


#テープ記録の際には、1バイトの「最初」と「最後」にも信号が付き、1バイト 10bit で表現した。

 だから、1秒間に 120バイト記録してあることになる。


音として聞くと、雑音にしかならない。

でも、テレビやラジオで放送して「パソコンのプログラムを届ける」なんて例もあったし、雑誌の付録にソノシート(ビニールで作られた安価なレコード)としてプログラムが付いてくることもあった。



市販のゲームだって、カセットテープで供給されている。

パソコンに読み込んで再セーブ…というような方法でコピーされないように、特殊な仕掛けなんかはしてあるのだけど、カセットテープだからダビングすることは難しくなかった。


もちろん違法だけど、当時のパソコンは最初に書いたように、マイナーな趣味。

違法だと啓蒙するような団体もなかった。


#写真は、PC-6001 の OLION のカセットテープ。

 カセットテープ時代の有名プログラマ、竹内あきら氏の作品。

 どういうご縁か、現在仕事で時々会います…




しばらくたって、フロッピーディスク (5inch) が普及し始めた。

僕の家の近所の書店が、パソコンの時間貸しサービスをやっていた。


その書店では、PC-8801 と PC-9801 、IBM-JX の3機種を置いていた。

当時はまだ PC-9801 にはゲームが少なく、中高生には PC-8801 の人気が高かった。


#写真は PC-8801 。http://www.emu-france.com/ から引用。


PC-8801 は、標準ではフロッピーディスクを扱えない。

しかし、その書店では、外付けドライブが繋げられていた。



そして、友人がフロッピー版のゲームを購入。

友人の家には、ディスクドライブはおろか、パソコンもなかった。

その「時間貸し」で遊ぶつもりで購入したものだ。


フロッピーって、速いっていうけどどれくらい速いんだろう?

カセットテープだとロード(読み込みの意味)に10分くらいかかるけど、1分で終わったりするのかな。


…なんて言いながら起動すると、数秒でゲームが始まって驚いた。




#僕が初めてフロッピーディスクの速度を知ったゲーム。

 PC-8801 用、ハイドライド。




当時は OS という概念は一般的ではなくて、パソコンに搭載された ROM に BASIC が入っていた。

今なら BIOS とか UEFI とか、そういうものに該当する部分。


BASIC というのはプログラム言語なのだけど、BIOS も OS も兼ねていた。

言語の機能として、メモリに直接自由な値を書き込んだり、そのメモリを実行したりできたので、BASIC からほかのプログラムを実行したりしたのだ。



カセットテープのゲームは、まず BASIC の LOAD 命令で読み込まれる。

読み込みが終わった時点では、その気になればプログラムが読める。BASIC で書かれているからだ。


でも、普通は内容は、メモリに書き込むデータの羅列。意味が分からない。

実行すると、メモリにプログラムを書き込んで実行する。その結果、さらに大きな機械語プログラムをテープから読み込み、即実行する。


先に「読み込んでからセーブしてコピーすることは出来ない」と書いたのは、こういう仕組みだから。

ゲームが動き始めたら、止めるにはリセットするしかないし、リセットすればプログラムは失われる。


1983年ころだと、機械語を使わずに BASIC で書かれたようなゲームも普通に出回っていた。




BASIC は初心者向けの言語で、実行速度も遅かった。

今でいえば、Javascript なんかと同じなのだけど、CPU が遅いことに加えてプログラム言語の技術がまだ低いので、ずっと遅い。


でも、腕に覚えがある人なら自分でアクションゲームを作れたし、アクションではないパズルなどを作る人もいた。


そうしたゲームが、BASIC のまま市販されることもあった。

でも、雑誌なんかに投稿され、掲載されているものもあった。


だから、雑誌に載っているリストを打ち込む根気さえあれば、非常に安くゲームを遊ぶことができた。

まぁ、雑誌に載るゲームは素人が作ったものだから、それほど面白くはないかもしれないけどね。


僕も、2度ほど雑誌に載ったことがある。

僕が使っていたのは、ファミリーコンピューターの周辺機器として発売された、ファミリーベーシック


#写真は、「マイコン BASIC マガジン」。当時のプログラム投稿雑誌で一番人気があった。

 雑誌の上に紙が載っているのは、僕のプログラムが掲載されたときの原稿料の通知書です。




先に「当時のゲーム好きはパソコンを買う必要があった」と書いたけど、僕は貧乏で買えなかった。

でも、ゲームが遊びたかったというより、プログラムが組みたかったので、これでよかったんだ。


当時のパソコンの使い方を「大抵はゲーム」と最初に書いたけど、おそらく2番目の需要がプログラム。

プログラムで何かを作りたい、というよりは、プログラムそのものをやってみたい、という需要。


何を作るかと言えば、やっぱ大抵はゲームなんだけど、絵を描くだけでも楽しかったし、音楽を演奏するだけでも楽しかった。


そして、ゲームを作ったとしても、すごく面白い作品になんてなるわけがない。

ゲームを作る、ということ自体を、一種のパズルゲームとして楽しんでいるだけ。


当時のパソコンはゲームしかできないものだったけど、「俺の考えた最強のゲーム」を作ることは…作ろうとすることは出来る、夢の箱だった。




最初にあげたツイートの反響の中に、「当時はネットもなくて、どうやってプログラムをインストールしていたのだろう」と言っている人がいた。


えーと、ハードディスクがないので、インストールという概念もないです (^^;

しかしまぁ、ここまでに書いた通り、ゲームで遊ぶことは出来たし、パソコンショップで買ってくることもできた。


そして、パソコンショップの一部は…いや、半分くらいかな。

「ソフトレンタル業」をやっていた。


今では違法行為だけど、当時は法律がなくて、ソフトは映画ビデオなどと同じものとされていたのね。

大体、市販価格の10分の1くらいで、3日くらい借りられる。


先に書いたように、パソコンのゲームは「じっくり楽しむ」ものが多かった。

3日でゲームを終わらせる、なんて無理な注文だし、誰もそんなこと考えてない。


もちろん、レンタルソフトはコピーするものだった。

レコードレンタルだってコピーするのが普通で、複製保証金がカセットテープの生テープに含まれていた。

だから、パソコンソフトだってコピーするのが当然、とみんな思っていた。


この頃になると、もうフロッピーディスクの多い時代。

カセットテープと違って簡単にはダビングできず、特殊な方法で「コピープロテクト」が施されている。


でも、私的複製は法律でも認められた権利なので、コピープロテクトを外してコピーするためのソフト、というのも売られている。

何百種類ものソフトに対応し、コピーできるのだけど、自分自身のコピープロテクトは外せない、という仕組みなので、コピーソフトだけは買うしかなかった。


#他社のソフトのプロテクトを外す、という機能はそれなりにあったけど、コピーソフト会社同士の不文律か、外せるソフトは少なかった。



後に、レコードなどと違って、デジタル情報のコピーは劣化せずにいくらでも作れてしまう、ということが問題となり、こうした「パソコンソフトのレンタル行為」は違法となる。


でも、レンタルは違法でも、中古ソフト販売は違法ではなかった。

だから、こうした店では中古ソフトを7割の値段で売り、3日以内に再度売りに来た場合は6割の値段で買いとる、なんて行為が横行した。


それは事実上レンタルだろう、という裁判所の判断が下りて警察が動き、やがてすべての店が消えうせたけど。




冒頭にあげたツイートでは、BL が見たくてパソコン始めた、と書かれていた。


当時だってもちろん、そういう需要はあった。

BL というより、エロ、特に 1985年には流行していた「ロリコン」ってやつが多かったようだけど。


#ロリコンっていうのは性的指向の意味だけど、当時は特定の絵柄やシチュエーションに対して「ロリコン」という言葉が使われた。


実は僕はこっちの方向は疎くてそれほど知らない。

いや、恥ずかしくて格好つけているとかではなくて、本当に当時興味がなかったのよ。


それでも、雑誌広告などに入っていたので記憶はある。


当時はエロ漫画だってエロ写真集(当時、ビニール袋に入れて立ち読みされないようにしたことから、ビニ本と呼ばれた)だって、モザイクやぼかしが入っていた。


だけど、パソコンなんて一部の人しか知らないマイナー世界。

簡単な線画とはいえ、局所をモザイクなしで描いたゲームが普通に市販されていた。無法地帯。


ここら辺、黎明期のインターネットと似ているね。

内容だってひどいもんで、今だと確実に問題になりそうなシチュエーションを楽しむようなゲームが多かった。


そしてもちろん、そういうソフトが目当てでパソコンを買うような人だっていた。

いつの時代でも、エロと戦争は技術を進化させる。



こちらは、自分のページポリシーで写真なしで…

脱ぎ麻雀コレクターでタモリ倶楽部に出たことでも有名なみぐぞうさんのページに素晴らしいまとめがありました。




とりあえず、思いつくことをだらだらと書いた。

時代背景としては、1985~1990 くらいの話かな。


このページにすでに書いた文章で重複しているものも多いと思う。

特に、ぎーちさんとの対談とは重なる部分が多い。


#ぎーちさんとの話は、パソコンというよりゲームの話題も多かったので、守備範囲が多少違う。


特に関連する話題にはリンクしてあります。

興味があればそちらもお読みください。





後から追記


後から「画像があると想像しやすい」ってリクエストいただいて、画像などを入れ込みました。

普段画像なんて入れ込まないから、入れ方にセンスがないよ(笑)


どこかのサーバーにあった画像などは、直接リンクさせてもらったうえで、出典を明記しています。

問題があれば削除いたしますので指摘してください。



こうした「当時の世相」みたいなものも、どこかでまとめたいと思っていたのですが、とりとめが無くなりやすく、まとめる機会がありませんでした。


今回は簡単な形ですが、まとめるきっかけを与えていただけたことに感謝いたします。


後から追記その2


いろいろと続編書きました。


レンタルソフトのコピーが当然の権利だと考えられていた時代の、コピープロテクトの話。


1988 年、1991年のパソコン事情




▲目次へ ⇒この記事のURL

関連ページ

内藤時浩さん 誕生日(1963)【日記 17/02/02】

細かな話題

アーカイブとはなにか【日記 16/12/17】

1988年のパソコン事情【日記 16/03/05】

1988年のパソコン事情【日記 16/03/05】

別年同日の日記

04年 メインマシン復活

07年 サーバー故障

11年 2月の出来事。

15年 スタックコラムス


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


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -