トップ «前の日記(2003-03-06) 最新 次の日記(2003-03-09)» 月表示 編集

日々の流転


2003-03-08 [長年日記]

λ. gtk2 on cygwin

急に色々なところから注目されてビックリする。柴田さん、早田さん、CyGnomeのBiju G. C.さん、むとうさん、安部さん、たむらさん、どうもありがとうございます。

それから、スクリーンショットに足永さんのGImageViewの画像を加えてみたり。プラグインをDLL化したりとかは面倒そうだけど、バータリーになら簡単にコンパイル可能。

Tags: cygwin

λ. Rucheme / Scheme(subset) interpreter on Ruby

のコードを眺めていて、以前に書いたSchemeもどきのRougeを思い出す。当時はSchemeに関する知識も言語処理系の実装に関する知識もほとんど無かったこともあって、Rougeのコードは今見返すと随分ひどいなぁ。

しかし、末尾再帰の除去ってどうやって実装するんかな。うーん。しかし、properly tail recursive : 正しく末尾再帰を行う、という表現、なんか不思議。

SchemeをRubyで実装する場合、Ruby自身が末尾再帰の除去に対応していない以上、例えばトランポリンを使う形に変換するとか……(以下略)

Tags: ruby scheme

λ. OHMSS

って、「On Her Majesty's Secret Service」の略なのね。知らなかった。

λ. 読書

『ギルティギア イグゼクス アンソロジーコミック 1』
夏代篤志, 綾乃ゆうこ, あきづき弥, ふしみゆうり, 碧ぷに丸, ひせきりか, かんきりこ かわんちゃ かいぞく・さんた 水沢充 多田乃伸明, 山崎健一郎, 秋葉デンキ, NAO, 夢路きりこ, D・キッサン, 銭形たいむ [著]
Tags:
本日のツッコミ(全11件) [ツッコミを入れる]
ψ ささだ (2003-03-09 07:29)

はじめまして。とりあえず悩んでます。いかに楽に仕様準拠するか。というかマクロ無理っぽいです。面倒で。

ψ さかい (2003-03-09 19:17)

R5RSはそんなに大きな仕様ではないですけど、<br>真面目に準拠するのはやはり結構大変みたいですね。<br><br>私はマクロは_仕様を理解するのが面倒_という<br>実装以前の理由で諦めたヘタレなのですが、<br>やっぱり実装も面倒なのでしょうか?

ψ むとぽん (2003-03-09 22:39)

おーい、オレが忘れられてるよ〜(T_T) > gtk2 on cygwin

ψ なかだ (2003-03-10 02:08)

redoを使うとか。<br>とまったく見もせずに書いてみるテスト。

ψ さかい (2003-03-10 02:44)

や、申し訳ない。追加しときました。> むとうさん<br># 単にむとうさんの日記を見るよりも先に書いてしまっていただけなので、<br># 気を悪くしないで下さいね。<br><br>自己末尾再帰以外の末尾再帰をどうするかが問題ですが、<br>redoを使うというのも面白そうですね。

ψ ささだ (2003-03-10 05:36)

とりあえずやってみました。末尾再帰除去。いろいろアレでナニでいやーんなソースになりました。<br>redo はなんとなく嫌だったらしく使われませんでした。その代わり、遅い・・・。<br>マクロ、仕様を改めて見直したら、実装、なんか面倒そうですわ。でも、if と lambda だけになるのは魅力なんですけどねぇ>他をいろいろ考えなくていい。

ψ ささだ (2003-03-10 08:05)

ついでに、いまだにscheme/言語処理系の知識は十分でないです。私。処理系作ってると新たな発見があって面白い。って、長々と失礼しました。

ψ さかい (2003-03-11 11:35)

そうですね。<br>実装して初めて気付く事って結構ありますよね。<br><br>最近もCPL(Categorical Programming Language)という言語を<br>実装していたのですが、この時も随分勉強になりました。<br><br>そういえば、<br>Schemeでevalの引数に出来るのは式だけで定義等が許されない事も、<br>以前は不思議に思っていたのですが、<br>コンパイラの実装を考えれば自然な制約ですよね。<br><br>ところで、逆にこういった制約を持たないrubyは<br>やっぱりコンパイラには向かないんじゃないかとも少し思ったりしますが、<br>どうせevalは特別扱いしなくちゃいけないだろうから、<br>ひょっとしたらあまり関係ような気もするし、どうなんだろう……

ψ ささだ (2003-03-11 17:50)

eval って定義(define) 駄目なんですか。知らなかった。仕様読んで無いじゃん、私。コンパイラにそんなに向かないものなんですか。

ψ さかい (2003-03-12 02:36)

evalの説明に以下のような下りがあるので、定義を許す必要は無いというだけで、別に許したって構わないと思います。<br><br>Expression must be a valid Scheme expression represented as data, and 〜. Implementations may extend `eval' to allow non-expression programs (definitions) as the first argument and 〜<br><br>それから、これは想像なので間違ってるかもしれませんが、例えば以下のtest関数内のfooの部分のコードを生成する場合を考えるとどうでしょう?<br>evalが定義を許さない場合は、トップレベルの環境から値を参照するようなコードをあらかじめ生成できますが、evalが定義を許す場合には実行時に環境を探索するかあるいは...<br><br>(define foo #t)<br><br>(define (test x)<br> (eval x)<br> foo)<br><br>(display (test '(define foo #f)))<br>(display "\n")

ψ ささだ (2003-03-13 15:54)

げ、definitions って non-expression だったのか!(駄目じゃん俺・・・) lambda のシンタックスシュガーだと思ってました。あぁ、駄目駄目。たしかに define には syntax とか書いてなかったから不思議だとは思ってたんですが(誤記だと思っていた(笑))。たしかに読み返すと別物って書いてある。じゃぁ、なんだろ。正直、lambda による変数のバインドと define によるバインドの違いがわかっておりません。5.2.2 にletrec と等価とは書いてあるけど。ふーむ。トップレベルの環境を形成するためには define しかないという意味か。環境セットアップのための便利な書き方って意味くらいしかないんだろうか。うーん。<br><br>(let ((define +) (a 1))<br> (define a 2))<br>;=> 3<br>なんてソースは通るし(これは、シンボルの解釈の順序の問題か・・・)<br><br>eval 中のコンパイルについては、たしかにうざったいですね。eval 外が eval内に影響を受けるようなことを考えていませんでした。<br><br>; と、また長々とお邪魔しました。