annotate src/capnproto-git-20161025/doc/roadmap.md @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 9530b331f8c1
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.