> Date: Wed, 4 Aug 2021 17:52:46 -0700
> From: Jason Thorpe <thor...@me.com>
> 
> > On Aug 1, 2021, at 11:10 AM, Martin Husemann <mar...@duskware.de> wrote:
> > 
> > On Sun, Aug 01, 2021 at 07:57:20AM -0700, Jason Thorpe wrote:
> >> The situation hasn't changed.  I'm still waiting for concrete proposals.
> > 
> > The concrete proposal is backout - if there is no better idea how to deal
> > with it properly.
> 
> I have reworked it on the thorpej-cfargs2 branch.  It addresses the
> concerns about compile-time type checking by using an anonymous
> structure constructed in-line with the help of a variadic
> preprocessor macro (to save wear and tear on your fingers and
> keyboard that might otherwise occur because of annoying boilerplate
> syntax to construct the structure in-line).

Thanks, this looks much better!  No more objections from me.


For future work (definitely not a blocker for this or netbsd-10 or
anything) it would be nice if we could incorporate typed interface
attributes rather than just strings that are copied & pasted into the
source code and never checked until runtime.  For example, in
files.usb we could have something like

        define  usbdevif <struct usb_attach_args> { [port = -1], ... }

which would lead config(8) to generate

        static struct ifattachargs
        IA_USBDEVIF(struct usb_attach_args *args)
        {
                return (struct ifattachargs) {
                        .iaa_name = "usbdevif",
                        .iaa_args = args,
                };
        }

and in usb_subr.c the code would be

        dv = config_found(parent, IA_USBDEVIF(&uaa), ...);

with everything here verified by the compiler at compile-time.
Shouldn't be much effort to implement this -- just local changes in
config(8).  (I did something similar in picopb, e.g.
<https://mumble.net/~campbell/hg/picopb/test/disk/disk.pb.h-good> and
<https://mumble.net/~campbell/hg/picopb/test/disk/disk.c>.)

A stretch goal would be to push the types into the attach function
too, e.g.

        int
        uwhatever_attach(device_t parent, device_t self,
            struct usb_attach_args *uaa)
        {
                ...
        }

but that might take a bit more work.

Reply via email to