MessagePack 0.2.2 リリース - Rubyゼロコピー化, mswin32版

バイナリシリアライズ形式「MessagePack」のバージョン0.2.2をリリースしました。

Ruby版で文字列をデシリアライズするとき、必ずしもコピーしなくなりました。文字列のデシリアライズが大幅に高速化しています。


また mswin32 版と mingw 版の ruby で MessagePack を使えるようになりました。gem install msgpack でインストールしてください。

require 'msgpack'
serialized = {"method" => "Get", "id" => nil, "params" => ["it", 0, 50, false]}.to_msgpack
p MessagePack.unpack(serialized)  #=> {"method" => "Get", "id" => nil, "params" => ["it", 0, 50, false]}

mingw でコンパイルした gem を mswin32 に偽装する

Visual C++ で MessagePack をコンパイルするのが大変そうだったので (^_^; ちょっとした hack で mswin32 版を作ってみました。私の環境ではちゃんと動いているので多分大丈夫です。
mingw で gem をコンパイルし、出力されたパッケージをいじって mswin32 版に偽装しています。

  • msgpack.gemspec ファイルを作る ※
  • mingw 環境で gem build msgpack.gemspec
  • tar xvf msgpack-0.2.2-x86-mingw.gem
    • data.tar.gz と metadata.gz が展開される
    • data.tar.gz はパッケージ本体
  • gunzip metadata.gz
  • metadata を書き換える
  • gzip metadata
  • tar cvf msgpack-0.2.2-mswin32.gem data.tar.gz metadata.gz


※msgpack.gemspecの内容:

Gem::Specification.new do |s|
  s.platform = Gem::Platform::CURRENT
  s.name = "msgpack"
  s.version = "0.2.2"
  s.summary = "MessagePack"
  s.author = "FURUHASHI Sadayuki"
  s.email = "frsyuki _at_ users.sourceforge.jp"
  s.homepage = "http://msgpack.sourceforge.jp/"
  s.require_paths = ["lib", "ext"]
  s.files = ["lib/**/*", "ext/**/*"].map {|g| Dir.glob(g) }.flatten
end