Smalltalk-72で学ぶOOPの原点:念願のクリック、's(instance_evalで使う記号)、⦂(オープンコロン)を手に入れた!

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


知らないメッセージはスルーする?の続き)

LivelyWeb版Smalltalk-72処理系のいくつかの不具合を解消してみた

1970年当時のバイナリーがそのまま動いているという点で、Webアプリ and/or 限定的なALTOエミュレーターであるがゆえの制約は少なからずあるものの、体験や学習に最適!とご紹介している件の処理系ですが、実は長らく解決できていなかった、しかしどうしても解消したい問題がいくつかありました。

ひとつはマウスクリックのイベントが拾えないこと。これが使えないと、マウスによる描画等のスクリプトが動かせないという残念さはありますが、それよりなにより開発環境として、便利な組み込みの構造化エディターが使えない(編集対象のトークンやメニューコマンドの選択のためのクリックに反応しないため──)という点で大きな障害になります。もちろん、構造化エディター無しでもコードの編集はできなくはないのですが、イントロスペクションを駆使したかなりの力業で、ちょっと気軽に触れて遊んでみたいだけの体験者には向きません。

二つ目はRubyinstance_evalに相当する機能を使うときの 's というグリフの文字、および、メッセージから評価せずにトークンを1つだけ取り込むアクションに使う(オープンコロン)が入力できないこと。これらはSmalltalk-72のコーディングには必須といってもよい記号文字なのですが、いろいろ問題があり入力できませんでした。前者はssなどの新しいメソッドとして追加登録(addtoアクションを利用)する、後者は:☞で同じことができるので代替するというワークラアラウンドは見つけてはいたのですが、それなりに面倒でした。

そんなわけで、ユーザーが自由に改変して保存もできるLivelyWebならではの特徴を活かし、このたび思い切ってこれらの不具合を解消する細工を処理系に入れてみました。本家を置き換える自信はなかったので、ユーザーフォルダー(ディレクトリー)のsumimALTO-Smalltalk-72.tweak.htmlでアクセスできるようにワールドの複製を作りました。

Chrome推奨です。以降は、このワールドをベースに進めていこうと思います。

追記:その後、本家 https://lively-web.org/users/Dan/ALTO-Smalltalk-72.html もいろいろ改良され、私も思いきって修正を入れてみたので、マウスクリックの処理、's の入力は本家でほぼ問題なく扱えます。Snippets ウインドウからの二回クリック(ダブルクリックにならないように、ゆっくり、二回)による、コードの転送などにも対応していて便利なのでぜひ本家をお使いください。なお、残念ながら Smalltalk Zoo からリンクされているインスタンスは権限が解放されておらず、修正を加えて保存することができませんでしたので、マウスクリックに関してはこちらは使用できないままです。ご注意ください。

追記 [2021-09-08]:残念ながら本家 https://lively-web.org/users/Dan/ALTO-Smalltalk-72.html が削除されて使えなくなってしまったようですので、当面は「LivelyWeb版Smalltalk-72について」にもお示しした勝手バックアップをご利用ください→https://lively-web.org/users/sumim/ALTO-Smalltalk-72.tweak2.html

組み込みの構造化エディター(Enter、Leave、Exit)に続く)