Suddenly the generics come into their own! great idea :)
On Thursday, 9 March 2017 20:45:25 UTC, Ian Denhardt wrote:
>
> Ideally the boilerplate could be cut down by having a standard type
> like:
>
> struct Option(T) {
> union {
> Some @0 :T;
> None @1 :Void;
> }
> }
>
> And then just do:
>
> struct Foo {
> age @0 :Option(Int32);
> }
>
> But the wire format doesn't really do what you want; age ends up being a
> *pointer* to an option (if I understand correctly). I'm with you that
> it would be nice to keep these concepts separate. The above is basically
> how programming languages that have variant types (haskell, ocaml,
> scala, rust...) deal with the issue (and there's no such thing as a null
> pointer, which is amazing). It would be nice if you could define
> something like the above and then have the union just inlined into the
> parent struct, instead of being a pointer. Maybe by making it possible
> to define unions at top-level, but not actually instantiate them unless
> they're part of another type. You'd still have the problem of the extra
> tag field. Just spitballing.
>
> Quoting Sam Duke (2017-03-09 14:44:30)
> > I think the idea of an unset sentinel value is a little awkward as it
> > conflates data validation with field presence which are nice concepts
> > to keep separate (in part for consistency in how you perform data
> > validation).
> > As I understand it a union is synonymous to a Protobuf oneof field?
> > Is the recommendation to use a union with only one member or use
> > wrappers (like this
> > [1]
> https://github.com/google/protobuf/blob/master/src/google/protobuf/w
> > rappers.proto) which don't really fix the problem buy minimise it?
> > Using unions everywhere would make the definitions of messages hard
> to
> > read. It suppose some syntactic sugar around this might be useful :/
> > Thanks for your prompt replies and help BTW. And sorry for my poor
> > reading of your docs :)
> >
> > On Thu, 9 Mar 2017 at 19:15 Ross Light <[2][email protected]
> <javascript:>> wrote:
> >
> > Quite the opposite: it's so that scalar values always have a fixed
> > offset from the beginning of the struct's data section.� This may
> > waste space on the wire, but makes scalar access consistent and
> avoids
> > branches in the common case (read as fast).
> > However, it's worth noting that reading a scalar field with a newer
> > version of the schema will read the default value, so as the FAQ
> > states, you can use this property to have an "unset" sentinel value
> or
> > you can add a named union.
> >
> > On Thu, Mar 9, 2017 at 10:27 AM Sam Duke <[3][email protected]
> <javascript:>>
> > wrote:
> >
> > Really confused why this was removed? Is it for less space on the
> > wire? Field presence seems an excellent way to guard against
> > regression as protos evolve.
> >
> > On Thu, 9 Mar 2017, 18:20 Ross Light, <[4][email protected]
> <javascript:>> wrote:
> >
> > Correct.� In this respect, Cap'n Proto is very close to proto3
> > semantics.
> >
> > On Thu, Mar 9, 2017 at 10:08 AM Sam Duke <[5][email protected]
> <javascript:>>
> > wrote:
> >
> > Looks like there's no hasX methods for scalars?
> >
> > On Thu, 9 Mar 2017, 15:57 Ross Light, <[6][email protected]
> <javascript:>> wrote:
> >
> > [7]https://capnproto.org/faq.html#how-do-i-make-a-field-optional
> >
> > On Thu, Mar 9, 2017, 4:01 AM <[8][email protected] <javascript:>>
> wrote:
> >
> > I couldn't find an explicit mention of this on the website, curious
> if
> > CapNProto has also removed field presence detection - it's a really
> > useful feature to have!
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Cap'n Proto" group.
> > To unsubscribe from this group and stop receiving emails from it,
> > send an email to [9][email protected] <javascript:>.
> > Visit this group at [10]https://groups.google.com/group/capnproto.
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Cap'n Proto" group.
> > To unsubscribe from this group and stop receiving emails from it,
> > send an email to [11][email protected] <javascript:>.
> > Visit this group at [12]https://groups.google.com/group/capnproto.
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Cap'n Proto" group.
> > To unsubscribe from this group and stop receiving emails from it,
> send
> > an email to [13][email protected] <javascript:>.
> > Visit this group at [14]https://groups.google.com/group/capnproto.
> >
> > Verweise
> >
> > 1.
> https://github.com/google/protobuf/blob/master/src/google/protobuf/wrappers.proto
>
> > 2. mailto:[email protected] <javascript:>
> > 3. mailto:[email protected] <javascript:>
> > 4. mailto:[email protected] <javascript:>
> > 5. mailto:[email protected] <javascript:>
> > 6. mailto:[email protected] <javascript:>
> > 7. https://capnproto.org/faq.html#how-do-i-make-a-field-optional
> > 8. mailto:[email protected] <javascript:>
> > 9. mailto:[email protected] <javascript:>
> > 10. https://groups.google.com/group/capnproto
> > 11. mailto:[email protected] <javascript:>
> > 12. https://groups.google.com/group/capnproto
> > 13. mailto:[email protected] <javascript:>
> > 14. https://groups.google.com/group/capnproto
>
--
You received this message because you are subscribed to the Google Groups
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
Visit this group at https://groups.google.com/group/capnproto.