I also like the idea of marking some fields as required, also erring on the
side of conservatism.

I can test on the Rust implementation (although IPC support is still
incomplete) if we go ahead with this.

On Fri, 17 Jan 2020 at 08:29, Micah Kornfield <emkornfi...@gmail.com> wrote:

> I too, couldn't find anything that says this would break backwards
> compatibility for the binary format. But it probably pays to open an issue
> with the flatbuffer team just to be safe.
>
> Two points:
> 1.  I'd like to make sure we are conservative in choosing "definitely
> required"
> 2.  Before committing to the change, it would be good to get a sense of how
> much this affects other language bindings (e.g. scope of work).
> 3.  If we decide to this it seems like it should be a 1.0.0 blocker?
>
> On Thu, Jan 16, 2020 at 1:47 PM Wes McKinney <wesmck...@gmail.com> wrote:
>
> > If using "required" does not alter the Flatbuffers binary format (it
> > doesn't seem that it does, it adds non-null assertions on the write
> > path and additional checks in the read verifiers, is that accurate?),
> > then it may be worthwhile to set it on "definitely required" fields so
> > spare clients from having to implement their own null checks. Thoughts
> > from others?
> >
> > - Wes
> >
> > On Thu, Jan 16, 2020 at 8:13 AM Antoine Pitrou <anto...@python.org>
> wrote:
> > >
> > >
> > > Hello,
> > >
> > > In Flatbuffers, all fields are optional by default.  It means that the
> > > reader can get NULL (in C++) for a missing field.  In turn, this means
> > > that message validation (at least in C++) should check all child table
> > > fields for non-NULL.  Not only is this burdensome, but it's easy to
> miss
> > > some checks.  Currently, we don't seem to do any of them.
> > >
> > > Instead, it seems we could mark most child fields *required*.  This
> > > would allow the generated verifier to check that those fields are
> indeed
> > > non-NULL when reading.  It would also potentially break compatibility,
> > > though I'm not sure why (do people rely on the fields being missing
> > > sometimes?).  What do you think?
> > >
> > >
> > > To quote the Flatbuffers documentation:
> > > """
> > > By default, all fields are optional, i.e. may be left out. This is
> > > desirable, as it helps with forwards/backwards compatibility, and
> > > flexibility of data structures. It is also a burden on the reading
> code,
> > > since for non-scalar fields it requires you to check against NULL and
> > > take appropriate action. By specifying this field, you force code that
> > > constructs FlatBuffers to ensure this field is initialized, so the
> > > reading code may access it directly, without checking for NULL. If the
> > > constructing code does not initialize this field, they will get an
> > > assert, and also the verifier will fail on buffers that have missing
> > > required fields.
> > > """
> > > https://google.github.io/flatbuffers/md__schemas.html
> > >
> > > Regards
> > >
> > > Antoine.
> >
>

Reply via email to