Hi Kenton,

The project comes with a whole new parser and layouting implementation.
I have some tests[1] for complicated struct/union layouts, but you're
absolutely right that this needs much more rigorous testing and an
enormous disclaimer - both of which I had planned had I continued.

It's not possible to invoke external programs or call into other
languages from Zig comptime[2], that would require a separate build
step.  One idea I considered is to have the parser recognize the
comments generated by `capnp -o capnp` and use them for validation, so
that it's at least easier to get that extra assurance. Loading a file in
schema.capnp format could also be done, of course, but then one might as
well introduce a separate build step.

1) 
https://code.blicky.net/yorhel/capnzig/src/commit/5618819e01c8dda38962b986e4107d7d20e863f5/src/schema.zig#L812

2) Okay, Zig's comptime being turing complete one could potentially
write a C++ interpreter and run capnp's layouting code during Zig
compilation, but let's not go there. :)

Yorhel.

On 2023-01-30, 'Kenton Varda' via Cap'n Proto wrote:
> Hi Yorhel,
> 
> Cool stuff. It's neat that Zig can run code at compile time.
> 
> Question, though: are you calling the C++ parser library to parse Cap'n
> Proto schema language, or did you write a whole new parser for it? If the
> latter, I'm worried as the algorithm to decide the layout of structs is
> quite complex, especially when unions of groups are involved. If you are
> re-implementing that, it would be pretty easy to get wrong leading to
> subtle incompatibilities. Is it possible to invoke the parser from the C++
> implementation as a library, to convert from capnp IDL into schema.capnp
> format, which could then be interpreted by your implementation?
> 
> -Kenton
> 
> On Thu, Jan 12, 2023 at 6:06 AM 'Yorhel' via Cap'n Proto <
> [email protected]> wrote:
> 
> > Hi list,
> >
> > I've been working on a Cap'n Proto implementation for the Zig language.
> > This implementation is unusual in that it leverages the language's
> > compile-time code execution capabilities to read a schema file - written
> > in Cap'n Proto's schema language, no separate compilation step required
> > - and then make the interfaces defined in the schema available to
> > library users.
> >
> > I wasn't 100% sure if this was going to work, but I now have a parser,
> > struct layouting algorithm and some rudimentary experiments with a
> > type-safe struct read/write API that compiles down to code that *should*
> > be just as efficient as if a code generation step was involved.
> >
> > Sadly, now that I've convinced myself that this might actually work out,
> > I've lost the motivation to do the remaining 80% of the work and turn it
> > into a usable library. So instead I'm publishing the unfinished product
> > with the hope that it might inspire or prove useful to someone. And, who
> > knows, maybe I'll continue to work on it some time in the future.
> >
> > The code is at https://code.blicky.net/yorhel/capnzig
> >
> > Documentation's kind of lacking - the code is commented here and there,
> > but making sense of everything may take effort. I'll be around to answer
> > questions if there are any.
> >
> > Here's hoping we'll have a mature Cap'n Proto implementation for Zig at
> > some point, regardless of which code generation strategy is taken.
> >
> > Yorhel.
> >
> > --
> > 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].
> > To view this discussion on the web visit
> > https://groups.google.com/d/msgid/capnproto/Y7/3v1VZfkFIFO5s%40gmai021.
> >
> 
> -- 
> 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].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/capnproto/CAJouXQ%3DFvmUpqCvqEtGAvU4gtMo5V8drrGcPHXWRuPBYc254PA%40mail.gmail.com.

-- 
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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/Y9jOyhsNXGK3areQ%40gmai021.

Reply via email to