近頃盛り上がっているmsgpackの話題についてです。文字列型の追加について事の発端はこのIssue。https://github.com/msgpack/msgpack/issues/121「Pythonのライブラリでpackしたデータをunpackしたら元のデータと違うデータになった」というIssueです。これは、Pythonのユニコード文字列をpackしていますが、msgpackには文字列という型はないので、戻せなかったことが原因です。上記のIssueは、msgpack自体の仕様というよりは、ユニコード文字列を受け取って変換していたPython版ライブラリのバグといえるでしょう。msgpackはさまざまな言語が相互にやりとりするために考案されたものなので、基本的な型だけを定義しています。文字列はRawというバイナリ列に格納されます。文字列はバイナリ列の一種なので、バイナリ列のコンテナがあれば、文字列はそこにそのまま入れることが出来ます。msgpackが文字列型を定義しなかったのは相互運用性のためには当然かと思います。PHPやPython2では、文字列もバイナリ列も同じ型です。(Pythonは別途ユニコード文字列はありますが、通常の文字列はバイナリ列と同じです)多様な言語が存在するので、もし仮に文字列型を定義していた場合、言語によっては「データを文字列型とバイナリ列型のどっちにいれていいか分からないよ!」となってしまいます。msgpackのデータを受け取り、そこから、その言語の文字列型としてデータを取り出したい場合は、アプリケーションが自分で変換する必要がありますが、会話しているアプリケーション同士は、データが何であるかは知っているので、アプリケーションが変換すればよいのです。ところが、それが面倒なので、やはりライブラリ側で変換してよ、という要望が出てきました(過去にもあったようです)。さんや各言語のライブラリ作者の方々は、上記のような理由から文字列型がない理由や、文字列型を追加した場合の問題・課題を説明しますが、やはり文字列型が欲しいという強い要望もあり、検討に入りました。ここで、一部の人が「文字列のエンコード・デコードなんて20行で書けるだろ。それが出来ないならコードなんて書くな!」「bullsh*t」「f*ck」のような暴言を吐いたことも、炎上の一因とも言えます。さんに対して敬意を欠いた暴言を見るにつけ、ついついコメントをしてしまいました。(なお、僕はmsgpackのユーザであり、開発者ではありません)「文字列型があると便利だと思う。文字列とバイナリ列を区別しない言語もある。要は、文句ばかりいってないで、相互運用性と互換性維持を考えた仕様を出せよ、と。ガン無視でした......。「仕様とか分からなけど、とくかく文字列型を追加すればいいんだよ!」ということですか、そうですか。提案するコメントがあったので、僕は「後方互換性は壊さないで欲しい。※BinaryPackはmsgpackの派生で、文字列型が追加されていますが、互換性がありませんこの時、僕がすぐに考えたのは、以下の様な仕様でした。32で文字列を埋める。文字列をサポートしないライブラリは未知の0xC1をスキップし後続をRawとして扱うように動けば大丈夫なはず。エンコーディング情報は入らないのでUTF-8固定。さんや各言語のライブラリ作者で議論して、いくつかの提案がなされています。いずれにせよ、後方互換性は守られそうなので、ひとまず安心しているところです。仕様については、こちらで議論されています。https://github.com/msgpack/msgpack/issues/128IETFについてさて、この話題にはもうひとつの側面があり、それはIETFです。format」のドラフトが投稿されています。http://tools.ietf.org/html/draft-bormann-apparea-bpack-00ここに、MessagePackとMessagePackの派生であるBinaryPackの名前が出てきます。さんという方によるものです。知らぬ間に行われていました。msgpackはオープンソースで派生するのは自由なので、それ自体はありかなと思います(もちろん、事前に話があったほうがいいとは思いますが)。msgpack自体の標準化ではなく、JSON関連の標準化の一部のようです。仕様が標準化されるのはメリットがあると思いますが、GitHubで文字列について議論している段階でIETFでも仕様について議論が並行するとなると、いろいろ問題がありそうだ、ということで問題になっています。コミュニティ側とIETFで仕様が異なったらどうするの?IETFの議論に参加するには時間もコストもかかりそうで困るといったところです。IETF問題は今も継続していますが、僕が見た範囲でのコミュニティ側の空気としては「IETF自体には反対でもないが、いまは新仕様を議論しており、時期尚早である」というところかなと思います。さんによる新しいIssueも登録されました。さんからガイドラインも提示されているので、日本人以外の人からも含めて、総ツッコミされています。さんがコントロール出来る状態になればいいかなと思っています。要は、仕様は決めていくから、あとはそのままIETFに投げてくれって方向で。今後どうなるんでしょう......。