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