I see nothing in the spec about handling cycles in object references, which suggests it is not only not supported, but not even planned for or considered. Did I just miss it? Or if that is true, it makes msgpack completely useless for many scenarios where it would otherwise be quite desirable.
And it seems to me you don't need much to support it. Use just one reserved type value to indicate cross-reference, to be followed by a single-byte distinguisher of whether what follows is an identifier (such as a 4-byte integer) to be applied to the next object following it, or whether this is to be an object by reference to a previously-specified object. The latter could be by the previously-supplied cross-reference identifier (such as a 4-byte integer again). To be a bit more fancy, the reference could be to something that was not previously defined, but which can be looked up as needed. You could even specify a full URL string that allows the datum that belongs here to be looked up on demand (as from a web service/page) whenever it is actually needed or whenever the decoding application wishes to do so -- i.e., and on-demand dangling reference, which should only be used when an object really does belong in that position (not nil).
So has msgpack really not even covered this?
I see nothing in the spec about handling cycles in object references, which suggests it is not only not supported, but not even planned for or considered. Did I just miss it? Or if that is true, it makes msgpack completely useless for many scenarios where it would otherwise be quite desirable.
And it seems to me you don't need much to support it. Use just one reserved type value to indicate cross-reference, to be followed by a single-byte distinguisher of whether what follows is an identifier (such as a 4-byte integer) to be applied to the next object following it, or whether this is to be an object by reference to a previously-specified object. The latter could be by the previously-supplied cross-reference identifier (such as a 4-byte integer again). To be a bit more fancy, the reference could be to something that was not previously defined, but which can be looked up as needed. You could even specify a full URL string that allows the datum that belongs here to be looked up on demand (as from a web service/page) whenever it is actually needed or whenever the decoding application wishes to do so -- i.e., and on-demand dangling reference, which should only be used when an object really does belong in that position (not nil).
So has msgpack really not even covered this?