From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2002-08-06T21:51:12+09:00 Subject: [ruby-dev:17949] Re: import-module (Re: Re: scope-in-state) けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev:17943] the message: "[ruby-dev:17943] Re: import-module (Re: Re: scope-in-state)", on Aug/06 18:34(JST) Shin-ichiro HARA writes: >原です。 >なるほど。scope-in-state はかなり大きなプログラムが念頭にあるわけです >ね。私はちょっと思いつかないけど。例えばどんな? mathn は該当する? mathnも複数のクラスにわたって振る舞いを変えていますから. いえるか も. でも, お互いに, コラボレートしているわけでもないしな... >>目的はわかります. ただ, プログラムはオブジェクト同士のコラボレーション >>で処理が進むものなので, 1つだけのクラスの振る舞いを変えるimport-module >>は不十分ではという気がしています. >ふーむ。そう考えると import-module は「ワンポイント」に見えるかな。 >import-module でも、例えば [クラス, モジュール] の配列の配列を引数に >して (中略) >で、複数のインクルードができはするのですが、もっとシステマティックにや >りたいわけですね。 そうですね. import_moduleは import_moduleでモジュールを指定するわけで, ライブラリを使う側がincludeしたいモジュールを指定するわけですよね. scope-in-stateはライブラリを提供する側があらかじめ変更したい振る舞いを 宣言しています. で利用者側はその宣言されたものだけを使います. その辺り の感覚が違うんだと思いますね. もともとのアイディアがclass-in-stateなわけですが, UMLでこういうものが ある理由は, Rubyのクラスのように動的に振る舞いを変えることのできるクラ スはUMLのクラス図ではまともに表現できません. かといって, やはりクラス 図で表現したいというときに用いる手段として存在しています. ですので, scope-in-stateも静的に表現できるってところにこだわっています. >> >なる程。私は自前で継承列を構築する scope-in-state の強引さ:-)に >> >感動しました。こんなことができるんだなあと。 >>(^^;;; これはこの実装しか思いつかなかったからです. ただ, まだ, 概念設 >>計段階なので実装にはまだこだわっていませんでした. >そうだったんですか。私には「やれることはやってよい」と教えられた気がし >て、インパクトがありました。 (^^;;; 私も実装をどうやったのか覚えていなくて, 思い出すのに苦労しました. 私の もですが, 原さんのも理解するのが難しい実装ですよね(^^;;; >>klass.import_module(mod)した時点で, aliasするのですものね. これには気 >>が付きませんでした(^^;;; > >scope-in-state をパクッたつもりだったんだけど、ちょっと違ったみたい。 >(^^; うーん. 似ているのはpush/popがあるところかな(^^;;; ところで, scope-in-stateにメソッドキャッシュを導入してみました. これだ と, multi-thread版のimport-moduleと同じぐらいになりました. これがこの タイプの実装の限界でしょうかね. どうやっても, single-thread版なみには ならないでしょうね(^^;;; # でも, もっと良い実装のアイディアが出ましたので, もうちょっと頑張って # みます. keibm% ruby -I import-module-0.12 import-module-0.12/test-time.rb 0 multi thread(scopes in 1000 loops) : 9.9948 multi thread(1000 loops in a scope) : 0.0600 keibm% ruby -I import-module-0.12 import-module-0.12/test-time.rb 9 single thread(scopes in 1000 loops) : 5.6054 single thread(1000 loops in a scope) : 0.0067 keibm% ruby -I import-module-0.12 import-module-0.12/test-time.rb 8 scope in state(scopes in 1000 loops) : 0.2268 scope in state(1000 loops in a scope) : 0.1880 # 新scope-in-state keibm% ruby -I import-module-0.12 import-module-0.12/test-time.rb 7 scope in state 2(scopes in 1000 loops) : 0.2414 scope in state 2(1000 loops in a scope) : 0.0429 ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju@rational.com <<---