こんばんは、川合です。 例によってbim2binのバージョンアップです。さらにまたフォーマッ トをいじってしまったという(情けない)特典付きです。 今回の改善点は主にOSASK-Wikiのtek1/adv2で説明したアルゴリズム をtek1〜tek3に取り込んだことです。しかし今回はtek3には一通り組み 込めましたが、tek1とtek2に関しては展開ルーチンしかできていません 。圧縮ルーチンができてないのでテストのしようがなく、展開ルーチン は本当にこれでいいのかすら実はよく分かりません。 こんな状態なのですが、いつまでもbim2binをいじってばかりはいら れないので、OSASKにtek1〜tek3のサポートを組み込む作業をはじめま す。tek0が推奨されなくて、かといってtek2はOSASKでは自動展開して くれない、という現在の状況はかなり不健全です。もうtek1〜tek3のフ ォーマットをいじる気はなくなったので、OSASKに組み込むべき時期に きました(いじる気がなくなったというよりは、疲れ果てた、という感 じかもしれませんが・・・ああもちろん、もういじる気がないとは言っ ても、バグがあればそれは直します)。LZMAがすごくいいので、数年後 とかにこれをosacmpに取り込むときにまたがんばればいいでしょう。 http://k.hideyosi.com/bim2bi4i.lzh (91.9KB) ああそうだ、tek3そのものについてもまだ説明していませんでした。 tek3については、 http://wiki.osask.jp/?tek3 の説明を見てください。LZO風の「圧縮率は結構悪いけど、とにかく展 開速度は劇的に速いよ」の圧縮符号です。展開ルーチンが非常に簡単な のも特徴の一つです。LZOをそのまま使うことも考えたのですが、自作 のtek3の圧縮率のほうがよかったので(そして展開速度でも十分だった ので)、LZOは使わずにtek3を使うことにしました。 改定された圧縮率表については、次のページを参照してください。 http://wiki.osask.jp/?tek1/comp tek3の展開速度がtek1などとくらべてどのくらい速いかは、 http://wiki.osask.jp/?room/000 の6/9の表などを見てください。そこを見ると分かりますが、tek0は LZMAに準ずる展開速度のくせに、圧縮率はtek1にも及ばないわけで、「 割の合わない」フォーマットであるといえます。bzip2もLZMAと比べると 割の合わないフォーマットです。 同様にtek3もLZOと比べるとやや割の合わないフォーマットのように 見えるのですが、これはosaskgoに限ったことで、全体的な傾向として は、上記のtek1/compのページで圧縮率を比較すると、そう問題はない ということが分かります。 --- さてbim2bin4iですが、まず、-tek3オプションが追加されました。デ フォルトは今も-tek2なので、tek3にしたい場合は、-tek3を付けてくだ さい。 また今回、stk1〜stk3というtek1〜tek3のサブセット仕様を提案しま した。これはtek1〜tek3のいろいろな自由度をあえて固定することで、 展開ルーチンを短くした例です。stk1とstk2はあと数十行を書き加える と符号寿命もサポートできるので、そっちのほうがよかったかもしれま せん(それで圧縮率は結構上がりますし)。気が向いたら、符号寿命を 入れた形に改定します。tek3はフルセット版でも符号寿命という概念が ないので、stk3はもうこれでよく、ほぼ確定でしょう。 いずれにしても、サブセットは下位互換があるので、サブセット仕様 のものであってもかならずフルセット版で展開できます。サブセット版 は展開ルーチンがコンパクトでないと困る状況のときに使うといいでし ょう(自己展開ルーチンとか)。そして、ユーザは、サブセット版しか 展開できないツールで使うかもしれないときは、圧縮するときにサブセ ット指定をして、その心配がないときはフルセットで圧縮すればいいで しょう。 またnum128というのは0000〜FFFFが順番に入った128KBのファイルな のですが、そのようなファイルをBS:0、MD:0、clv:9のtek3で圧縮して も、ぜんぜん40バイトにはなりません。これはどういうことだ、と思う でしょうが、なにはともあれ、bim2binでomakeディレクトリの40バイト のnum128.tk3を展開させると、ちゃんと128KBのデータが出てきます。 このnum128.tk3をどうやって作ったのかというと、hintファイルとい うものを使って、この範囲はこうやって差分をとるとうまくいくからや ってごらんと、bim2binに教えてやらならないといけないのです。全自 動でこれを大雑把にやることもできるのですが、そんなことにいつまで も開発時間をかけているわけには行かないので、とりあえず今回はパス しました。 >bim2bin -osacmp -tek3 clv:4 BS:0 in:num128.org out:num128.tk3 hint:num128.hin とすればうまくできます。このhinファイルもomakeの中にありますが、 その文法を説明するのは面倒になったのでまたの機会に。 --- 最後にdtk2s、dtk3s、dtkfについてです。これらはbim2binの展開ル ーチンだけを切り出したもので、OSASK以外のOSに自動展開サポートを 持たせたい場合のために準備したものです。このライブラリを使った サンプルもいっしょにありますので、必要な人は眺めてみてください。 さっきもちょっと書きましたがstk1/stk2は暫定仕様なので、stk2sは 数日中に改定する可能性があります。 圧縮ルーチンはこんな風にまとめないのかという質問が来そうなので 先回りしておきますが、今の圧縮ルーチンは(先日やっと圧縮速度が改 善したとはいえ)我ながら駄作で、はっきり言ってアルゴリズムからし て作り直したほうが、もっと圧縮率は上がるし、圧縮速度も上がりそう です。ということでこんなタコルーチンを他の人が流用しないようにす るためにも、今使っているルーチンの切り出しは予定していません。 ぜひ僕に代わってもっといいルーチンを書いてください。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! osask.jp Homepage http://osask.jp/