I maintain https://github.com/aregtech/areg-sdk, a C++ framework for building distributed service-oriented systems. Think of it as a lightweight alternative to gRPC/DDS for cases where your services need to work identically across threads, processes, and networked machines. Same code, zero changes, just reconfigure the deployment.
We're planning a major modernization pass (targeting min C++17) and kicked off a https://github.com/aregtech/areg-sdk/discussions/669 in the repo. Before we commit to breaking changes, I'd love to hear what the community actually prefers.
Quick context on what we have at the moment:
PascalCase types, camelCase methods, mPascalCase members
Mixture of
const char* and std::string_view in public APIsMixture of plain and smart pointers
Macros for logging scopes, code visibility, and code generator
C++17 minimum required version
What we're considering:
Modernizing APIs to use
std::string_view, constexpr, and concepts (if we go for C++20)Smart pointers where applicable
Switching to snake_case to align with STL (or maybe staying camelCase?)
Reducing macro usage where C++17/C++20 features can replace them
Two-parameter logging macros to fix path separator ambiguity (if switch camel_case)
The real question: When you evaluate a C++ library, what makes you close the tab? Is it the naming convention / coding style? The API modernity? Documentation? Something else entirely?
Some modernizations are crystal clear. Others are not. For example, is it worth switching to C++20, or will that lock out embedded developers (embedded Linux, Zephyr RTOS)? Which version of C++ are you using in your projects, and would you be willing to adopt a library that requires C++20?
If you're curious about the architecture: it's an event-driven, fire-and-forget model where services communicate through auto-generated proxies. The framework handles serialization, message routing, and thread-safe dispatch. A service consumer calls
requestXxx(param), the provider implements requestXxx(param) and calls responseXxx(result). All routing is automatic. The same code works for inter-thread, IPC, and network communication, where the transport remains transparent.Would love honest feedback. We're a small project trying to do things right.
https://redd.it/1r02j37
@r_cpp