Functional requirements:
- functionality and API equivalent to ROS2 C++ client library (C++ client library has most advanced feature set right now)
- Reference - C++ client library: rclcpp
- functionality equivalent to ROS2 C++ client library (C++ client library user code depends on idl generator)
- Reference - C++ idl generator: rosidl_generator_cpp
- functionality to support building D client library packages
- Reference - C++ ament build integration: ament_cmake
Non-functional requirements:
- compiler: LDC (D compiler comparison: most platforms and architectures supported)
- integration of tool based static code analysis into build tool (other client libraries aim at integration of tools extensively)
- C++ client library reference: integration of CppCheck (common code flaw checking) into Ament (non-/CMake based) built environment for C++ client library ament_cppcheck / ament_cmake_cppcheck
- C++ client library reference: integration of CppLint and clang format (style guide checking) into Ament (non-/CMake based) build environment for C++ client library ament_cpplint / ament_cmake_cpplint / ament_clang_format
- D: D-Scanner
- design by contract (C++ does not support this but will probably support it if ROS2 begins to support C++17)
- unit tests (other client libraries aim at extensive unit testing as well)
- C++ client library reference: rclcpp/test
- rmw (ROS2 middleware) integration tests (C++ client library aims at extensive middleware integration testing as well)
- C++ client library reference: system_tests/test_communication
- test of communiaction (publish/subscribe/request/response)
- test with all primitive and builtin types
- test with every available rmw implementation
- security tests (C++ client library aims at extensive security testing):
- C++ client library reference: system_tests/test_security)
- test nodes, publishers and subscribers with DDS-Security
- API tests (other client libraries like C++ client library aims at extensive API testing as well)
- C++ client library API tests
- Reference - ROS2 launch (test runner): launch
- Reference - Helper scripts for tests using the launch tool: launch_testing
- code coverage (usually web services like coveralls.io which support statement coverage analysis are used to analyze open source ROS2 packages)
- coverage type: statement coverage
- web service based coverage analysis for D could be executed with coveralls.io via doveralls
- priorization of software quality attributes (over the mid to long term I expect the following priorization for C/C++ ROS2 packages)
- security
- reliability
- performance
How a client library (here: C++) fits into the big picture.
- A ROS2 client library (
{client libraries}) interfaces the rcl. Therclis the interface and implementation of client library functionality which is common for all client libraries. It is implemented in C. The rmw is implemented in C as well. - For every language specific client library a generator for lanuage specific ROS2 interface is required, e.g. rosidl_generator_cpp generates the ROS2 interfaces in C++ (not shown in the diagram).
- In the example below the
{DDS vendor}(Fast-RTPS) and{rmw impl}(rmw_fastrtps_cpp) are both implemented in C++. However these layers are independent of the client library and there is no need to implement them in D.

