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

2006/04/24 アンティックドール

[] local binding vs. open class 00:42

local binding仕様での拡張は不要で、通常のクラス拡張で済むのではないかという議論で、通常のクラス拡張では、以下の二点で問題があるのではないか、と書いた。

  1. 変更したメソッドの中から元のメソッドを呼び出すためには元のメソッドをaliasする必要があるのと、そうしたときに、独立した複数個の拡張を上書きで適用しなければならない場合が面倒
  2. 一部のクラスを外部に非公開にするという機能を導入するのが困難

他に気付いた点としては、selector namespaceによる拡張に通常のクラス拡張を組み合わせようとした場合に、どのように適用すれば全体の整合性が取れるのかが難しい気がする。そういうことをしたいかどうかもわからないが。

2006/04/20 真面目なモーツァルト

[] Classbox/C# 22:28

「On the Integration of Classboxes into C#」を途中まで読んだ。

"暗黙的import"というのが新しく導入されたのかな。Classbox/Jにはなかったと思うが、見落としていたのかも。少なくともSqueak版のときにはなかった。論文を書いている人自体が違うけど。

あるクラスを明示的にimportして、上位クラスをimportしないときに暗黙的importになる。そのClassbox内から名前で参照はできない。という仕様だと思う。これは、メソッド探索で探索先が上位クラスに移動してしまったときに、Classbox環境が変わらなければならなくなるのを避けるために導入したのではないか。そうだとすれば、実行中にClassbox環境を全く変えないことになった可能性が高い。

全部読んでないので、全然違うかもしれない。

2006/04/18 哀愁のシンフォニー

[] MixJuiceとの比較 23:00

キャンディーズの思い出に浸り過ぎて、Classboxについて何を考えていたのか忘れてしまった。

MixJuiceでの名前空間分離/仕様実装分離のようなことが、Classboxではできないのではないか。Classboxでは、importによってクラス単位での可視性の制御はできるが、メソッド単位、フィールド単位での制御はできないと思う。Classbox/JでJava言語としての可視性の指定は可能だが、moduleの為ではない。

検討していくほど、ClassboxよりMixJuiceのほうが優れているような気がしてしょうがないのだが、何か考え違いをしているのだろうか?

2006/04/10 田中派の残党

[] コメントの続き 23:43

済みません。module systemのことしか考えていなかったので、moduleと無関係な方法は一瞬も考えてませんでした。module systemを使わず、単純に拡張するということですよね。

唯、一点だけ難を言えば、変更したメソッドの中から元のメソッドを呼び出すためには元のメソッドをaliasする必要があるのと、そうしたときに、独立した複数個の拡張を上書きで適用しなければならない場合が面倒かなと思います。

もう一点ありました。

module systemを使用した場合には、一部のクラスを外部に非公開にするという機能を導入できますが、open classだけでは困難ではないでしょうか?非公開にする例としてはFacadeパターンがあります。非公開が必要なデザインパターンは全てselector namespaceで書けるとなれば不要ですが。

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で実現できるんじゃないでしょうか。