[golang] zeroformatterを作成してみる

お世話になっております。
しゃまとんです。

タイトルの通りですが、ZeroFormatterをGo言語で使えるようにしたかったので、作ってみています。

そもそもZeroFormatterとは何ぞやというところですが、infinityにFastなDeserializerです。
C#でserialize/deserializeを爆速で行えるようで、これはすごい・・・!と思った次第です。

詳細はgithubで。

そんなZeroFormatterはもちろんUnityでも使用することができます(zfc等の若干の利用手順があるっぽい)。作者のneueccさんが所属されているグラニさんで使われているはずなので、実績はこれから積まれていくでしょう。

現状、多言語対応は進行中(有志によって)なので、他言語で使いたい場合は待つか、フォーマットが公開されているので実装する必要があります。
golangでも誰かやってくれないかなーと思っていたのですが、いなかったのでやり始めてみたのがきっかけです。使えたら面白いんじゃないか的な。

対応状況はリポジトリを見ていただくのがいいのですが、ざっくりいうとプリミティブな型に関してはある程度対応するところまで出来ました。それと少しばかりのチューニングをし、ざっくりとしたベンチマークを取ってみました。

比較は日本でよく使われているっぽいMessagePackと。
ちなみにパッケージはvmihailenco/msgpackを使いました。

結果としてはMsgPackよりも処理速度はおよそ半分ぐらいになりました。今後の更新で変わるかもしれないのですが。。。

今後としては、本家がデシリアライズしない仕組みになっているので、こちらでいい感じに…は難しいので明示的にでもやれるようにしようかなと思っています。それとタグ指定で構造体の特定のプロパティのみ評価対象にできるようにしたいと思っています。

それとmapのシリアライズがMsgPackに比べて遅い感じがあるので、改善する予定です。
ということで報告みたいな感じですが、以上です。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です