肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

MessagePack ハッカソン 第2回に参加してきた

お久しぶりです。
今日は MessagePack Project のさらなる発展のためのハッカソン(?)に参加してきました。

自分は、「PHP拡張機能作る」のが目標でした。*1
いや、実は、MessagePackがリリースされた当初から言っていたのに、なんかグダグダしているうちに2つほどすでに実装があるという状況で、とはいえ、どちらにも今のところろ課題があるので、提案されてる実装から、より良いものを作る+peclでの公開を目指す、ってところが実際の目標ってところでしょうか。
とはいえ、拡張機能とか作ったことがないので、昨日からちょいちょい予習しつつ、今日、参加してきました。

で、まあ細かいことはともかく、PHPに関して言えば、

  • 今headに入っているバージョン では、unpacker が Unbuffered しかない。(+グローバルにバッファをもつ)のが嫌だ
  • 提案されているバージョンでは、実装が pack_templateやunpack_templateというMessagePack側から提供されているマクロを使わずに実装している
    • が、PHPのセッションシリアライザに指定できるのが良い。
    • Unpacker が Buffered API を提供してるのが良い

あたりの良いところをとって実装できないかなーと考えていました。

それと、オブジェクト(クラス)のpackに関しては、他の言語間との互換性やプロトコルに準拠する意味で、プロパティ名を持たない、ただの配列としてpackする方向で実装の変更を行うことにしました。unpack時に取り出される順番に応じてプロパティに詰め込むなど、運用でカバー。PHPだけでpack/unpackするだけなら、serializeと同じような挙動で良いんですけどね。

で、実装できたところは、

  • オブジェクトのpackの実装変更
  • その他pack実装のリファクタ
  • unpackerのクラス設計

unpackerは実装は全然すすみませんでした。。うーん、まあ、予想通りかな。ただまあ、イメージは湧いたので、地道にがんばろう。

これからの予定など

  • unpacker 全般
    • MessagePackUnpacker の実装
    • MessagePackIterator の実装
  • テスト書く

最後に

会場をかしてくださった楽天のみなさま、古橋くん、お疲れ様でした。
楽しかったです!

*1:いや自分なんかになにができるかわからないよーショボプログラマでごめんよ、という点はあったのだが、少しでもなにかやりたいなーと思って。