Smalltalk-72で遊ぶOOPの原点:伝説のローリングストーン誌「スペースウォー」の記事

アラン・ケイの“メッセージングによるプログラミング”という着想に基づき(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72に実際に触れてみるシリーズ 第2弾です(なお最新のSmalltalkについては Pharo などでお楽しみください!)。前回(2019年)を含む他の記事はこちらから→Smalltalk-72で遊ぶOOPの原点 | Advent Calendar 2023 - Qiita


本企画のきっかけ

1972年12月7日号のローリングストーン誌の「Spacewar」という記事に絡めては、そこでPARCの自由な研究風景が紹介されたため、官僚的なゼロックス本社で大問題になった…という知る人ぞ知る歴史的な事件があったわけですが、その記事の最後にアラン・ケイ氏が、Logoに似た部分を持つごく初期のSmalltalkらしき言語で書いたスペースウォー・ゲームのシンプルな実装のコードが掲載されていることを、ハトダンナさんが教えてくださいました。

ぱっと見た感じで私は、Smalltalk-72のごく初期のバージョンかと早とちりしてしまったのですが、その後、アラン・ケイ氏と親しい大島芳樹さんが、なんとご本人から「Smalltalk-71の考案中だった文法のひとつ」という貴重な情報を得てくださったのです!

これをダン・インガルス氏が自らの Lively-WebWebブラウザ内で動作するGUIフレームワークおよびWebアプリ構築環境)上に復活させたSmalltalk-72(個人的に「May30バージョン」と呼んでいます)に書き直して実際に動かしてみたい!…というのが、本シリーズでの挑戦です。ただ、現時点ではまだ元のコードを読むのに四苦八苦している状態なので、あえなく失敗したらごめんなさい^^;

オリジナルのダン・インガルス版に少し手を加えてマウスクリックやナンチャッテクロック取得を可能にした私的なコピーを使用したいと思います。

このエミュレーターの「Snippets1」「Snippets2」「Snippets3」ボタンが追加されたバージョンでは、各ボタンを押して開くウインドウ状のウィジェット内で書いたSmalltalk-72のコードを、エミュレーター側のキー入力として転送する機能が付加されています。具体的には、各ウインドウ内の記述を模して、Smalltalk-72のプロンプトのAltoを模したコンピュータアイコンと do-it を表す「!」マークで括られたコードをタイプして記述するかコピペして貼り付けた後、そのままAltoマークの直後で(ダブルクリックにならないように)ゆっくり2回クリックすると、左側のAltoのエミュレータ画面にコードを転送することができます。

おそらく「The Evolution of Smalltalk: from Smalltalk-72 through Squeak(Smalltalkの進化:Smalltalk-72からSqueakまで)」で執筆のための拡張だったろうと想像しますが、ユーザー体験としての貧弱なSmalltalk-72のターミナル(?)に直接ちょっと長めのコードを書くとなるともはや苦行でしかなかったので、これはとても便利な機能でたいへん重宝しています。

デフォルトのままだとターミナルが小さすぎるので、Snippet3 の冒頭にあるコードをこの方法で転送・実行し、ウインドウを移動・拡大してみましょう。

さあ、準備は整いました。…が、まずは肝心のSmalltalk-71のコードを読み解くところから始めないとですね^^;

Smalltalk-71についてへ続く)