Standardizing the Data Distribution Service (DDS) API for Modern C++
C++ resurgence is spreading in many industries. International computer system standards that target C++ for application portability, are quickly adopting modern C++. At the Object Management Group (OMG)—an international standards consortium—the DDS-PSM-Cxx and the IDL2C++11 standards have been ahead of the curve. The DDS-PSM-Cxx is among the family of standards around the core Data Distribution Service (DDS) standard for developing high-performance distributed real-time systems. The DDS-PSM-Cxx standard, officially known as the “ISO/IEC C++ 2003 Language Platform Specific Mapping (PSM) for DDS”, was finalized in December 2012. DDS-PSM-Cxx provides a portable C++ API for programming DDS, which is modern, idiomatic, STL-friendly, expressive, safe, and efficient. DDS-PSM-Cxx targets C++03 and makes special provisions for ensuring portability in C++11 environment. This talk is about the “Whys” and “Hows” of the DDS-PSM-Cxx standard. It will be presented by a key contributor and a voting member of the OMG standardization task-force.
The presentation will begin by laying out the foundations of DDS—the data-centric publish-subscribe architecture for real-time distributed systems. You will learn the motivations, the objectives, and the high-level structure of the DDS-PSM-Cxx standard along with a “Hello, World!” application written using this modern C++ binding for DDS. The talk will further describe interesting aspects of the standard, such as the support for drop-in replacement of conforming vendor implementations and syntactic cues for vendor-specific extensions. This standard borrowed ideas from select Boost libraries without explicit dependencies on Boost. The presentation will dive deeper and describe the uses of various C++03 idioms (e.g., RAII, Type Erasure, Type-safe Enumerations, Method-chaining) to provide a clean, safe, and efficient API for DDS applications. The discussion will get most interesting with the exception-safety considerations that shaped the API in important ways. In particular, you will see how move-semantics can help design an exception-safe API. Finally, we will discuss the special rules adopted by the standard to allow conforming C++03 applications be forward compatible in C++11 environment.