[theory] 大家来比较下下数据导向和消息传递。

simohayha 2007-08-19
今天看到了lich发的帖子,就把sicp那一部分又看了一遍,刚好后面的习题2.76刚好也是比较数据导向和消息传递 还有带有显示分派的通用型操作,说是加入一个新类型或者一个新操作那种策略更好些。

我的看法是加入一个新类型,采用数据导向和消息传递是一样的,而加入一个新操作的话,看起来带有显示分派的通用型操作,反而能更好些。
Lich_Ray 2007-08-19
通用型操作?难道说要在动态语言里加入查表?头上出现很多问号~~

看完 T1 的《失踪的链环》之后,我突然想到想:如果 FP 的基于消息传递的 OO 系统能够进行惰性的消息传递也许就能克服因为不能确定类型而进行的“消息广播”导致的性能下降了——消息传递分段进行。如果能够坚持纯 FP 的话,不但可以做优化,消息的解释、处理还可以异步化。

烦死了。我决定了,我要召唤 T1,simohayha fire in the hole.
simohayha 2007-08-19
呵呵,用数据导向不就可以消除 “消息广播'了。

你的惰性的消息传递是指什么?
Lich_Ray 2007-08-19
分步发送,在消息被 force 处理(应该是一个底层操作)之前不解包消息。
Io 语言用的就是类似的策略,所以它可以不用语法变换直接实现一些语法比如 if:
if := method(
    call evalArgAt(0) ifTrue(
    call evalArgAt(1)) ifFalse( 
    call evalArgAt(2))
)

悍的可以。其它的严格语言这样写的 if 在递归中就 gg 了,但 Io 不会。
有了这个,方法就有权力不解包消息了,只要隐性分析一下类型就可以了,还可以手动转发消息。
事实上,Io 的 slotAccesss 性能确实远远超过 Python,Ruby 之流,在 x86 上就明显了,在 ppc 上更好。
Global site tag (gtag.js) - Google Analytics