cannam@133: --- cannam@133: layout: page cannam@133: title: Road Map cannam@133: --- cannam@133: cannam@133: # Road Map cannam@133: cannam@133: Here's what's (hopefully) in store for future versions of Cap'n Proto! Of course, everything here cannam@133: is subject to change. cannam@133: cannam@133: ## Near-ish future cannam@133: cannam@133: Provisionally, these are probably the things that will be worked on in the next few releases of Cap'n Proto and its C++ reference implementation. cannam@133: cannam@133: * **Shared memory RPC:** Zero-copy inter-process communication. cannam@133: * **Three-way introductions (level 3 RPC):** Allow RPC interactions between more than two parties, cannam@133: with new connections formed automatically as needed. cannam@133: * **Fiber-based concurrency:** The C++ runtime's event loop concurrency model will be augmented cannam@133: with support for fibers, which are like threads except that context switches happen only at cannam@133: well-defined points (thus avoiding the need for mutex locking). Fibers essentially provide cannam@133: syntax sugar on top of the event loop model. cannam@133: * **Dynamic schema transmission:** Allow e.g. Python applications to obtain schemas directly from cannam@133: the RPC server so that they need not have a local copy. Great for interactive debugging. cannam@133: * **Improved MSVC support:** Once MSVC improves its support for C++11 language features, we will cannam@133: support Cap'n Proto's reflection and RPC APIs in MSVC. (Currently, only core serialization is cannam@133: supported.) cannam@133: * **Implement encapsulated types:** This will allow you to create a hand-written wrapper around a cannam@133: type which will be automatically injected into the generated code, so that you can provide a cannam@133: nicer interface which encapsulates the type's inner state. cannam@133: * **Implement maps:** Based on encapsulated and parameterized types. cannam@133: cannam@133: ## Before version 1.0 cannam@133: cannam@133: These things absolutely must happen before any 1.0 release. Note that it's not yet decided when cannam@133: a 1.0 release would happen nor how many 0.x releases might precede it. cannam@133: cannam@133: * **Expand test coverage:** There are lots of tests now, but some important scenarios, such as cannam@133: handling invalid of invalid input, need better testing. cannam@133: * **Performance review:** Performance is already very good compared to competitors, but at some cannam@133: point we need to break out the profiler and really hone down on the details. cannam@133: * **Security review:** We need a careful security review to make sure malicious input cannot cannam@133: crash an application or corrupt memory. cannam@133: cannam@133: ## Wish List cannam@133: cannam@133: These are features we'd like to implement some day but haven't decided yet how to prioritize. cannam@133: Some of these features could make their way into Cap'n Proto before version 1.0. Others will cannam@133: certainly come after. If you have opinions on what you'd like to see next, cannam@133: [tell us](https://groups.google.com/group/capnproto)! cannam@133: cannam@133: ### Language Features cannam@133: cannam@133: * **Inline lists:** Lets you define a field composed of a fixed number of elements of the same cannam@133: type, and have those elements be stored directly within the struct rather than as a separate cannam@133: object. Useful mainly to avoid the need to validate list lengths when the length should always cannam@133: be the same. Also saves a pointer's worth of space. cannam@133: * **Type aliases:** Ability to define a type which is just an alias of some other type, and cannam@133: have it show up as e.g. a `typedef` in languages that support that. (The current `using` cannam@133: keyword is intended only for local use and does not affect code generation.) cannam@133: * **Doc comments:** Harvest doc comments from schema files and use them to generate doc comments cannam@133: on generated code. Also make them available in the compiled schema so that a documentation cannam@133: generator could use them. cannam@133: cannam@133: ### C++ API Features cannam@133: cannam@133: * **JSON codec:** API for transcoding to JSON format, useful for interacting with legacy cannam@133: infrastructure. cannam@133: * **Snappy integration:** Integrate [Snappy compression](https://code.google.com/p/snappy/) into cannam@133: the API to further reduce bandwidth needs with minimal CPU overhead. cannam@133: * **Annotations API:** For each annotation definition, generate code which assists in extracting cannam@133: that annotation from schema objects in a type-safe way. cannam@133: cannam@133: ### Storage cannam@133: cannam@133: * **ORM interface:** Define a standard interface for capabilities that represent remotely-stored cannam@133: objects, with get, put, publish, and subscribe methods. Ideally, parameterize this interface cannam@133: on the stored type. cannam@133: * **mmap-friendly mutable storage format:** Define a standard storage format that is friendly cannam@133: to mmap-based use while allowing modification. (With the current serialization format, mmap cannam@133: is only useful for read-only structures.) Possibly based on the ORM interface, updates only cannam@133: possible at the granularity of a whole ORM entry. cannam@133: cannam@133: ### Tools cannam@133: cannam@133: * **Schema compatibility checker:** Add a `capnp` command which, given two schemas, verifies cannam@133: that the latter is a compatible upgrade from the former. This could be used as a git hook cannam@133: to prevent submission of schema changes that would break wire compatibility. cannam@133: * **RPC debugger:** Add a `capnp` command which sends an RPC from the command line and prints cannam@133: the result. Useful for debugging RPC servers. cannam@133: cannam@133: ### Infrastructure cannam@133: cannam@133: Note: These are very large projects. cannam@133: cannam@133: * **JSON-HTTP proxy:** Develop a web server which can expose a Cap'n Proto RPC backend as a cannam@133: JSON-over-HTTP protocol. cannam@133: * **Database:** A fast storage database based on Cap'n Proto which implements the ORM interface cannam@133: on top of the mmap storage format.