From: UENO Katsuhiro Date: 2002-12-28T00:08:37+09:00 Subject: [ruby-dev:19216] Re: zlib うえのです。 On Sat, 21 Dec 2002 17:05:54 +0900 "Akinori MUSHA" wrote: > > bz2 のほうはすでに close!/close でリリースされていますが、Guy への > > 連絡をどなたかにお願いしてもいいですか? > >  finish() も追加されています。Guy とは話をしているのですが、 > 以下のような状況です。 snip.. > ほかにもバッファを掃くかどうかというのも絡んだりして、なかなか > 複雑です。 > > >  ということで、あとは ruby-core あたりで直接議論していただくのが > よいかと思います。 ええと、bz2 を読んだり、英語書こうとしたり、あれから色々考えては みたのですが、Guy は [ruby-talk:59847] みたいなことを言ってるし、 僕は僕で何だか頭の中がゴチャゴチャしてきました。 とりあえず今 zlib について思っていることを列挙しておきます。 - Ruby/zlib と bz2 はデータの圧縮/展開の機能を提供している という点では同じ。ただし設計の思想が根本から違う。 * Ruby/zlib は gzipped file の読み書きの他に deflate/inflate stream を提供している。両者は独立している。 bz2 は、ファイルの読み書きをするクラスが、ファイルではない データの圧縮/展開も行うようになっている。(引数無しのnew等) * Ruby/zlib は 1つのファイルには圧縮データが1つのみしか 含まれていないと仮定している。GNU gzip や zlib も然り。 bz2 は1つのファイルに複数の圧縮データが含まれていることを 前提に設計されている。 - 圧縮/展開ストリームは zlib や bzlib 特有のものと言って差し支えない。 もし bz2 がストリームを提供しているなら Ruby/zlib と bz2 の間で そのAPIを統一する必要があると思う。しかし bz2 はストリームを 提供していない。 - ファイルを読み書きするクラスは IO, File クラスと互換でなければ ならないと思う(*)。すなわち、zlib と bz2 はお互いの互換性よりも IO との互換性を重視するべきではないか。 (*) 具体的には、IO や File のインスタンスが要求されるメソッドに、 それらの代わりに GzipReader や GzipWriter のインスタンスを 渡しても正しい動作が期待できる、ということ。 - gzip, bzip2 フォーマット独自の部分は互換にすることはできないし、 1か多かという時点で Ruby/zlib と bz2 は異なっている。そもそも 両者を互換にすることはできない?(するべきではない?) -- ---- - - - -- - うえの かつひろ