Smalltalk-72で学ぶOOPの原点:LivelyWeb版Smalltalk-72について

アラン・ケイの“オブジェクト指向”というアイデアをもとに(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72で遊んでみるシリーズです(なお最新のSmalltalkについては Pharo などでお楽しみください!)。他の記事はこちらから→Smalltalk-72で学ぶOOPの原点 Advent Calendar 2019 - Qiita


はじめにからの続き)

ダン・インガルス自らの手による今も使用可能なSmalltalk-72処理系

Lively(あるいはLively Kernel、LivelyWeb)は、XEROX PARC(パロアルト研究所)でSmalltalk-72をはじめとするSmalltalkの古典的実装や移籍後のAppleSqueakの開発を手がけたダン・インガルスが考案した動的なWebアプリ開発用のフレームワークインタラクティブなコラボ開発環境です。Scratchの作者としても知られるジョン・マロニーが、その昔、SELFやSqueak Smalltalkで、従来のMVCに変わる新しい、そしてオブジェクトがもっと活き活きとしたGUIフレームワークとして考案した「Morphic」やそれで構築した環境を、素のWebブラウザ上で動くようにJavaScriptで書き直したようなものだとも言えます。

1970年代の前半、アラン・ケイらの実証実験のため週1回、彼らが持ち込んだパーソナルコンピューター試作機「Alto」を使ってSmalltalk学習をしていた生徒達は、その日の成果をメモリダンプファイルとして保存し、翌週それを再び読み込ませることでまったく同じ状態で作業を再開していたそうです。そのメモリダンプをLively上に構築されたAlto/Novaエミュレーター(Altoは他社製ミニコン「Nova」の互換機+動的な命令セット拡張可能なマシンとして作られました)に読み込ませて動かすことでSmalltalk-72処理系を当時のまま機能させるしくみになっているのがLivelyWeb版のSmalltalk-72です。

上記リンクにアクセスすると、本稿執筆時点では次図のような画面が表示されます(ただし、LivelyWebは環境の状態をユーザーが自由に変更したり保存したりできるので、アクセスするタイミングによってはこれとは違った状態になっている可能性もあります)。

LivelyWeb版Smalltalk-72

はじめてのSmalltalk-72

試しにこのSmalltalk-72環境で簡単な式を実行してみましょう。Smalltalk-72にはまだ、後のSmalltalk-76や-80以降のSmalltalk処理系に特徴的なワークスペース(Pharoではプレイグラウンド)に代表されるモードレスなエディタや、そこに入力されたテキストの一部を選択してポップアップメニューから「print it」を選ぶことで自在に式を評価して結果が得られるような先進的な機構は備わっていなかったので、一周回って(?)、通常の言語処理系と似た感覚でREPL(入力・評価・出力のループ。対話型評価機構を指す)が使えます。

操作にあたってまず最初に知っておく必要があるのは、右上の About Smalltalk-72 にも書かれているように、入力したメッセージ式を評価するには do-it と呼ばれる文字を入力しなければならず、それはバックスラッシュ「\」(日本語キーボードでは円マーク「¥」)に割り当てられていることと、右下の Keyboard Help にあるように、この do-it(グリフは「!」)の他にもいくつかのアイコンライクなグリフを持つ特殊な文字の入力ができるようにしておくことです(ただし、未実装だったり、Webブラウザにキーイベントを奪われてしまう関係で、残念ながらその多くは入力できません)。

起動後から特に「About Smalltalk-72」もしくは「KeyboardHelp」といったウインドウのように見えるオブジェクトを操作したり、新しいウインドウを開いたりしていなければそのまま(もし操作してしまっていたら、改めて「ALTO Smalltalk-72」ウインドウ内をクリックしてフォーカスを戻してから)「3 + 4」とタイプして、最後に「\」(日本語キーボードでは「¥」)キーを打ってみてください。

正常に動作していれば行を改めて「7」が表示されるはずです。ちなみに、Altoを模したアイコン(実際には文字)がREPLのプロンプト記号として使われています。

3 + 4 の評価

もしどうしても入力ができなかったり「\」キーを押下後エラーのような表示になる場合は、使用中のWebブラウザとのLivelyWebとの相性が悪かったり未対応であったりする可能性があるので、別のWebブラウザで(必要ならインストールしてから)もう一度試してみてください。個人的には Chrome が比較的使い勝手がよさそうに思います。

配列要素の参照と要素の代入に続く)