Thinking about zig implementation

66 views
Skip to first unread message

qu...@daurnimator.com

unread,
Nov 29, 2019, 10:43:01 AM11/29/19
to Cap'n Proto
> If you’d like to own the implementation of Cap’n Proto in some particular language, let us know!

I'm looking into playing with capnp and zig (https://ziglang.org/).
Zig is a relatively new language that aims to one day replace C.
Principles include:
  - No hidden control flow (which means that there can be e.g. no hidden allocations)
  - Unified compiletime and runtime syntax and semantics: no separate language for compile like you have with the C preprocessor or C++ templates
  - Extensive self-reflection capabilities
  - Easy cross-compilation for non-native targets


As an ahead-of-time compiled languages, it seems like the recommended path forward would be to implement a `capnp` plugin.

Daurn

Ian Denhardt

unread,
Nov 29, 2019, 1:10:52 PM11/29/19
to Cap'n Proto, qu...@daurnimator.com
Zig is neat! Yes, you'll want to write a schema compiler plugin, and
will also need to write some code to handle non-schema-specific details
of the format; I would start by reading the encoding docs and build some
support for reading "untyped" structs/lists/etc.

You'll want to decide what language to write the schema compiler plugin
in. Using something other than Zig might be easier since that way you
don't have to deal with the bootstrapping issues; If you choose zig,
you'll have to write wrappers for the types in schema.capnp by hand in
order to bootstrap.

If you have more specific questions, I'll gladly field them. Keep us
posted.

-Ian

Quoting qu...@daurnimator.com (2019-11-29 05:44:58)
> As https://capnproto.org/otherlang.html says:
> > If you�d like to own the implementation of Cap�n Proto in some
> particular language, [1]let us know!
> I'm looking into playing with capnp and zig (https://ziglang.org/).
> Zig is a relatively new language that aims to one day replace C.
> Principles include:
> � - No hidden control flow (which means that there can be e.g. no
> hidden allocations)
> � - Unified compiletime and runtime syntax and semantics: no separate
> language for compile like you have with the C preprocessor or C++
> templates
> � - Extensive self-reflection capabilities
> � - Easy cross-compilation for non-native targets
> As an ahead-of-time compiled languages, it seems like the recommended
> path forward would be to implement a `capnp` plugin.
> Daurn
>
> --
> 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 [2]capnproto+...@googlegroups.com.
> To view this discussion on the web visit
> [3]https://groups.google.com/d/msgid/capnproto/f6c9d668-d1a0-4415-8366-
> b49cd1cbe36b%40googlegroups.com.
>
> Verweise
>
> 1. https://groups.google.com/group/capnproto
> 2. mailto:capnproto+...@googlegroups.com
> 3. https://groups.google.com/d/msgid/capnproto/f6c9d668-d1a0-4415-8366-b49cd1cbe36b%40googlegroups.com?utm_medium=email&utm_source=footer

Siva Mahadevan

unread,
Nov 14, 2021, 1:47:43 PMNov 14
to Cap'n Proto
Is there any progress on a Zig implementation? I'd like to start contributing to one if there is already one that exists.

Daurnimator

unread,
Nov 14, 2021, 7:01:01 PMNov 14
to Siva Mahadevan, Cap'n Proto
On Mon, 15 Nov 2021 at 05:47, Siva Mahadevan <svm...@gmail.com> wrote:
> Is there any progress on a Zig implementation? I'd like to start contributing to one if there is already one that exists.

No, I didn't get any further than playing with it for a day or two.

Some misc notes:

- I recall issues with using zig structs, as there is no way to e.g.
little-endian integer type
- Zig doesn't have anonymous fields
- Things would be nicer with https://github.com/ziglang/zig/issues/6478

I hit a bit of a dead end, and a future implementation should probably
have getters/setters for fields.
Where the getter/setter key is an enum.

Ian Denhardt

unread,
Nov 14, 2021, 7:09:01 PMNov 14
to Daurnimator, Siva Mahadevan, Cap'n Proto
Quoting Daurnimator (2021-11-14 19:00:47)

> Some misc notes:
>
> - I recall issues with using zig structs, as there is no way to e.g.
> little-endian integer type
> - Zig doesn't have anonymous fields
> - Things would be nicer with https://github.com/ziglang/zig/issues/6478

Yeah, I would not try to map capnproto structs directly to
language-native structs, except as part of an up-front parsing API for
performance-insensitive use. The normal thing is to just define wrapper
types with accessors. Note that even with control over layout, a
struct's data section can be shorter or longer than what the compiled
schema suggests, so you still end up needing to do a bounds check.

-Ian
Reply all
Reply to author
Forward
0 new messages