[+Michael, +Dan] I like this direction!
Where can I find a bnf for the Cap'n Proto schema/idl language? I want to start from there to create a concrete syntax for the Chainmail (formal specification language for ocap patterns) abstract syntax. I had previously started with a Jessie-like syntax, but I think Cap'n Proto would be a better place to start. As part of this, I want to write specifications for the ERTP and SwingSet APIs as Cap'n Proto files that I can imagine would grow into Chainmail specs. Together with WASM/WASI bindings for Cap'N Proto, this would be a start for enabling non-JS WASM instances to plug into our SwingSet kernel. To close this loop, we should define the subset of Cap'n Proto that we expect to compile to WASM/WASI bindings. SwingSet should then restrict itself to that subset. Is there a standard representation of the AST that a Cap'n Proto schema/idl file parses into? With such an AST translated to JSON, I would also like to explore changing our marshaling system so that it only allows through calls described in the IDL and made available to the comm system at runtime via a derived JSON representation suitable for that purpose. That would put us in a good position to explore eventually cerealizing to Cap'n Proto itself. On Sat, Jun 15, 2019 at 6:46 PM 'Kenton Varda' via Cap'n Proto < [email protected]> wrote: > Hi mjbecze, > > This is interesting! Is this related to: > > https://github.com/WebAssembly/design/issues/1274 > > ? > > On Sat, Jun 15, 2019 at 9:08 AM <[email protected]> wrote: > >> Hello, >> I'm currently investigating whether capt'n proto schema would be >> appropriate for describing Webassebly interfaces. I'm attempting to >> translate this interface >> <https://github.com/WebAssembly/WASI/blob/master/docs/WASI-overview.md> >> to capn proto schema. I several questions and I'm sure I'll have more as >> the work progresses. >> >> 1. Webassebly will soon have opaque references >> <https://github.com/WebAssembly/reference-types>. How would you >> represent reference types in capt'n proto? >> > > Cap'n Proto's "Capability" type is exactly what you want here: it > represents an external reference to "something". Note that interface types > in Cap'n Proto are all subclasses of "Capability" -- i.e. "Capability" is > kind of like Java's "Object". But it's totally valid to use just the type > "Capability" to represent a handle to some opaque thing that has no > particular methods you can call. > > Also worth noting that in Cap'n Proto's real RPC system, capabilities are > referenced through table indices, just like Wasm opaque references > apparently will be. Check out: > > > https://github.com/capnproto/capnproto/blob/77f20b4652e51b5a7ebda414e979e059a6c7c27c/c++/src/capnp/rpc.capnp#L116 > > Also, Cap'n Proto's C++ implementation has the ability to attach file > descriptors to capabilities and pass them between processes (via SCM_RIGHTS > on unix sockets): > > https://github.com/capnproto/capnproto/pull/821 > > So there's lots of precedent here. > > 2. Is annotation the correct way to represent pointers? for example >> > > Oof, this is pretty awkward, especially in that it presumes the callee has > the ability to reach into the caller's address space. Obviously, Cap'n > Proto hasn't been designed with that sort of thing in mind. > > With that said, I like your second solution, transforming return values > into things that are stored to the pointer. This allows the schema to > express the semantics in a way that makes sense for classic RPC, and then > return-by-write-to-pointer becomes part of the "calling convention" that > maps Cap'n Proto to Wasm. > > -Kenton > > -- > 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]. > Visit this group at https://groups.google.com/group/capnproto. > To view this discussion on the web visit > https://groups.google.com/d/msgid/capnproto/CAJouXQ%3DYWW-L4Rp5JZHD5CGTbhiKypWuoP5HJ10CxKqL8A6Z%3Dg%40mail.gmail.com > <https://groups.google.com/d/msgid/capnproto/CAJouXQ%3DYWW-L4Rp5JZHD5CGTbhiKypWuoP5HJ10CxKqL8A6Z%3Dg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- Cheers, --MarkM -- 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]. Visit this group at https://groups.google.com/group/capnproto. To view this discussion on the web visit https://groups.google.com/d/msgid/capnproto/CAK5yZYhpK0GHefUjUdG4cQ8MrrLhegscieg_nsZOjFZWOg9BXg%40mail.gmail.com.
