[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 メーリングリストの案内