こんばんは、川合です。 bim2bin4pができたのでMLリリースします。 今回のバージョンアップのポイントは、tek5周りの拡張です。今まで はstk5レベル(つまり僕が考えた仕様全部ではなくサブセット)でしか なかったのですが、今回はアイデアをもっとたくさん反映しました。し かしまだ全てではありません。まだたくさんあるのですがそれらは補助 的なもので、一部のファイルを除いてはあまり劇的には効かないと思う ので、このバージョンでたいていの場合は、tek5のベストになるはずで す。 http://k.hideyosi.com/bim2bin4p.lzh (175KB) とりあえず、使い方を説明します。まず、相変わらずtek5圧縮には t5lzmaが必要なのですが、これは昨日(というかまあ本日なのですが) リリースした最新版を使います。旧バージョンと組み合わせるとうまく いきません。 prompt>bim2bin -osacmp -tek5 in:ファイル名 out:ファイル名 これで、早速今回のtek5をいち早く体験できます。デフォルトでは、 stk5互換ではなく、tek5の機能を全部活用しようとします。展開のほう は今までどおり、-restoreだけで十分です。 stk5互換の出力を得るためには、 bim2bin -osacmp -tek5 eprm:z0 in:ファイル名 out:ファイル名 と、eprmオプションを併用します。z0というのがstk5互換で、z1が小規 模・中規模ファイル用オプション、z2が大規模ファイル用オプションで す。z0ですと、圧縮も展開も比較的高速です(といっても従来程度です が)。デフォルトはz2です。なお、bim2binのrestore用の展開ルーチン は速度が出るようにはなっていないので、多分bim2bin4oと比べても stk5の展開速度に関しては遅くなっていると思います。 速度最適化を施したASKA版展開ルーチンは現在開発中で、たぶんこれ は今までの展開ルーチンよりも若干速いと思います(stk5の場合)。 しかしtek5モードは本質的にstk5よりも複雑なので、stk5モードよりは 多少速度が落ちると思います。 圧縮時には、従来どおり、eoptオプションも使えます。効果も今まで どおりです。eprmとの併用も可能です。ただし、t5lzmaの改良により、 デフォルトがpb0、lc0になっているため、このような設定ならeoptを書 かなくてもよくなっています。 -osacmpではなくて、リンク時にlcパラメータをいじる場合の最低ス タックサイズが、z1やz2のときは違います。z0の場合は従来どおりです 。これについてはbim2bin4pのドキュメントを見てください。 また、eprmにz2を指定した場合、さらにd、e、f、g、hのオプション を追加して、さらに圧縮率を上げられます。これらのオプションは展開 時のメモリ消費量とは関係ありませんし、展開速度にもほとんど影響し ません。これらのオプションについても、詳細はbim2bin4pのドキュメ ントを見てください。 おまけでついてくるtek/stk展開ライブラリですが、仕様が変わりま した。といっても、関数名が少し変わっただけですが。 旧:tek1_checkformat → 新:tek_checkformat 旧:tek1_decode → 新:tek_decode 他の仕様は全く変わっていません。 またstk5の展開ライブラリについては、今まではLZMAのものを流用し ていましたが、今回はLZMAのアルゴリズムを完全に把握したこともあっ て、全部書き直してみました。これで行数が417→321と激減しています 。ちなみにtek5の展開ルーチンは、528行です(註:もちろんこれは stk5も展開できる)。 --- さて、tek5がどのくらい改善したのかを紹介したいと思います。 stk1 stk2 stk5 LZMA tek5 PAQ hellok1 144 135 126 121 124 116 bim2binc 17166 16323 12716 12708 12582 9215 kdun00b 49855 46794 33582 34037 32945 29157 osaskgo 1274931 1172344 942375 942369 936928 748512 osaskbmp 7740 7135 3988 4236 3744 2429 (註:kdun00bとosaskgoは、OSASK-Wikiでの結果との整合性のために あえてrjc:0で圧縮しています。) stk1 stk2 stk5 LZMA tek5 PAQ hellok1 124.1 116.4 108.6 104.3 106.9 100.0 bim2binc 186.3 177.1 138.0 137.9 136.5 100.0 kdun00b 171.0 160.5 115.2 116.7 113.0 100.0 osaskgo 170.3 156.6 125.9 125.9 125.2 100.0 osaskbmp 318.6 293.7 164.2 174.4 154.1 100.0 特に注目してもらいたいのは、親であるLZMAとの関係です。stk5と LZMAを比べると、stk5は2勝3敗なので、LZMAに負けている数のほうが多 かったのです。もちろん、ワースト値を下げるということのほうが重要 だと僕は考えていますから、これはそれほど重大な問題ではありません 。でもやはりちょっとくやしいです。 しかしLZMAとtek5を比べてみてください。ヘッダのオーバーヘッドが 大きいtek5は、hellok1でこそ負けているままですが、他では十分な差 をつけて勝っています。 また、こんな問題も解消しました。先日ベータリリースした twitch3a.sarではこんな情けないことが起きていました。 無圧縮 stk2 stk5 tek5 81379 80229 80421 79590 (0) (1150) (958) (1789) ← 無圧縮との差 zero4kやzero64kなどのごくごく簡単な内容のファイルでもないのに、 stk5よりも、stk2のほうが圧縮率が良かったのです。しかしtek5では、 こんな情けない逆転現象は起きずに、stk2の結果をきれいに抜き去って います。ちなみに、このstk5の結果はLHAよりも悪い結果です。同様の 問題はLZMAに由来しており、LZMAもstk5くらいの圧縮率しか出ません。 今度は毎度のinvader5です。 stk5 : 1179バイト tek5 : 1160バイト ということで、19バイトも小さくなります。これは1.6%の縮小です。 このtek5があれば、10/24の1024バイトコンテストも、それなりに楽 ができるのではないかと思っていまして、だからOSASK ver.4.7のベー タリリースくらいは、10/24に間に合わせたいと思っています。 その他にも、たとえばOSASK/ATにバンドルしている全角フォントが 1KB以上も小さくなるとか、いろいろ確認が取れています。ASKA版の展 開ルーチンができて、OSASKに搭載するのが楽しみです。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! osask.jp Homepage http://osask.jp/