[SML 7553] Re: 第7回Smalltalk勉強会@京都

AOKI Atsushi atsushi @ cc.kyoto-su.ac.jp
2009年 5月 16日 (土) 23:11:41 JST


こんばんは、青木@宇治です。

私は、毎朝、毎朝、プログラムのコードリーディングを日課にして
いるのですが、京都での勉強会が開催されてから、Smalltalkのコー
ドリーディングをする方々が増えてきて、実に実に喜ばしいです!

> Junが特別なことをしているのは、青木さんからお答えがありましたが、

Root国Smalltalk府Jun市に住んでいるクラス名は、Smalltalk府に
おいて名前が衝突することがない、というのが前提になっており、
だからこそ、Smalltalk府に移入して、Jun市を省略してもいいよう
に仕組んだのです。

#オラさ村のJunOpenGL3dObjectさんは、
#とても有名で、Jun市の市民なのにさ、
#Smalltalk府の顔になっちまっただぁ。

それから、クラスの名前とクラスの実体の束縛を表すのが#{…}に
なります。LiteralBindingReferenceのインスタンスです。

(1)
OrderedCollection
#{OrderedCollection} value

(2)
Core.OrderedCollection
#{Core.OrderedCollection} value

(3)
Root.Smalltalk.Core.OrderedCollection
#{Root.Smalltalk.Core.OrderedCollection} value

これはクラスの名前と実体だけに限らず、すべてのオブジェクトの
名前と実体の束縛に適用できるように整備が進行中です。

> それ以外に、Workspaceで実行していらっしゃるのなら、Workspaceにも
> 仕掛けがあって、Namespaceの名前を前置しなくても全てのNamespaceに
> ある共有変数を参照可能です。

名前空間、パッケージ、パーセル、カテゴリなど、これらはプログ
ラミング環境と呼ばれるものに内包されて、プログラミングを行う
ときの外延となる、というグランドデザインに基づいた実装も現在
進行中なんです。

濱崎さんに指摘いただいワークスペースにおける名前空間の複数指
定も、このグランドデザインの一つになります。

余談になりますが、もう一つの禁じ手を示しましょう。先にも申し
ましたが、やっていいこととやってはいけないことを理解し行解す
るのに役立つでしょうからね。

GeneralBindingReferenceのインスタンスに隠蔽されたキャッシュを
無理矢理にアクセスしてみます。やってはならないのですよ、くれ
ぐれも言っておきますが。

(#{Root.Smalltalk.Core.OrderedCollection} yourself)
    instVarAt:
        (#{Root.Smalltalk.Core.GeneralBindingReference} value allInstVarNames
            indexOf: 'cache')
==> nil

ね、最初はnilでしょ。ところが、あなたの値は何ですか?と訊ねる
(valueというメッセージを送る)と、

(#{Root.Smalltalk.Core.OrderedCollection} value; yourself)
    instVarAt:
        (#{Root.Smalltalk.Core.GeneralBindingReference} value allInstVarNames
            indexOf: 'cache')
==> (VariableBinding key: #OrderedCollection)

ね、今度はVariableBindingのインスタンスがキャッシュされている
のがわかります。

VariableBindingは、LookupKeyのサブクラスで、Associationの親戚
です。Dictionaryの要素になることでお馴染みですよね。

Object
| Magnitude
| | LookupKey
| | | Association
| | | | AssociationTree
| | | | | AssociationTreeWithParent
| | | | | | AssociationTreeWithParentWithIndents
| | | | ProbeCharacterStyle
| | | | WeakKeyAssociation
| | | | | Ephemeron
| | | LabelAndValue
| | | VariableBinding
| | | | InitializedVariableBinding

はかないものEphemeronは面白いです。親しい者に先立たれたこと
(theBereaved)をいたむmournのメッセージがいかにも喪に服する
感じなんですよ。

------------------------------------------------------------
AOKI Atsushi          http://www.cc.kyoto-su.ac.jp/~atsushi/


SML メーリングリストの案内