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.
