[SML 7320] Re: ブロック生成のメタプログラミング
Tomohiro Oda
tomohiro @ sra.co.jp
2007年 9月 12日 (水) 12:24:50 JST
おだです。
NISHIHARA Satoshi wrote:
> ((0 to: 9) select: [:each | #odd value: each]) fold: [:x :y | x perform:
> #* with: y].
えっと、Symbol>>value:およびSymbol>>value:value:が実装されている場合、
((0 to: 9) select: #odd) fold: #*
になりますね。
ブロック生成のメリットはVMによる実行効率の向上にもあると思います。
試しにSqueak上でMessageSpyで
(1 to: 5000) fold: #*
(1 to: 5000) fold: #* asBlock
を比較したところ、後者のほうが1割ほど実行効率が良いです。
もちろん、5000を100ぐらいに減らせば実行効率は逆転します。
一番の違いは、シンボルという識別子を計算実体とするのと
クロージャという実行環境を計算実体にするのとでは、
やはりクロージャが計算するほうが型的に正しく見えます。
識別子が計算実体なのは、なんだか手続き型言語的で・・・
---
おだ
SML メーリングリストの案内