SyntaxHighlighter

2013年10月27日日曜日

SevenZipRuby - Ruby 用 7zip gem ライブラリ

SevenZipRuby - Ruby 用 7zip gem ライブラリ

Ruby の C 拡張機能や、 gem ライブラリ作成の勉強をしようと思ったので、 7-Zip のアーカイブを読み書きする拡張ライブラリを作成しました。
まだ開発中で、どこまで作り込むかは不明ですが、とりあえず GitHub に公開しました。
seven_zip_ruby にあるので、興味がありましたらご覧ください。

なお、 API の仕様などは、これから変更されていくだろうと思います。

そこまで深く調べていないので、似たようなライブラリが既にあるかもしれません。

サンプル

README.md にもありますが、以下のように使うことができます。ただし、これは 2013/10/27 時点での API に基づいています。

概要

オフィシャルにリリースされている 7-Zip の DLL である 7z.dll を内部的に呼び出しています。

7zip 圧縮などでは、マルチスレッドで動作します。このあたりの挙動は 7z.dll の挙動に依存します。

Windows, Linux で動作する (はず) です。 Mac OSX はいずれ対応するだろうと思います。

gem にしてありますが、 rubygems にはまだ登録してません。
やったことがないので、まだ方法もよく分かってませんが、いずれ登録します。

作成のポイント

7z.dll の API では、コールバック関数を DLL に登録し、それを適宜呼び出してもらうようになっています。
このコールバック関数の呼び出しは、場合によっては 7z.dll 内で生成された別スレッドから行われることもあります。
これは、 GIL や GVL と呼ばれる Ruby Interpreter の Mutex を持っていない状態でコールバックが呼ばれるということを意味します。
この動作に対応するのが面倒でした。

また、 C++ で作成したので、こちらもやや面倒でした。

これらについては、別途、まとめておこうと思います。

0 件のコメント:

コメントを投稿