This library is intended to provide better RPC support for the D Language (and provide interop with major systems), while being lightweight with little overhead.
- Utilize the metaprogramming facilities in the language to avoid massive hurdles that other languages have had to jump over (see C++, where the programming model is incredibly strange and foreign)
- Perform massive amounts of computation and generation at compile-time to avoid adding extra runtime complexity
- Heavily multithread service requests (to avoid the problem that Rust developers are currently facing)
- Make ease of use of the library a priority, not an after-thought.
- Reach performance that is near native C++ performance, but significantly easier to use.
- Avoid invoking the garbage collector as much as possible
IMPORTANT: As of current, the library is server-only. This will change in the future, and client functionality IS planned. Pre-alpha (until more extensive validation takes place)
- Compiling .proto files must be done with the custom compiler plugin here, rather then using the compiler plugin from
protobuf-d
- This is due to the compiler generating custom attributes that are not normally emitted (and handling the ServiceDescriptors)
- The library will spawn multiple workers (and, thus, multiple instances of a handler class)
- This is normally not an issue with simple classes, however, if your class loads data from disk, this should be a consideration.
- The worker value (for each call) will be tunable in future releases
- grpc-demo: This program fully complies to the HelloWorld example contained within the gRPC source, and demonstrates the simplex performance of this library.
- grpc-route-guide: This program fully complies to the RouteGuide example contained within the gRPC source, and demonstrates how easy streaming is to take advantage of.
- Document library (and code in it's entirety)
- Unit test functionality
- Optimize, optimize, optimize
- Implement the client interface
- Improve exception handling (currently it can lead to a segfault in rare occasions)
- channelz/reflection support
- Implement the server interface
- Enable compression/encrypted communication
- Allow for full server/client configuration (tuning via grpc_{channel,server}_args)