annotate src/capnproto-git-20161025/doc/roadmap.md @ 48:9530b331f8c1

Add Cap'n Proto source
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 25 Oct 2016 11:17:01 +0100
parents
children
rev   line source
cannam@48 1 ---
cannam@48 2 layout: page
cannam@48 3 title: Road Map
cannam@48 4 ---
cannam@48 5
cannam@48 6 # Road Map
cannam@48 7
cannam@48 8 Here's what's (hopefully) in store for future versions of Cap'n Proto! Of course, everything here
cannam@48 9 is subject to change.
cannam@48 10
cannam@48 11 ## Near-ish future
cannam@48 12
cannam@48 13 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@48 14
cannam@48 15 * **Shared memory RPC:** Zero-copy inter-process communication.
cannam@48 16 * **Three-way introductions (level 3 RPC):** Allow RPC interactions between more than two parties,
cannam@48 17 with new connections formed automatically as needed.
cannam@48 18 * **Fiber-based concurrency:** The C++ runtime's event loop concurrency model will be augmented
cannam@48 19 with support for fibers, which are like threads except that context switches happen only at
cannam@48 20 well-defined points (thus avoiding the need for mutex locking). Fibers essentially provide
cannam@48 21 syntax sugar on top of the event loop model.
cannam@48 22 * **Dynamic schema transmission:** Allow e.g. Python applications to obtain schemas directly from
cannam@48 23 the RPC server so that they need not have a local copy. Great for interactive debugging.
cannam@48 24 * **Improved MSVC support:** Once MSVC improves its support for C++11 language features, we will
cannam@48 25 support Cap'n Proto's reflection and RPC APIs in MSVC. (Currently, only core serialization is
cannam@48 26 supported.)
cannam@48 27 * **Implement encapsulated types:** This will allow you to create a hand-written wrapper around a
cannam@48 28 type which will be automatically injected into the generated code, so that you can provide a
cannam@48 29 nicer interface which encapsulates the type's inner state.
cannam@48 30 * **Implement maps:** Based on encapsulated and parameterized types.
cannam@48 31
cannam@48 32 ## Before version 1.0
cannam@48 33
cannam@48 34 These things absolutely must happen before any 1.0 release. Note that it's not yet decided when
cannam@48 35 a 1.0 release would happen nor how many 0.x releases might precede it.
cannam@48 36
cannam@48 37 * **Expand test coverage:** There are lots of tests now, but some important scenarios, such as
cannam@48 38 handling invalid of invalid input, need better testing.
cannam@48 39 * **Performance review:** Performance is already very good compared to competitors, but at some
cannam@48 40 point we need to break out the profiler and really hone down on the details.
cannam@48 41 * **Security review:** We need a careful security review to make sure malicious input cannot
cannam@48 42 crash an application or corrupt memory.
cannam@48 43
cannam@48 44 ## Wish List
cannam@48 45
cannam@48 46 These are features we'd like to implement some day but haven't decided yet how to prioritize.
cannam@48 47 Some of these features could make their way into Cap'n Proto before version 1.0. Others will
cannam@48 48 certainly come after. If you have opinions on what you'd like to see next,
cannam@48 49 [tell us](https://groups.google.com/group/capnproto)!
cannam@48 50
cannam@48 51 ### Language Features
cannam@48 52
cannam@48 53 * **Inline lists:** Lets you define a field composed of a fixed number of elements of the same
cannam@48 54 type, and have those elements be stored directly within the struct rather than as a separate
cannam@48 55 object. Useful mainly to avoid the need to validate list lengths when the length should always
cannam@48 56 be the same. Also saves a pointer's worth of space.
cannam@48 57 * **Type aliases:** Ability to define a type which is just an alias of some other type, and
cannam@48 58 have it show up as e.g. a `typedef` in languages that support that. (The current `using`
cannam@48 59 keyword is intended only for local use and does not affect code generation.)
cannam@48 60 * **Doc comments:** Harvest doc comments from schema files and use them to generate doc comments
cannam@48 61 on generated code. Also make them available in the compiled schema so that a documentation
cannam@48 62 generator could use them.
cannam@48 63
cannam@48 64 ### C++ API Features
cannam@48 65
cannam@48 66 * **JSON codec:** API for transcoding to JSON format, useful for interacting with legacy
cannam@48 67 infrastructure.
cannam@48 68 * **Snappy integration:** Integrate [Snappy compression](https://code.google.com/p/snappy/) into
cannam@48 69 the API to further reduce bandwidth needs with minimal CPU overhead.
cannam@48 70 * **Annotations API:** For each annotation definition, generate code which assists in extracting
cannam@48 71 that annotation from schema objects in a type-safe way.
cannam@48 72
cannam@48 73 ### Storage
cannam@48 74
cannam@48 75 * **ORM interface:** Define a standard interface for capabilities that represent remotely-stored
cannam@48 76 objects, with get, put, publish, and subscribe methods. Ideally, parameterize this interface
cannam@48 77 on the stored type.
cannam@48 78 * **mmap-friendly mutable storage format:** Define a standard storage format that is friendly
cannam@48 79 to mmap-based use while allowing modification. (With the current serialization format, mmap
cannam@48 80 is only useful for read-only structures.) Possibly based on the ORM interface, updates only
cannam@48 81 possible at the granularity of a whole ORM entry.
cannam@48 82
cannam@48 83 ### Tools
cannam@48 84
cannam@48 85 * **Schema compatibility checker:** Add a `capnp` command which, given two schemas, verifies
cannam@48 86 that the latter is a compatible upgrade from the former. This could be used as a git hook
cannam@48 87 to prevent submission of schema changes that would break wire compatibility.
cannam@48 88 * **RPC debugger:** Add a `capnp` command which sends an RPC from the command line and prints
cannam@48 89 the result. Useful for debugging RPC servers.
cannam@48 90
cannam@48 91 ### Infrastructure
cannam@48 92
cannam@48 93 Note: These are very large projects.
cannam@48 94
cannam@48 95 * **JSON-HTTP proxy:** Develop a web server which can expose a Cap'n Proto RPC backend as a
cannam@48 96 JSON-over-HTTP protocol.
cannam@48 97 * **Database:** A fast storage database based on Cap'n Proto which implements the ORM interface
cannam@48 98 on top of the mmap storage format.