ClassboxとSelector namespace
Selector namespaceというのは、何を満たしていればSelector namespaceというのかが、私は分かっていない。最近、「Analyzing Module Diversity」を読んでいるが、この中にClassboxとSelector namespaceの違いが割と明確に書いてあった。
違いは、local rebindingになっているかどうかで、以下の例であれば、A#a()がどちらの定義で呼び出されるかということである。Classboxはlocal rebindingで、BarのA#a()が呼び出される。Selector namespaceの場合はlocal rebindingではないので、Fooのものが呼び出される。
classbox Foo class A def a(); end end class B def initialize(); @a = A.new; end def b(); @a.a(); end end end classbox Bar import A, B from Foo class A def a(); end end def main(args) B.new.b() end end
前から恐らくそんな感じだろうとは思っていたが、書かれているものを見て安心した。他にも違いはあるだろうが、それよりもこの論文でSelector namespaceといっているのは一般的なものと考えてよいのか? 例としてModular SmalltalkとSmallscriptを挙げているが、私には判断できない。仕様としての良し悪しについては、考えが纏まれば書きたい。