機能強化とstructの超高速性能とFAQと。機能強化とstructの超高速性能とFAQと。16.11/14ほとんど昨日の今日な状態で1.3って、バージョン1.0とは何だったのか、というかそれってベータだったということなのでは?という、あまりにいい加減なバージョン番号付けなのですけれど、そんなわけで1.3です。これが本当の1.0だ......。Unity用シリアライザーを読んでいただければと思うのですが、では何が変わったかというと、ReadMeを全部書いた!いや地味に面倒なんですよ、分量あるし。いうのもあるんですが、方向性を若干変えました。なんというか、反響が思ったよりも良すぎた。Starも私的最高伸び速度最大をマークした)、のと、だいぶ気を良くしたので、ユースケースを変えたベンチマークを他にとってみたりして、改めて考えた結果「汎用的に全方位に使える最強シリアライザ」にすることにした。いうのが大きな方針転換。汎用シリアライザとしてビルトインでサポートしてる型を大幅に増やしました。constructorです。ようするに、普通に生活してて(?)出てくるほとんど全部の型がそのまま使えます。コレクション系を、普通に使ってても一切躓かないようにしました。Protoから引用してます。Protoは日本での知名度はゼロに近いですが、私は最初見た時かなり衝撃を受けました。Protoは素敵です)、という点を強く意識していたので、具象型(ListとかArray)だと、それが実現できないんですよね。却下にしてたのですけれど、「汎用シリアライザ」として使わせたいんだったらサポートしたほうがいいかな、と。シリアライズ/デシリアライズ速度が他を圧倒して超高速だったというのも決断を後押ししてます。これだけ速いんだから全然いいだろ、みたいな。structが超速いというか、これに関しては他が遅すぎるといったほうが正しいぐらい。intだけとかVector3とかそれの配列とか、HTMLぐらいを想定した大きめ文字列とかの結果です。文字列は結局UTF-8でエンコード/デコードするのはみんな変わらないのでそんなもんかってところですが、他が絶望的に違いすぎる。アホみたいに差が開いてるんですが、これは事実なんだなぁ。これは、小さいデータに関しての考慮が全然ないから、というのがめっちゃ大きい。そこからどれだけ「遅くするか」の勝負ですらある。他のシリアライザは、やってることがあまりにも多い、だから際限なく、最速から遠くなる。ZeroFormatterは限界まで無駄がない(実際、これ以上縮めようがない)ので、もんのすごく差が開きます。小さいデータだから一個一個は差がデカいといっても小さいとも言えるんですが、頻度が高いと馬鹿にならない差になります。いうかさすがにここまで違うと全然違うでしょう。小さいデータのやり取りって、ないようで結構あるんですよ。ウェブだったら、例えばMemcachedやRedisなどKVSへのアクセスでintだけ格納したりとかって普通によくある。ゲームだったら座標データ(Vector3)のやり取りとかね。ZeroFormatterはかなり価値あるかなー、と。Union型の追加なにそれ、というと、一個の型の表明で複数の型を返せるようになります。どちらかというとポリモーフィズムのほうが近いですかねー、実際C#でのデシリアライズ結果はポリモーフィズムとしての表現に落としているので。ド直球に言うとFlatBuffersにあるやつです。