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

濱崎治 osamu.hamasaki @ gmail.com
2009年 5月 15日 (金) 00:47:10 JST


濱崎です。
2009/05/14 0:21 AOKI Atsushi <atsushi @ cc.kyoto-su.ac.jp>:

> 青木@京都宇治です。

<中略>

> 今日は、私的変数・共有変数・特殊変数と進んで、メッセージに入
> ることができました。ところがですね、喧喧諤諤の状態、諸子百家
> の光景を呈し、かなり疲れましたぁ〜。


お疲れさまでした。私としては楽しく議論が出来てよかったです。

<中略>

> メッセージ送信に関しても、センダの具現が話題にのぼりましたが、
> こちらもブラックブックやイディオムでは、レシーバはセンダに応
> 答する、と書いておきました。


センダの話題のところで出てきた

               Compiler evaluate: 'self printString' for: 3 logged: false

のお話は、その場ではちょっと消化不良だったので、帰宅してから
Compilerのやっていることを読んでおりました。

それで、読んだコードに触発されて以下のコードを書きました。

------------- ここから -------

| methodSearchBlock mainBlock |
methodSearchBlock := [:class :messageSelector |
class isNil
ifTrue: [nil]
ifFalse:
[(class selectors includes: messageSelector)
ifTrue: [class getMethodDictionary at: messageSelector]
ifFalse:
[methodSearchBlock
value: class superclass
value: messageSelector]]].

mainBlock := [:anObject :messageSelector :args |
| method |
method := methodSearchBlock
value: anObject class
value: messageSelector.
method valueWithReceiver: anObject arguments: args].

^mainBlock value: 3 value: #+ value: #(4)

--------------- ここまで ---------

仮想マシンが裏方でひっきりなしにやっていることではあるのですけれど、
こんな風にあからさまに書いてしまうと、センダ、レシーバどころかメッセージ
送信そのものが消えてしまっていて、煎じ詰めればメソッド呼び出しのチェーンで
しかないのね、と改めて思ってしまいます。当たり前と言えばそうなんですが。

Osamu Hamasaki
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://www.smalltalk.jp/pipermail/sml/attachments/20090515/21d42982/attachment.html


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