A few features and improvements we would like to highlight in this release:
* The first non-beta release.
* `rviz` including a few plugins (the Windows version will follow in a few weeks)
* Different initialization options for message data structures in C++
* Logging API improvements, now also used in the demos
* Time support in C++ with different clocks
* wait-for-service support in the Python client library
* Draft implementation of [REP 149](http://www.ros.org/reps/rep-0149.html) specifying format 3 of the package manifest files
While there is always more work to be done we consider several of the core components to be ready to be used by a broader audience. Therefore we have dropped the "beta" label and will support Ardent for one year, fixing bugs and keeping the release working, especially on platforms with rolling dependency releases (OS X / Windows). We'll start a regular six month release cycle for newer versions of ROS 2. While we do aim to keep the API as stable as possible, we can't guarantee 100% API compatibility between releases. That being said, whether or not ROS 2 is ready to be used for your application or if you can switch from ROS 1 to ROS 2 right now depends on the exact feature set and requirements of your use case. Please check the [features page](https://github.com/ros2/ros2/wiki/Features) as well as the [roadmap](https://github.com/ros2/ros2/wiki/Roadmap) for more information.
[quote="nathan.jackson, post:4, topic:3371"]
Can someone please explain or link to an example explaining this part of the release notes?
Different initialization options for message data structures in C++
In ROS1, the structs/class members that were generated for messages were always value-initialized. While this is convenient, and prevents users from accessing uninitialized memory by accident, it can also be a waste of time. For example, a camera driver may construct an Image message with a large number of zeros in it, and then immediately overwrite the zeros with the actual image data. There was no need to spend the time to set the zeros, since it was going to be immediately overwritten.
In ROS2, we now have the option to control that behavior. The default behavior is like ROS1; all struct members are value-initialized. However, during message class construction, it is possible to pass an initializer to the class to control how members are initialized (see the documentation here: http://design.ros2.org/articles/generated_interfaces_cpp.html#constructors).