fluid-letとパラメタオブジェクトの超えられない壁

fluid-letをマクロで書くというのは、要するにクロージャへの突入時にset!してまわることになる。

しかし、これはプログラムがconcurrentになったときに微妙に困る。言語の上では同一の実体なので、set!が衝突したときにどうしようという問題が起こる(Gaucheはset!が全スレッドに波及し、Ypsilonは親のオブジェクトをset!してはいけない。要するにスレッドを作ったうえでこのfluid-letは使えない)。
パラメタオブジェクトは(普通に実装する場合単なるクロージャに見えるので)、通常の変数のように直接evalして値を取り出すのではなくapplyしないといけない。つまり、先の例では、

(with-point point1 (lambda ()
   (display (x))
   (display (y))))

のようにしなければならない。。
今は中間言語LLVMに食わせられるくらい細かくコンパイルしているが、もうすこし抽象化段階を上げて、そのインタプリタSchemeで書くのがいい気がしてきた。どっちにせよ、(skySchemeの)コンパイラが理解できないクロージャをwith-に渡しても現実には(Cell上では)実行できないので。
(手作りの環境フレームを使ってevalする、自分でSchemeインタプリタを書くよりも効率的な手段は無いと思う。。)
もちろん実行効率は低いが、どうしても効率的にSchemeインタプリタで実行したければ今までのようにR6RSライブラリを出力すれば良い。と思う。