[ https://issues.apache.org/jira/browse/THRIFT-5772?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17834070#comment-17834070 ]
Jens Geyer edited comment on THRIFT-5772 at 4/4/24 11:40 PM: ------------------------------------------------------------- The following is solely about {*}binary wire format representation{*}. What you do internally, in your own memory, is a whole other story - typically whatever fits best. A well-defined byte order is important to be able to exchange uuid bytes across platforms. Problem here is that there are in fact several implementations from different vendors doing inconsistent stuff (see links below). And there is RFC4122 that suggests network order but not everybody follows this. That's why the docs linked from THRIFT-5587 state explicitly that {*}Thrift uses "network" order{*}, which is also consistent with our general integer serialisation scheme. Furthermore, there are also [test cases|https://github.com/apache/thrift/blob/master/lib/delphi/src/Thrift.Utils.pas#L380] intended [to test |https://github.com/apache/thrift/blob/master/lib/netstd/Thrift/Protocol/Utilities/TGuidExtensions.cs#L50] exactly this. Some helpful and/or amusing links (depends on how you look at it): - [https://www.ietf.org/rfc/rfc4122.txt] - [https://stackoverflow.com/questions/10850075/guid-uuid-compatibility-issue-between-net-and-linux] - [https://lists.gnu.org/archive/html/bug-parted/2002-01/msg00099.html] was (Author: jensg): A well-defined byte order is important to be able to exchange uuid bytes across platforms. Problem here is that there are in fact several implementations from different vendors doing inconsistent stuff (see links below). And there is RFC4122 that suggests network order but not everybody follows this. That's why the docs linked from THRIFT-5587 state explicitly that {*}Thrift uses "network" order{*}, which is also consistent with our general integer serialisation scheme. Furthermore, there are also [test cases|https://github.com/apache/thrift/blob/master/lib/delphi/src/Thrift.Utils.pas#L380] intended [to test |https://github.com/apache/thrift/blob/master/lib/netstd/Thrift/Protocol/Utilities/TGuidExtensions.cs#L50] exactly this. Some helpful and/or amusing links (depends on how you look at it): - [https://www.ietf.org/rfc/rfc4122.txt] - [https://stackoverflow.com/questions/10850075/guid-uuid-compatibility-issue-between-net-and-linux] - [https://lists.gnu.org/archive/html/bug-parted/2002-01/msg00099.html] > Add UUID support for C++ > ------------------------ > > Key: THRIFT-5772 > URL: https://issues.apache.org/jira/browse/THRIFT-5772 > Project: Thrift > Issue Type: New Feature > Reporter: Carel > Priority: Minor > Time Spent: 20m > Remaining Estimate: 0h > > Starting the discussion to add UUID support for C++. > I have started with an implementation (See PR linked soon) > Open points for discussion: > # Is there perhaps a need to add a wrapper class for UUID? > ## I started off with {{std::string}} for ease-of-use > ## 'ease-of-use' has the drawback of ease of miss-use... > ## Something lightweight as a strong wrapper to wrap a `{{uint8_t data[16];}}` > ### A wrapper gives us the ability to add utility functions, like > `to_string()` and `from_string()` > ### Can use {{boost::uuids::uuid}} in the implementation, hidden from users > (see current implementation) > ## I will see if I can't implement something while this PR is looked at. > # Can someone help with some cross tests > ## With the absence of working dockers I am really struggling to get other > languages compiled. > ## I don't have enough experience with other languages to effectively do this > ## I will probably be able to add Java tests if there is something to build > on (pointers needed) > # How important is the JSON side? > ## I did add the support but I see only go has some support for it. > # (edit) How important is the HOST vs Network order on the UUID? -- This message was sent by Atlassian Jira (v8.20.10#820010)