[English] [Japanese]

Squeak: Squeakless and Bible Black

Squeak!

Updated: Apr 2, 1998.

  1. Mac の Smalltalk は感じやすい
  2. ユーザ割り込みキー
  3. 外面 (そとづら) を変える (Updated: Apr 2, 1998.)
  4. 自己責任でどうぞ #1: インストールの後
  5. わたしのクラスたちはどこ?
    1. わたしのクラスたちはどこ?
    2. わたしのクラスたちはどこ?: その後
    3. わたしのクラスたちはどこ?: 修正された!
  6. フル・スクリーンで動かす (Windows95)
  7. Win32 VM (v1.31) のバグ
  8. STones80 を走らせる: 一時変数名の "再利用"

Mac の Smalltalk は感じやすい

SqueakSmalltalkAgents も、 キーボード・スクリプトには敏感です。 意図したポップアップ・メニューが出ないで違うメニューが出るとか、ドラッグしてもいないのに選択されるときは、英語モードになっているかどうか、 キャプスロック・キー が押されていないかをチェックしてください。わたしは VJE-Delta を使っていて、「主に半角入力」, 「caps lock key off で英数半入力」に設定してるので、よく間違えます。

ユーザ割り込みキー

Squeak のユーザ割り込みは、 command-.(period) です。Hypertalk, Supertalk と同じです。 control-C ではないので、ご注意。 ちなみに、 Windows95 では、 alt-.(period) です。

外面 (そとづら) を変える

Squeak のルック & フィールは古式に法って Smalltalk-80 を踏襲しています (もっとも、 Smalltalk-80 そのものは本でしか観たことがないので、断言していいのかどうかは不安ですが)。 だいたいにおいて、現行のウィンドウ・システムと全く異なるという訳ではなく、 アクティヴなペインにのみスクロール・バーが『にょい』という感じで出現するなど、 「ほんのちょっと変わってる」という感じです。 だもんで、「ほんのちょっと変わってる」ために、気に入らない人もいるようです。 そのためかどうか知りませんが、 Squeak に今風のルック & フィールを搭載する goodies が ftp サイトに揚がっています。 オリジナルのルック & フィールが嫌いな人は試してみると佳いかも。

Walkback --> proceed --> Message not understood: erase の不具合は 修正されています。

traditional alternative
Traditional browser Alternative browser

自己責任でどうぞ #1: インストールの後

以下のような投稿を見つけました。

インストールしたあと、
Text initialize.
Smalltalk recompileAllFrom: 'A'.
としたほうが良いそうです。
どこが変わるのか、判りませんでした。

わたしのクラスたちはどこ?

version 1.23 と 1.3 を使用していて、チェンジズの圧縮後に自前のクラスのメソッドにアクセスできないというトラブルに遭遇しました (MacOS でも Windows95 でも発生します)。カテゴリとクラスにはアクセスできますが、メソッドにアクセスしようとすると、上記のような walkback が出現します。

condenseChanges -> Smalltalk allClassesDo: [block] -> Smalltalk classNames と追いかけてみて、キャッシュされている "ClassNameCache" が更新されないために、圧縮時に書き出されない (らしい) ということが判りました。んなわけで、圧縮するときは、 手動でキャッシュをクリアしてからコンデンスを掛け、 image を save する必要があります。 Smalltalk classNames は "ClassNameCache" がクリアされていれば作り直します。

Smalltalk flushClassNameCache.
Smalltalk condenseChanges.
Smalltalk snapshot: true andQuit: false. 
"Smalltalk snapshot: true andQuit: true."

John Maloney さんの Squeak 1.24SK (based on Squeak 1.23) では、上記のようなことをせんでも、ちゃんと動きます。

以下参照。

わたしのクラスたちはどこ?: その後

Where have all my classes gone? に関して、申し訳ないと思いつつ、質問してみると、返事が届きました。 バグだそうです。

かの ダン・インガルスさん曰く

次の 1.31 のリリースまでには直しとくからね。

パッチ もいただきました。 Metaclass の 'class hierarchy' プロトコルにある「長い」メソッドを修正します。

!Metaclass methodsFor: 'class hierarchy' stamp: 'di 2/1/98 09:55'!
name: newName 
inEnvironment: environ 
subclassOf: sup 
instanceVariableNames: instVarString 
variable: v 
words: w 
pointers: p 
classVariableNames: classVarString 
poolDictionaries: poolString 
category: categoryName 
comment: commentString 
changed: changed 
を修正します。
    (wasPresent _ environ includesKey: newName)
        ifTrue: 
            [oldClass _ environ at: newName.
            (oldClass isKindOf: Behavior)
                ifFalse: 
                    [self error: newName , ' already exists!!  Proceed will store over it'.
                    wasPresent _ false.
                    oldClass _ self newNamed: newName]]
        ifFalse: 
            [oldClass _ self newNamed: newName.
            Smalltalk flushClassNameCache "ここでクリアします"].

わたしのクラスたちはどこ?: 修正された!

Where have all my classes gone? の件、最新ヴァージョン (v. 1.31, Thursday, February 5, 1998) では fix されています。

フル・スクリーンで動かす (Windows95)

Windows 版も落としてみました。同じように 2 種類の VM がありますが、特別仕様として、 Mac で言うところの FKEY みたいな機能が付加されていました。 F2 キーを叩くとポップアップ・メニューがあらわれます。そのうちの "Run full screen" を選ぶと、デスクトップもタスクバーも消えて、SqueakOS のような雰囲気になります。カッチョいいです。 ただ、このポップアップを見れば判るように、この機能は WindowsAPI を呼んでいるので、 Windows 版でしか動きません。 また、 VM のあるディレクトリに INI ファイルが生成されるので, そこでデフォルトを制御することも可能です。<- (INI 用の API 使ってれば) これまた Windows オンリーやがな (っつったって、単なるテキスト・ファイルの読み書きなんだけど)。

フル・スクリーン・モードでなければ、「システム・メニュー」にも「VM Preferences」というアイテムが追加されるので、システム・メニューからも選択可能です。

Squeak on Windows popup/system menu
popup/system menu of Squeak on Windows95

Win32 VM (v1.31) のバグ

Windows 用の VM (v1.31) にはバグがあり、メインのウィンドウをリサイズするとクラッシュするそうです (未経験)。 そういや、メイン・ウィンドウをリサイズすることなんでしてないので、全然気付きませんでした。 このバグをフィクスした版がリリースされています。ポーティングされているアンドレアス・ラーブさんは、アップデートを「強く」お勧めしています。 上記アーカイヴには通常版と Jitter 版の両方が入っています。

STones80 を走らせる: 一時変数名の "再利用"

SmalltalkAgents にも付属していた STones80 benchmark を、なんとか動かそうとしていたのですが、上記のようなエラーが出てファイルインできん!
ティム・オルソンさんに、

『スロットが足りんのである。 Squeak はユニークな一時変数は個別にアロケートするので、一時変数を整理して名前の再利用をすればよろしかろう』
というアドヴァイスをいただきました。なるほど、こんな制限があったのか。 というわけで無事ファイルインできました。 (実は SmopstoneBenchmark の「実行」でトラブっているのだが、それは別の話)

と言ってたら、またもティム・オルソンさんにアドヴァイスをいただき、 無事走らせることができました。 Float クラスのストリーム書き出しメソッドに不具合があるようです。GNU の gcc library を 用いたものにリプレースされる予定だそうです。

ところで、たまたま non Jitter 版で走らせてみたら、

Attempt to evaluate a block that is already being evaluated.
BlockContext(Object)>>error:
BlockContext>>valueWithArguments:
BlockContext>>value:
[] in SmopstoneBenchmark>>primesUpTo:
SmopstoneBenchmark>>primesUpTo:
という Walkback が出る。なんぢゃ、こりゃ。「すでに評価されているブロックを評価しようとしているぞよ」。どないせぃっちゅーねん。とゴネていたら、ティム・オルソンさん、ティム・ローリッジさんが教えてくださいました。
『コンヴェンショナルな VM はブロックの再帰をサポートしておらぬ (ブルー・ブック参照)。 どうしても動かしたいのならば、ブロックの再帰ではなく、メソッドの再帰でもってコードを書き直すが佳しかろう』
ひぇぇという訳で書き直しました。 PublicDomain-Benchmarks.zip (12KB). ただし、このテストでは SmopstoneBenchmark の 2 つのメソッドが「ブロックの再帰的呼び出しの評価」を目的としているので、 Non Jitter 版では、 (SmopstoneBenchmark が) あまり意味のないテストになっている可能性があります。 なお、 version 1.31 でのみ、テストしています。


Created: Jan 23, 1998
[English] [Japanese]