Hello,

We are in 2022 and Arrow C++ still strives to be compatible with C++11.

Maintaining compatibility has caused us growing pains since third-party libraries have begun requiring C++14 or later. Boost is warning that it will soon require C++14 (https://issues.apache.org/jira/browse/ARROW-17406). The Abseil C++ library, an indirect dependency of the GCS filesystem implementation, requires C++14. Other Google libraries such as GTest and Protocol Buffers are following suit and starting to require C++14 (see https://github.com/protocolbuffers/protobuf/commit/500cbd7b90fa7eb5716a3bbc6aa788ada028a1bf).

Moreover, C++11 has a set of limitations which causes quality of life issues in daily development. While C++14 wouldn't improve things much, being able to use C++17 features would be a large boost in maintainability and ease of development. This is demonstrated by a draft PR submitted one year ago (https://github.com/apache/arrow/pull/10414).


The requirement for C++11 compatibility was driven by packaging concerns due to old gcc versions being used in a couple contexts:

1) On old (but supported) Red Hat-like systems such as CentOS 7, the system gcc only supports C++11 (typically, gcc 4.8 on CentOS 7). However, one can install a Developer Toolset package to get a more modern development enviroment on such a system, that can produce binaries fully compatible with the base system libraries (see e.g. https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/, https://access.redhat.com/documentation/en-us/red_hat_developer_toolset/8/html/8.0_release_notes/dts8.0_release).

2) Building R packages for Windows and R < 4.0 uses an old toolchain based on gcc 4.9, which only supports C++11. However, building packages for R >= 4.0 uses a more recent toolchain based on gcc 8.3, supporting C++17. It is reasonable to drop support for R < 4.0 on Windows, as suggested in this JIRA comment: https://issues.apache.org/jira/browse/ARROW-17110?focusedCommentId=17571472&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17571472


All in all, I'm proposing that we move away from C++11 to a more recent version. Furthermore, I'm proposing that we move to C++17, as it provides considerable quality of life improvements and is more forward-looking than basing ourselves on C++14.

I do not expect significant pushback on this proposal, but if you have good reasons to oppose this move, please say so quickly. Otherwise, a formal vote will be launched soon.

Regards

Antoine.

Reply via email to