Sorry for the delay.

On Tue, 22 Jun 2010 13:47:19 +0900, Robert Jacques <sandf...@jhu.edu> wrote:

Other little things,
-Why isn't nil mapped to null?

Where?

MsgPack has a nil type which I assume is equivalent to null. So why isn't it simply included in the object serializer (and arguably also in the array and map serializer as well)?

Sorry, I can't understand this statement. Nullable types(class, array and associative-array)
is serialized to nil if null.

Sorry. The comment was about redundancy. i.e. packNil <=> pack(null).

I added pointer type (de)serialization.

For that matter, packNil, packTrue, packFalse, etc are all redundant with pack(T).

I removed packTrue, packFalse.

Furthermore, stream, packArray, packMap and packRaw all should be internal routines. (Though, a rawPack(T)(T value) routine might not go amiss)

I moved packRaw to internal method, but packArray and packMap should be public.
MessagePack's array and map can contain any type.

I can see the usefulness of the functionality, but for an end-user API, it is brittle and error-prone. For example: p.packArray(3).pack(5).pack("six"); produces an incorrect msgPack stream. A better syntax would be: p.pack(5,"six"); or p.packArray(5,"six"); I know you're using pack(Types...) to mean pack(Types[0]).pack(Types[1])... but using it for variable type arrays is worth considering. For packMap, pack( ["key": "value"], [5:"six"] ) could work, but packMap( ["key": "value"], [5:"six"] ) or packMap("key","value",5,"six") would avoid confusion with pack(Types...).

I have thought about this point. In the result, I changed (Un)Packer API.
It's true that your suggested syntax is better.
Old packArray was renamed to beginArray and new packArray serializes
container type using variadic arguments. Of course, Map too.

-----
/* old */
packer.packArray(2).pack(true, 10);

/* new */
packer.packArray(true, 10);
// == packer.beginArray(2).pack(true, 10)
-----

Thanks for pointing out this.


Masahiro

Reply via email to