[Gauche-devel-jp] Re: Gauche-zlib 0.1

Back to archive index

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
>



Gauche-devel-jp メーリングリストの案内
Back to archive index