Rui Ueyama
rui31****@gmail*****
2006年 1月 17日 (火) 18:45:28 JST
Shiroさん、コメントありがとうございます。 モジュール名はrfc.zlibにすることにし、テストはforkを避けることに します。 コンディションなんですが、Scm_RaiseConditionでは合成コンディ ションを投げられないですよね。zlibモジュールでは破損したデータ の読み出しの際に<io-read-error>と<zlib-data-error>の合成コン ディションを投げることにしているのですが、Scm_RaiseCondition のAPIでは合成コンディションが扱えないように見えたので、使おう と考えませんでした。 Scheme側で定義したコンディションの合成コンディションをCコード から投げるには、(1) Scm_Applyを使ってmake-conditionで必要な コンディションを作成、(2) Scm_MakeCompoundCondition()で合成 コンディションにまとめ、 (3) Scm_Raise()で投げるのがいいんでしょ うか。 On 1/17/06, Shiro Kawai <shiro****@lava*****> wrote: > 素晴らしい。 > zlibはずっと欲しかったのに他の作業に追われて手をつけられて > いなかったのです。 > > 3点ほどコメントです。 > > * モジュール名は一階層挟みたいですね。以前はutil.zlibを考えて > いたのですが、フォーマットがRFCになっているのでrfc.zlibもあり > かもしれません。 > > * ユニットテスト中で一箇所、forkしていますが、子プロセスの方の > 後始末をしていないので、シェルから走らせると子プロセス側で > エラーが出ます。単純なfixとしてはこんな感じ: > > --- test.scm.orig 2006-01-16 22:25:38.000000000 -1000 > +++ test.scm 2006-01-16 22:50:01.000000000 -1000 > @@ -153,7 +153,10 @@ > (test* "port-file-number" 'ok > (receive (in out) (sys-pipe) > (if (zero? (sys-fork)) > - (port->string in) > + (begin > + (port->string in) > + (close-input-port in) > + (sys-exit 0)) > (let1 p (open-deflate-port out) > (begin0 > (when (number? (port-file-number p)) > > ですが、forkは何かとトリッキーなので必要が無ければ避けた方が > いいかもしれません。このテストのケースなら、普通のfile portを > オープンしてそれをopen-deflate-portに渡しても良い気がします。 > > * <zlib-error>等の例外をC側で定義してありますね。それはそれで > 構わないのですが、最近追加したAPIであるScm_RaiseConditionを > 使うとCから直接Schemeで定義したコンディションを投げられるので、 > コードがよりスリムになるかもしれません。APIはGaucheのsrc/error.c > を見てください。 > > --shiro > > _______________________________________________ > Gauche-devel-jp mailing list > Gauch****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp >