FIXTradingCommunity / fix-simple-binary-encoding

A FIX standard for binary message encoding
Other
261 stars 69 forks source link

Clarify offset and length related types #146

Open OleksandrKvl opened 2 years ago

OleksandrKvl commented 2 years ago

Currently, offset and message.blockLength are specified as unsignedInt (32-bit) while type.length is nonNegativeInteger which is by spec "unbounded" which I guess can be treated as "at least 64-bit". In this way offset is unable to represent the full range of potential sizes. I think:

  1. They should have the same type.
  2. Maybe it makes sense to use unsignedLong (64-bit) to make it more specific rather than vague nonNegativeInteger which doesn't impose any limitation.
donmendelson commented 2 years ago

You didn't specify which version of SBE you are referencing. In the latest schema for SBE v2.0 RC3, blockLength and length are of the same type, nonNegativeInteger.

OleksandrKvl commented 2 years ago

Oh, I checked only the Markdown version, here it still says unsingedInt. In the XSD it's nonNegativeInteger as you said. What do you think about offset type?

donmendelson commented 2 years ago

The XSD is normative. The documentation needs to be made consistent.

kleihan commented 2 years ago

Oh, I checked only the Markdown version, here it still says unsingedInt. In the XSD it's nonNegativeInteger as you said. What do you think about offset type?

@OleksandrKvl, thanks for catching that issue!

OleksandrKvl commented 2 years ago

Just want to clarify that it's not only about documentation, the main points are that 1. offset should have the same type as length and 2. probably it's better not to use unbounded types anywhere in specification. For example, in Python3 there's no limit for integers which is not true for C++, can I be sure that SBE implementations in both of them are compatible?