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