Schemeな日々その5

マクロの理解が怪しいので復習。fluid-letマクロを自力で追ってみる。

;fluid-letの呼び出し
(fluid-let ( (x 9) (y (+ y 1))) (+ x y))

;fluid-letマクロ
(define-macro fluid-let
;以下、fluid-letマクロの動作をトレース
  (lambda (xexe . body)
  ;lambda xexe:( (x 9) (y (+ y 1))) body( (+ x y))
    (let ( (xx (map car xexe))
  ;ローカル変数xxを定義、値はxx:(x y)
          (ee (map cadr xexe))
      ;ローカル変数eeを定義、値は(9 (+ y 1))
          (old-xx (map (lambda (ig) (gensym)) xexe))
      ;ローカル変数old-xxを定義、値は(g1004 g1005)
          (result (gensym)))
      ;ローカル変数resultを定義、値はg1006
      `(let 
    ;テンプレート (let
      ,(map (lambda (old-x x) `(,old-x ,x)) old-xx xx)
    ;評価した値 ( (g1004 x) (g1005 y))
         ,@(map (lambda (x e) `(set! ,x ,e)) xx ee)
     ;評価結果を挿入 (set! x 9) (set! y (+ y 1))
         (let ( (,result (begin ,@body)))
     ;ローカル変数g1006を定義 値は(+ x y)の評価値
           ,@(map (lambda (x old-x) `(set! ,x ,old-x)) xx old-xx)
       ;x yの値を戻す (set! x g1004) (set! y g1005) 
           ,result)))))
       ;resultを全体の評価とする

ここまで来るのに1時間くらい悩んだ。理解力の無さに凹む(^^;
※連続する括弧で囲まれた部分が脚注にされてしまう。Lispソースコード書くにはつらいです・・・

64bit CLR

「Josh Williams - Adventures in the 64bit CLR」より

Behavior of 1.0/1.1 managed apps on 64bit machines
64bit用の仮想マシンさえ用意すればJITの方で何とかしてくれると思っていたのですが、話はそんなに単純じゃないようです。P/Invokeやunsafeを使っている場合は仕方ないですが、そうでなければそのまま動作して欲しいです。

“Hey! I'm managed and I only run on x86!”

CLRv2.0でバイナリについて細かく指定できるらしいですが、C#インラインアセンブラでも書けるようにならない限り、これは嫌だなぁ・・・

Visual Studio 2005

MS、「Yukon」と「Whidbey」のリリース延期
Whidbey(VisualStudioの次期バージョン)のリリースが来年になったようです。海外のBlogをみていると結構波紋を呼んでいるみたいです。それだけ次のバージョンに取り入れられる機能が魅力的とも言えます。個人的にも残念ですが、それよりもMono1.2のリリースがどうなるのか気になります。.NET2.0よりも先にリリースしてしまいそう(^^;

なんか、Visual Studioから.NETの文字が外れるみたいですね。賛成。.NETがついているとWeb開発専用みたいなイメージがあって、開発者も混乱していたと思うので。