JEP draft: Implement C++14 Language Features

OwnerKim Barrett
TypeInfrastructure
ScopeJDK
StatusSubmitted
Componenthotspot
Reviewed byMikael Vidstedt
Endorsed byMikael Vidstedt
Created2018/07/23 14:30
Updated2018/11/10 14:49
Issue8208089

Summary

Introduce selected C++14 language features into the HotSpot C++ source code.

Description

Through JDK 11, the C++ language features utilized by the HotSpot C++ and JDK C++ code have been limited to the C++98/03 language standards. With JDK 11, the code has been updated to support building with newer versions of the C++ standard, although it is not yet using any new features. This includes being able to build with recent versions of various compilers that support C++11/14 language features.

The purpose of this JEP is to formally allow C++ source code changes within HotSpot and the JDK which take advantage of some C++14 standard language features.

Changes to the Build System

To take advantage of C++14 language features, there may be build-time changes required, depending on the platform compiler. Minimum acceptable versions of the various platform compilers also need to be specified. The desired language standard should be specified explicitly; later compiler versions might default to a later, and possibly incompatible, language standard.

For Windows: Visual Studio 2017 is required for JDK 11. (Earlier versions will generate a configure-time warning and may or may not work.) For Visual Studio 2017 the default C++ standard is C++14. The /std:c++14 option should be added. Support for older versions will be dropped entirely.

For Linux: Replace the -std=gnu++98 compiler option with -std=c++14. The minimum supported version of gcc is TBD.

For macOS: Replace the -std=gnu++98 compiler option with -std=c++14. The minimum supported version of clang is TBD.

For Solaris: Add the -std=c++14 compiler option. Remove the existing standard library selection option (-library=stlport4). Remove the linking options for using stlport4 or no library (-library=%none, -nolib). The minimum supported version of the compiler is Oracle Developer Studio 12.6.

Changes to C++ Usage

There are existing restrictions and best practice recommendations for C++ usage by HotSpot code, based on the C++98/03 language standard. These are described in the HotSpot Style Guide.

Similar restrictions and guidelines for features of more recent language standards will be added to that document. They will be described by a table of permitted features and another of excluded features. Use of permitted features may be unconditional or may have some restrictions or additional guidance. Use of excluded features is forbidden in HotSpot code.

(This JEP does not propose any usage or style changes for C++ code in the JDK that is outside of HotSpot. The rules are already different for HotSpot and non-HotSpot code. For example, C++ exceptions are used in some non-HotSpot code, but are disallowed in HotSpot by build-time options.)

There is a third category, undecided features, about which the HotSpot community has not reached a consensus, or possibly discussed at all. Use of these features is also forbidden.

Note, however, that the use of some language features may not be immediately obvious and may accidentally slip in anyway, since the compiler will accept them. As always, the code review process is the main defense against this.

Proposed changes to a feature's categorization are approved by rough consensus of the HotSpot Group members, as determined by the Group Lead. Such changes should be documented as updates to the Style Guide.

Lists of new features for C++11 and C++14, along with links to their descriptions, can be found in the online documentation for some of the compilers and libraries:

As a rule of thumb, permitting features which simplify writing, and especially reading, code should be encouraged.

HotSpot has largely avoided using the C++ Standard Library. Some of the reasons for that may be obsolete (in particular, bugs encountered in early versions), while others may still be applicable (minimizing dependencies). Categorizing pieces of the Standard Library should go through the same process as language features.

An initial set of feature categorizations for HotSpot follows.

Permitted

Excluded

Similar lists for some other projects:

Risk and Assumptions

There may be other platforms with toolchains that do not yet support the C++14 language standard. In particular, the IBM XLC++ compiler used by the aix_ppc port provides very little C++11/14 support; version 13.1.3 seems to be the most recent version, and provides a small subset of the new language and library features, and will be rendered unusable once HotSpot code starts using almost any of the above proposed permitted features.

There may be bugs in the support for some new features by some compilers.