[SML 7318] Re: ブロック生成のメタプログラミング
AOKI Atsushi
aoki @ sra.co.jp
2007年 9月 12日 (水) 03:53:51 JST
こんばんは、青木です。
西原さんがほとんどのことを言及されていますので、ブロックの動
的な生成(その都度で生成すること)に関してのみ、鷲見さんが思
いつかれた以外で、私の思うところを捕捉しておきます。
あるメソッド内でブロックを静的に応答してしまうと、当該のブロ
ックはコンパイルされたメソッドのリテラルフレームに格納されて
しまいます。ブロックを静的に応答するところが複数(数カ所)に
及ぶ場合も同様になります。
これではインスペクタやデバッカなどのプログラミングツールの効
力を殺いでしまうことになりかねません。ソースコードを得ようと
すると、ブロックを保持しているメソッドのソースコードを引っぱ
ってくることになるからです。
先の私のメールにおいて、なにゆえ逆コンパイルされたソースコー
ドを指示したのか、その意図を汲み取れる方々には、私の企ても伝
わるだろうと慮ってのことです。
また、仮想マシンはバイト幅でアドレッシングできるところまで手
が延びますので、応答されるブロックの静的生成および動的生成の
如何に関わらず、ブロック変数(引数)の総数はバイト幅アドレッ
シングによって抑制されています。
これをベタに書き下してしまうと、ブロックの取り得る引数の総数
分だけのディスパッチッイングを行うプログラムとなります。あま
りに醜悪でしょう。
そこをユニバーサル・メッセージ(万能関数)を用いたメタプログ
ラミング(高階関数)手法で実装したブロックの動的生成で切り抜
けた、というところでしょうか。
------------------------------------------------------------
R2D2 (AOKI Atsushi) http://www.sra.co.jp/people/aoki/
SML メーリングリストの案内