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開発専用みたいなイメージがあって、開発者も混乱していたと思うので。