Give us a Unique Identifier, a UUID or GUID for the data type, just a baggage label, something that says: that's us, or that's this, and we know you don't know what this is, but that's fine, because we know, and that's the main thing.
And if you'd care to share with the world that {gOurInt32DataType} is just a humble Int32 (little or big endian, as appropriate), then great. The world can use that declared type too.
If you don't mind of course.
And since we can't pre-define a Guid data type - we'd contradict our own decision - we need a way to say: hey, everything is based on this concept.
It might be a UUID. Someone might try it with text.
We recommend UUID.
And the way we do that is we say: here's record 3, and it's of type 3; (self-referential); and in it, just for confirmation, you'll find our choice for a {gUUID}.
That's it. A4. Almost.
GUID's and UUID's
So a {gInt32}, strictly a {gInt32B} or {gInt32L} (big or little endian Int32 is declared as a guid which will look something like:Â
{9CCDEB09-4382-4E55-963B-6ADFE1D2C0FD}
That's not much fun to read, and hard to remember, so we use a 'pseudocode' label {gInt32} for an Int32 in our system, and we'll declare it with a specialised {gInt32B} or {gInt32L} to distinguish big and little endian, but for convenience, once we're 'in' a system, we can generally think of it as just a {gInt32}, one of those nasty Guids.
Now, because it's a Guid (or UUID, same thing - I believe! Nope... Microsoft uses Guid, UUID is the RFC4122 standard, but we'll let that ride).
Let's try that again: because {gInt32} is a {gGuid}, the datatype for that record declaration is a ref to {gGuid}, so we need to read that record, which contains the declaration for the {gGuid} type.
And the record for the declaration of the {gGuid}