FreeBSD 10 is expected to have a completely new C++ stack. The reasons for this are partly legal and partly technical. The existing stack is covered by version 2 of the GPL, but newer versions from upstream are GPLv3. The new C++11 standard means that shipping an old version of the GNU stack is no longer acceptable. This talk will cover the various parts that were required for replacing this stack, the challenges and missing pieces that needed implementing and the advantages of the new stack.
Most of the Free Software world currently uses the C++ stack provided by the GNU project, including the C++ front end to the GNU Compiler Collection and libstdc++, the GNU implementation of the C++ standard library. In 2007, these projects switched to version 3 of the GNU General Public License. As a result, newer versions have not been imported into FreeBSD and other projects with similar licensing conditions. GCC 4.2.1 and the associated libstdc++ release are the most recent that can be shipped with these platforms.
Since this release, a new version of the C++ standard, C++11, has been published. This includes a number of significant changes to both the language and the standard library. Some, such as r-value references, allow much more efficient implementation of some fundamental parts of the standard template library and make a significant reworking - if not a complete rewrite - desirable.
These two factors, the license and the need to support the new standard, made it desirable for FreeBSD to switch to a completely new C++ stack. This includes a variety of components. At the bottom sits the C++ runtime library, responsible for providing features such as exception handling and run-time type information. On top of this is the C++ standard library, which provides the classes that the standard mandates. None of this, of course, would be any use without a C++ compiler.
This talk will examine each of the components in the new, permissively licensed, C++11 stack, including libcxxrt, libc++, clang / LLVM, and the modifications that were required to FreeBSD to support all of these. Some of these libraries required writing from scratch, while others required effort to port or integrate. They all depend on various features that are not specific to C++, some of which already existed and some of which required implementing from scratch.