æŠèŠïŒ
- çŸè¡ã®RawåãStringåãšããŠèªã¿æ¿ããã
- çŸè¡ã® FixRaw, raw 16, raw 32 ã¯ãFixString, string 16, string 32 ã«ãªã
- Binaryåãæ°èšããã
- ãã€ãåã¯Binaryåã§ä¿åãããããã§ãªããã°Stringåã§ä¿åããã
æååãšãã€ããªã®åºå¥ãææ§ãªèšèªãååšãããäŸãã°ïŒ
- æååãšãã€ãåãåºå¥ããåãããããç¡ãèšèªïŒPHP, C++, Erlang, OCamlïŒ
- æååãè¡šãããã«ãã©ã°çã®ä»å æ å ±ã䜿ãããããæååãªã®ã«ä»å æ å ±ãä»äžãããŠããªãã±ãŒã¹ãäžè¬çã«ååšããèšèªïŒRuby, Perl, Python 2ïŒ
ãããã®èšèªã weak-string languages ãšåŒã¶ã
äžæ¹ã§ãåºå¥ãæ確㪠dynamically-typed languages ãååšããïŒJavaScriptãObjective-CãPython 3ïŒããŸããåºå¥ãæ確㪠statically-typed languages ãååšããïŒJavaãC#ãScalaïŒããããã®èšèªã strong-string languages ãšåŒã¶ã
strong-string and dynamically-typed languages ãåä¿¡è ãšãªã ãªããžã§ã¯ãã®ãããšãã§ã¯ãæååãšããŠéä¿¡/ä¿åããããŒã¿ãæååãšããŠããã€ãåãšããŠéä¿¡/ä¿åãããã€ãåããã€ãåãšããŠãééçã«åŸ©å ããããšããèŠæ±ãååšãããïŒâ»ãã®èŠæ±ã¯ããã®ä»ã®çµã¿åããã®éä¿¡ã§ã¯ååšããªãïŒ
äžæ¹ã§ãweak-string languages ã§ã¯ããã¹ãŠã®æååã«å¯ŸããŠãããã¯æååã§ããããšããŒã«ãä»äžããããããã¯ãã¹ãŠã®ãã€ãåã«ãããã¯ãã€ãåã§ããããšããããŒã«ãä»äžããäœæ¥ã¯æéãããããåŸã£ãŠãããã®èšèªã§æžãããããã°ã©ã ã§ãæååãšãã€ãåãæ確ã«åºå¥ã§ããããšãæåŸ ããããšã¯çŸå®çã§ã¯ãªãã
ããã§ã次ã®ã¡ãªãããåæã«æºããå€æŽãææ¡ããïŒ
- strong-string languages å士ã®éä¿¡ã«ãããŠã¯ãæååãæååãšããŠããã€ãåããã€ãåãšããŠééçã«åŸ©å ã§ããããã«ãã
- weak-string languages ãš strong-string languages ãæ··åšããå Žåã®ããŒã¿äº€æã§ã¯ïŒ
- weak-string languages ã«ãããŠãã¹ãŠã®ãã€ãåã«ããŒã«ãä»ããäœæ¥ãè¡ãã°ãstrong-string languages ã§ééçã«åã埩å ã§ããããã«ãã
- ãã¹ãŠã®æååã§ã¯ãªããã¹ãŠã®ãã€ãåã«ããŒã«ãä»ããã®ã¯ããã€ãåã®æ¹ãæååããæ°ãå°ãªãããã®äœæ¥ã®æ¹ãç°¡åã ãšããä»®å®ã«åºã¥ããŠãã
- ããã§ãªããŠããstrong-string languages åŽã®ã¢ããªã±ãŒã·ã§ã³ã§é©åãªå®è£ ãè¡ãã°ãééçã§ã¯ãªããããŒã¿äº€æãè¡ããããã«ãã
- weak-string languages å士ã®éä¿¡ã§ã¯ãæ¢åã®msgpackãšã®äºææ§ãç¶æãã
- Binary: ãã€ãå
- String: UTF-8ã§ãšã³ã³ãŒããããæåå
- UTF-8ãšããŠinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãæååãä¿åãããŠããããšãããããã®çç±ã¯æ¬¡ã®3ã€ïŒ
- Unicodeã¯ããã®æ£ããåãæ±ããmsgpackã®å šèšèªã®å®è£ ã«ãããã«ã¯ãè€éããããã
- ã·ãªã¢ã©ã€ãºæã«validateãè¡ããšæ§èœã«ã€ã³ãã¯ããããããïŒstrong-string languages ã§ãã£ãŠããUTF-8ãšããŠinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãæååãªããžã§ã¯ããç°¡åã«äœããèšèªãååšããããšã«æ³šæïŒäŸ:Python2ïŒ
- weak-string languages ã§æžãããããã°ã©ã ã§ã¯ãæååãšãã€ãåãæ確ã«åºå¥ã§ããããšãæåŸ ããããšã¯çŸå®çã§ã¯ãªããçµæãšããŠãã€ãåãStringãšããŠæ±ãããããšããããã
- invalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãæååãæ€åºããå Žåã®åäœã¯ãå®è£
ã«äŸåãã
- ãã ããinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãæååãã©ã®ããã«åãæ±ããã¯ãã¢ããªã±ãŒã·ã§ã³ã決å®ããã¹ãä»äºã§ãã
- UTF-8ãšããŠinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãæååãä¿åãããŠããããšãããããã®çç±ã¯æ¬¡ã®3ã€ïŒ
UTF-8ãšããŠinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãStringãåãåã£ãå Žåã®åäœã¯å®è£ ã«äŸåãããäŸå€ãçºçãããŠåŒŸãå®è£ ãè¡ã£ãŠãè¯ããããã®å Žåã«éããã€ãååãè¿ããšãã£ãå®è£ ã§ãè¯ããããããUTF-8ãšããŠinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãStringåãªããžã§ã¯ããä¿åãããŠãããšããŠããã¢ããªã±ãŒã·ã§ã³ãæãã°å ã®ãã€ãåãåãåºããããã«ããæ段ãæäŸããããšãã匷ãæšå¥šãããïŒSHOULD or MUSTïŒã
0xa0-0xbf FixString (0bytes - 31bytes String type) // changed
0xd5 binary 8 (0bytes - 255bytes Raw type) // new
0xd6 binary 16 (256bytes - 65535bytes Raw type) // new
0xd7 binary 32 (65536bytes - 4294967295bytes Raw type) // new
0xd8 reserved
0xd9 string 8 (32bytes - 255bytes String type) // new
0xda string 16 (256bytes - 65535bytes String type) // changed from raw 16
0xdb string 32 (65536bytes - 4294967295bytes String type) // changed from raw 32
-
ã·ãªã¢ã©ã€ã¶ïŒ
- ãã€ãåã¯BinaryåãšããŠä¿åãã
- æååã¯StringåãšããŠä¿åãã
- ãã ããæ¢åã®å®è£ ãšã®äºææ§ãç¶æããããã«ããã€ãåãStringåãšããŠä¿åãããªãã·ã§ã³ãå®è£ ããŠãè¯ã
-
ãã·ãªã¢ã©ã€ã¶ïŒ
- StringåãŸãã¯Binaryåããã·ãªã¢ã©ã€ãºãããããããšåãããªããžã§ã¯ããè¿ã
- Stringåã«UTF-8ãšããŠinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãŸããŠããå Žåã«ãã¢ããªã±ãŒã·ã§ã³ããããããã³ããªã³ã°ã§ããããã«ããæ©èœãæäŸããã¹ãã§ããïŒSHOULDïŒ
- ãã®å®è£
æ¹æ³ã¯ç¹ã«èŠå®ããªãã次ã®ãããªæ¹æ³ãèããããïŒ
- invalidãªãã€ãã·ãŒã±ã³ã¹ãçºèŠãããããã®ãªãªãžãã«ã®ãã€ãåããã£ãŒã«ãã«æã€ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãè¿ã
- invalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãããšãã§ããæååã¯ã©ã¹ãçµã¿èŸŒã¿åãšã¯å¥ã«äœæããinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãŸãããåŠãã«é¢ããããåžžã«ãããè¿ãã¢ãŒããå®è£ ãã
- invalidãªãã€ãã·ãŒã±ã³ã¹ãçºèŠãããæå®ãããŠããã³ãŒã«ããã¯é¢æ°ãåŒã³åºãããã®é¢æ°ã®è¿å€ãè¿ã
- ã·ãªã¢ã©ã€ã¶ïŒ
- ãã€ãåãæååããèªæã§ãªããã°ãStringåãšããŠä¿åãã
- UTF-8ã®validationã¯è¡ããªããŠãããStringåã¯UTF-8ãšããŠinvalidãªãã€ãã·ãŒã±ã³ã¹ã蚱容ãã
- ãŠãŒã¶ãŒãæ瀺çã«ãããã¯ãã€ãåã ããšãã³ããèšå®ãããªããžã§ã¯ããåãåã£ãå Žåãããã¯BinaryåãšããŠä¿åããã¹ãã§ããïŒSHOULDïŒ
- ãã·ãªã¢ã©ã€ã¶ïŒ
- Stringåã®validationãè¡ãã¹ãã§ã¯ãªãïŒSHOULD NOTïŒ
- ãªããªããã¢ããªã±ãŒã·ã§ã³ãinvalidãªãã€ãã·ãŒã±ã³ã¹ãå«ãStringã®æ±ãã決ããã¹ãã ãã
- ãã ãããªãã·ã§ã³ãæå¹ã«ããã°Stringåã§validationãæ©èœãå®è£ ãããŠãããïŒMAYïŒ
- Binaryåãåãåã£ãå Žåãäœããã®ãã©ã°ãç«ã£ãïŒStringåãšã¯åºå¥ã§ããæ
å ±ãå«ãïŒãªããžã§ã¯ããè¿ããªãã·ã§ã³ãå®è£
ããŠãè¯ãïŒMAYïŒ
- ãã®æåã¯ãMessagePackãå ¥åãšããŠãMessagePackãåºåãããããªãäžéåŠçãè¡ãããŒã«ã§ãåºåå ã§ãåæ å ±ãç¶æããªããã°ãªããªãã±ãŒã¹ã§å¿ èŠã«ãªã
- ãã®æ©èœãå¿ èŠãªã±ãŒã¹ã¯ãçšã§ãã
- å®è£ ã®æ¹æ³ã«ã¯ãäŸãã°PHPã«ãããŠã¯ãç¹å®ã®ãªãã·ã§ã³ãonã§ãã£ãããBinaryåãåãåã£ãå Žåã«ããã€ãåããã£ãŒã«ããšããŠææããMessagePackBinaryã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãæ¹æ³ãã
- Stringåã®validationãè¡ãã¹ãã§ã¯ãªãïŒSHOULD NOTïŒ
- ãã€ããŒããŒãžã§ã³ã¢ããã§ãæ°èšãããBinaryåããã€ãåãšããŠè¿ãå®è£
ããªãªãŒã¹ãã
- ãã®æç¹ã§ãæ°ãããšã³ã³ãŒããšã®äºææ§ãéæããã
- ã¡ãžã£ãŒããŒãžã§ã³ã¢ããã§ããã€ãåãæ°èšBinaryåã§ã·ãªã¢ã©ã€ãºããå®è£
ããªãªãŒã¹ãã
- åæã«ãåºå¥ãå³æ Œãªç°å¢ã®ãšã³ã³ãŒãã«ãããŠããã€ãåãStringãšããŠä¿åãããªãã·ã§ã³ãæäŸãã
- ããã¯ãæ°ãããšã³ã³ãŒãã«åãæ¿ããå Žåã§ããæžãåºããããã€ãåãå€åããªãããã«ããããã«ååšãã
- æ¢åã®å®è£ ãšäºææ§ãç¶æããã«ã¯ãã¡ãžã£ãŒããŒãžã§ã³ã¢ãããããšåæã«ããã®ãªãã·ã§ã³ãONã«ãã
- ãŸãããœãŒã¹ã³ãŒãã¬ãã«ã®äºææ§ãç¶æãããããStringåãšBinaryåã®äž¡æ¹ããã€ãåãšããŠè¿ãã¢ãŒããæäŸãã
- åæã«ãåºå¥ãå³æ Œãªç°å¢ã®ãšã³ã³ãŒãã«ãããŠããã€ãåãStringãšããŠä¿åãããªãã·ã§ã³ãæäŸãã
ãçšèªãã§è§ŠããããŠããèšèªã®çš®é¡ãå¢ãããããã³ã¡ã³ãæ±ãã
ãã®å€æŽåŸã®MessagePackã®åŒã³æ¹ã
- æ¡1ïŒçŸè¡ã®ä»æ§ãMessagePack 0.9 ãšåŒã³ãæ°ããä»æ§ã MessagePack 1.0 ãšåŒã¶
- æ¡2ïŒçŸè¡ã®ä»æ§ãMessagePack 1.0 ãšåŒã³ãæ°ããä»æ§ã MessagePack 1.1 ãšåŒã¶
MessagePackã®ããŒãžã§ã³ã¯ãçŸè¡ã 1.0, æ°ããã®ã 2.0 ãšåŒã¶ã®ãè¯ããšæããŸãã
ããã¯æããã«ã¡ãžã£ãŒããŒãžã§ã³ã¢ããã§ããã®ãšãã©ã€ãã©ãªã«ãã£ãŠã¯äºææ§ãéèŠããã¢ãŒããš
æ°ããä»æ§ã«æºæ ããã¢ãŒãã§ã¯ã©ã¹åãé¢æ°åãå€ãããå Žåãããã MessagePack11 ã ãš 11 ãªã®ã 1.1
ãªã®ãããããªãããã§ãã