報國挺身日記 このページをアンテナに追加 RSSフィード

2006/04/07 天下り先へ国費6兆円

[][][] local rebinding 00:10

まつもとさんのコメント、FooということはSelector namespaceの仕様に近いということですか。私はその点についてはlocal rebindingの仕様のほうが使いやすい気がします。尤も実際に使用したことがないので、空想レベルの感覚ですが。どちらにも長所と短所があることは確かなので、もう少し考察してみます。

その後少し考えてみましたが、やはりlocal rebindingの仕様のほうが良いと思います。

元のプログラムを書き換えないままで動作を変えるために、差分をmoduleとして定義することが目的の筈です。local rebindingになっていないと、あるメソッドの定義を変えようとしても、元のメソッドを元のmoduleから呼び出していれば完全にはhookできなくなります。local rebindingでないほうが嬉しいケースも少しはあるでしょうが、そのときには元のmoduleの中のメソッド名とは異なる名前でメソッドを定義すれば、綺麗な方法ではないですが避けることができます。

AOPやDIを実現する手段として考えた場合でも、local rebindingのほうが容易なのではないでしょうか?

また、デザインパターンを表現する手段としても、MixJuiceのようにlocal rebindingのほうが良い気がします。

MixJuice によるデザインパターン改善カタログ

まつもとまつもと 2006/04/07 12:25 まだ元の論文を読む時間が取れてないので勘違いしているかもしれませんが、local rebinding相当はopen classで実現できるんじゃないでしょうか。

2006/04/03 欧州の乱

[][] MixJuiceとClassbox 00:12

昨日も言及した論文「Analyzing Module Diversity」には、MixJuiceに関しても間違いがあるような気がする。同一クラスに対する別個の独立した拡張が同時に、Classboxでは存在可能で、MixJuiceでは存在できないとしている。これは私が以前、Rubyist Magazine 0008号に勘違いをして質問したことと似た間違いをしているのではないだろうか。MixJuiceでも、同じクラスの別拡張は存在可能である。もちろん、あるmoduleから同時に両方を直接参照することはできないが、別のクラスを経由して間接的に操作はできるので共存できている。

2006/01/19 今年の風邪はしつこいね

[][][] Classbox 21:34

以前の記事で述べた疑問点を解決するために、

Classboxes: Controlling of Visibility of Class Extensionsを読んだ。

結局、最終的にどのclassbox(MixJuiceならmodule)の環境で実行されるかということをプログラム上で複数指定できれば良い訳だ。

このためには、あるコードの範囲を囲って、その部分をどのclassbox環境で実行するのか指定するというのが普通の考え方だと思う。しかし、そのような文法要素の追加については記述がない。

上記の論文を読んで、あまり自信はないが、以下のようになっているのではないかと思う。

(1) インスタンスオブジェクトについては、そのインスタンスの生成が記述されたコード上の位置のclassbox

(2) クラスオブジェクトについては、classbox階層の中でそのクラスが最終的に拡張/定義されたclassbox

オブジェクトごとにclassbox情報があるということになるが、本当だろうか?

2006/01/14 初めての記事

[][][] Classbox 02:33

Matzにっき経由で、

Classboxes: A Minimal Module Model Supporting Local Rebinding

Classbox/J: Controlling the Scope of Change in Javaを読んだ。

MixJuiceと比べて本質的に何が違うのか考えてみたが、

ベース言語(Java, Smalltalk)からの文法要素の変更が少ない

しか思い付かなかった。

MixJuiceへの言及があって、

MixJuice offers modules based on a form of inheritance which
combines module members and class extensions but not local rebinding.

と書かれているが、アプリケーションが動作するmain moduleで、必要とするすべてのmoduleをimportするのであれば、結局全ての拡張が適用された状態で動くだけになって、local rebindingと言っても意味がないような気がする。

他の論文も読んでみないと、理解できそうにない。