You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mesos.apache.org by Dominic Hamon <dh...@twopensource.com> on 2014/08/29 02:16:43 UTC

Re: Path forward to C++11.

Tomorrow, I'm planning to land changes that complete the deprecation cycle
for the with-cxx11 configure flag. From this point on, the compiler you use
will need to support the subset of C++11 language features checked by our
configure script. These are:

- static_assert
- right angle brackets
- decltype
- rvalue references
- auto

This change has been tested on g++-4.4, g++-4.6, g++-4.8, and clang 3.4.
g++-4.7 is no longer supported due to MESOS-1095
<https://issues.apache.org/jira/browse/MESOS-1095>.

This means that these language features can be used in mesos with impunity.
See MESOS-750 <https://issues.apache.org/jira/browse/MESOS-750> for more
discussion.

The future plan is to extend the configure script check and add to the C++
language whitelist.

Thanks
- dominic


On Wed, Feb 26, 2014 at 2:05 PM, Dominic Hamon <dh...@twopensource.com>
wrote:

> Thank you for the breakdown, that's really helpful.
>
> It looks like with 4.8.1 as the minimum supported version, we're looking
> very good for all features: http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
>
> We may need to consider distributing the runtime library or statically
> linking it to allow users to run the binary from the rpm.
>
>
> On Wed, Feb 26, 2014 at 1:59 PM, Benjamin Mahler <
> benjamin.mahler@gmail.com> wrote:
>
>> Being explicit about compiler version requirements sounds great!
>>
>> GCC is still our explicitly supported compiler toolchain and it's how we
>> test releases for production purposes, at least at Twitter.
>>
>> We have been supporting Clang as a best effort so far, but I agree it
>> would
>> be great to document supported versions. Taking a look at some of our CI,
>> I
>> see Clang 3.3. is building Mesos.
>>
>>  Looking at CI for gcc, I see the following building with C++11:
>>
>> *Mesos builds with C++11:*
>> CentOS 5 - with devtoolset-2 gcc 4.8.1
>> CentOS 6 - with devtoolset-2 gcc 4.8.1
>> Fedora 19 - gcc 4.8.2
>> Fedora 20 - gcc 4.8.2
>> Ubuntu 13.10 - gcc 4.8.x
>>
>> *Mesos does not build with C++11:*
>> CentOS 5 - gcc 4.1.2
>> CentOS 6 - gcc 4.4.7
>> Ubuntu 12.10 - gcc 4.7.x
>> Ubuntu 12.04 - gcc 4.6.x
>>
>> So we already do not support gcc 4.7 for C++11.
>>
>> It's important here to make the distinction that this is for development,
>> ideally those are running from RPMs are agnostic to the gcc version used.
>> But, I suppose the c++11 shared library will not present on the machine.
>>
>> On Wed, Feb 26, 2014 at 12:08 PM, Dominic Hamon <dhamon@twopensource.com
>> >wrote:
>>
>> > Forwarding from the right account to avoid Spam filters ...
>> >
>> > ---------- Forwarded message ----------
>> > From: Dominic Hamon <dh...@twitter.com>
>> > Date: Wed, Feb 26, 2014 at 11:46 AM
>> > Subject: Re: Path forward to C++11.
>> > To: dev@mesos.apache.org
>> >
>> >
>> > What do you mean by 'C++11 support' in the compiler? g++4.7 supports
>> some
>> > features, not all.
>> >
>> > I think we need to define the set of C++11 features we want to support
>> > first before making any decisions regarding timeline. Then we can look
>> at
>> > the state of the nation in regards to C++11 feature support in different
>> > compilers on different OSs, and which are available out of the box. We
>> > don't want to limit our community involvement by shutting out certain
>> > platforms for development.
>> >
>> > Ideally, we'd be able to say something like "0.19.0 builds on g++4.7 and
>> > clang 3.3 or greater" and "0.20.0 builds on g++4.8 and clang 3.4 or
>> > greater" instead of blanket C++11 support.
>> >
>> >
>> >
>> >
>> > On Wed, Feb 26, 2014 at 10:20 AM, Benjamin Mahler <
>> > benjamin.mahler@gmail.com
>> > > wrote:
>> >
>> > > Update on MESOS-750:
>> > >
>> > > 0.17.0 is being released with the --with-cxx11 capability at configure
>> > > time.
>> > >
>> > > I chatted with some of the committers and we'd like to move forward
>> with
>> > > the final two phases of MESOS-750 as follows:
>> > >
>> > > 0.18.0: --with-cxx11 will become the _default_. --without-cxx11 will
>> be
>> > > available for those who wish to use older compilers.
>> > >
>> > > 0.19.0: c++11 required; Mesos will not build with a compiler that does
>> > not
>> > > have c++11 support.
>> > >
>> > > If there are any objections please speak now. If not, I'll update the
>> > > ticket to reflect the current path towards C++11.
>> > >
>> > >
>> > > On Mon, Oct 28, 2013 at 8:09 PM, Benjamin Mahler
>> > > <be...@gmail.com>wrote:
>> > >
>> > > > Thanks for the heads up, we're likely to upgrade to 3.3.6, but I've
>> yet
>> > > to
>> > > > confirm that it builds with c++11.
>> > > >
>> > > >
>> > > > On Thu, Oct 24, 2013 at 8:10 AM, Tim St Clair <ts...@redhat.com>
>> > > wrote:
>> > > >
>> > > >> +1 to the approach.
>> > > >>
>> > > >> FWIW made a quick update to the zookeeper.spec (
>> > > >> http://koji.fedoraproject.org/koji/buildinfo?buildID=465529) and
>> > > updated:
>> > > >>
>> > > >> export CC='gcc -std=c11'
>> > > >> export CXX='g++ -std=c++11'
>> > > >>
>> > > >> prior to 'configure', and it failed compilation pretty quickly.
>> > > >> It may make sense to track integration issues and
>> > versions...somewhere.
>> > > >>
>> > > >> So when --with-cpp11 is enabled, it can hard check on version >=
>> > > >> fixed_version.
>> > > >>
>> > > >> Cheers,
>> > > >> Tim
>> > > >>
>> > > >> ----- Original Message -----
>> > > >> > From: "Benjamin Mahler" <be...@gmail.com>
>> > > >> > To: dev@mesos.apache.org
>> > > >> > Sent: Wednesday, October 23, 2013 4:46:49 PM
>> > > >> > Subject: Path forward to C++11.
>> > > >> >
>> > > >> > As discussed in MESOS-750 <
>> > > >> https://issues.apache.org/jira/browse/MESOS-750>,
>> > > >> > we would like to move to C++11.
>> > > >> >
>> > > >> > The proposed plan is to do this in phases to allow everyone time
>> to
>> > > >> adjust
>> > > >> > to this change:
>> > > >> >
>> > > >> >
>> > > >> > Phase 1: Send an email to the dev@ list soliciting objections /
>> > > >> feedback.
>> > > >> > We're currently here. :)
>> > > >> >
>> > > >> > Phase 2: Add an option --with-cpp11 that defaults to false.
>> > > >> >
>> > > >> > Phase 3: At this point, developers can and should begin using
>> > > >> --with-cpp11.
>> > > >> > In this phase, we'll need to make sure the project and
>> dependencies
>> > > can
>> > > >> > compile with c++11.
>> > > >> >
>> > > >> > Phase 4: Default to --with-cpp11 but still leave the option in
>> order
>> > > to
>> > > >> > allow folks to turn this off if needed. At this point, we still
>> > cannot
>> > > >> rely
>> > > >> > on C++11.
>> > > >> >
>> > > >> > Phase 5: Remove --with-cpp11 leaving no ability to turn it off.
>> From
>> > > >> this
>> > > >> > point forward, we can begin to use C++11 features
>> unconditionally.
>> > > >> >
>> > > >> >
>> > > >> > Please reply to this thread with any objections, comments, or
>> > advice!
>> > > To
>> > > >> > get a better sense of how others feel about this (I currently
>> only
>> > > know
>> > > >> > that some of the other core contributors are on board), please
>> feel
>> > > >> free to
>> > > >> > reply with something as simple as a +1 as well.
>> > > >> >
>> > > >> > Thanks!
>> > > >> > Ben
>> > > >> >
>> > > >>
>> > > >> --
>> > > >> Cheers,
>> > > >> Tim
>> > > >>
>> > > >
>> > > >
>> > >
>> >
>> >
>> >
>> > --
>> > Dominic Hamon | @mrdo | Twitter
>> > *There are no bad ideas; only good ideas that go horribly wrong.*
>> >
>>
>
>

Re: Path forward to C++11.

Posted by Dominic Hamon <dh...@twopensource.com>.
This has now been submitted.


On Thu, Aug 28, 2014 at 5:16 PM, Dominic Hamon <dh...@twopensource.com>
wrote:

> Tomorrow, I'm planning to land changes that complete the deprecation cycle
> for the with-cxx11 configure flag. From this point on, the compiler you use
> will need to support the subset of C++11 language features checked by our
> configure script. These are:
>
> - static_assert
> - right angle brackets
> - decltype
> - rvalue references
> - auto
>
> This change has been tested on g++-4.4, g++-4.6, g++-4.8, and clang 3.4.
> g++-4.7 is no longer supported due to MESOS-1095
> <https://issues.apache.org/jira/browse/MESOS-1095>.
>
> This means that these language features can be used in mesos with
> impunity. See MESOS-750 <https://issues.apache.org/jira/browse/MESOS-750> for
> more discussion.
>
> The future plan is to extend the configure script check and add to the C++
> language whitelist.
>
> Thanks
> - dominic
>
>
> On Wed, Feb 26, 2014 at 2:05 PM, Dominic Hamon <dh...@twopensource.com>
> wrote:
>
>> Thank you for the breakdown, that's really helpful.
>>
>> It looks like with 4.8.1 as the minimum supported version, we're looking
>> very good for all features: http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
>>
>> We may need to consider distributing the runtime library or statically
>> linking it to allow users to run the binary from the rpm.
>>
>>
>> On Wed, Feb 26, 2014 at 1:59 PM, Benjamin Mahler <
>> benjamin.mahler@gmail.com> wrote:
>>
>>> Being explicit about compiler version requirements sounds great!
>>>
>>> GCC is still our explicitly supported compiler toolchain and it's how we
>>> test releases for production purposes, at least at Twitter.
>>>
>>> We have been supporting Clang as a best effort so far, but I agree it
>>> would
>>> be great to document supported versions. Taking a look at some of our
>>> CI, I
>>> see Clang 3.3. is building Mesos.
>>>
>>>  Looking at CI for gcc, I see the following building with C++11:
>>>
>>> *Mesos builds with C++11:*
>>> CentOS 5 - with devtoolset-2 gcc 4.8.1
>>> CentOS 6 - with devtoolset-2 gcc 4.8.1
>>> Fedora 19 - gcc 4.8.2
>>> Fedora 20 - gcc 4.8.2
>>> Ubuntu 13.10 - gcc 4.8.x
>>>
>>> *Mesos does not build with C++11:*
>>> CentOS 5 - gcc 4.1.2
>>> CentOS 6 - gcc 4.4.7
>>> Ubuntu 12.10 - gcc 4.7.x
>>> Ubuntu 12.04 - gcc 4.6.x
>>>
>>> So we already do not support gcc 4.7 for C++11.
>>>
>>> It's important here to make the distinction that this is for development,
>>> ideally those are running from RPMs are agnostic to the gcc version used.
>>> But, I suppose the c++11 shared library will not present on the machine.
>>>
>>> On Wed, Feb 26, 2014 at 12:08 PM, Dominic Hamon <dhamon@twopensource.com
>>> >wrote:
>>>
>>> > Forwarding from the right account to avoid Spam filters ...
>>> >
>>> > ---------- Forwarded message ----------
>>> > From: Dominic Hamon <dh...@twitter.com>
>>> > Date: Wed, Feb 26, 2014 at 11:46 AM
>>> > Subject: Re: Path forward to C++11.
>>> > To: dev@mesos.apache.org
>>> >
>>> >
>>> > What do you mean by 'C++11 support' in the compiler? g++4.7 supports
>>> some
>>> > features, not all.
>>> >
>>> > I think we need to define the set of C++11 features we want to support
>>> > first before making any decisions regarding timeline. Then we can look
>>> at
>>> > the state of the nation in regards to C++11 feature support in
>>> different
>>> > compilers on different OSs, and which are available out of the box. We
>>> > don't want to limit our community involvement by shutting out certain
>>> > platforms for development.
>>> >
>>> > Ideally, we'd be able to say something like "0.19.0 builds on g++4.7
>>> and
>>> > clang 3.3 or greater" and "0.20.0 builds on g++4.8 and clang 3.4 or
>>> > greater" instead of blanket C++11 support.
>>> >
>>> >
>>> >
>>> >
>>> > On Wed, Feb 26, 2014 at 10:20 AM, Benjamin Mahler <
>>> > benjamin.mahler@gmail.com
>>> > > wrote:
>>> >
>>> > > Update on MESOS-750:
>>> > >
>>> > > 0.17.0 is being released with the --with-cxx11 capability at
>>> configure
>>> > > time.
>>> > >
>>> > > I chatted with some of the committers and we'd like to move forward
>>> with
>>> > > the final two phases of MESOS-750 as follows:
>>> > >
>>> > > 0.18.0: --with-cxx11 will become the _default_. --without-cxx11 will
>>> be
>>> > > available for those who wish to use older compilers.
>>> > >
>>> > > 0.19.0: c++11 required; Mesos will not build with a compiler that
>>> does
>>> > not
>>> > > have c++11 support.
>>> > >
>>> > > If there are any objections please speak now. If not, I'll update the
>>> > > ticket to reflect the current path towards C++11.
>>> > >
>>> > >
>>> > > On Mon, Oct 28, 2013 at 8:09 PM, Benjamin Mahler
>>> > > <be...@gmail.com>wrote:
>>> > >
>>> > > > Thanks for the heads up, we're likely to upgrade to 3.3.6, but
>>> I've yet
>>> > > to
>>> > > > confirm that it builds with c++11.
>>> > > >
>>> > > >
>>> > > > On Thu, Oct 24, 2013 at 8:10 AM, Tim St Clair <tstclair@redhat.com
>>> >
>>> > > wrote:
>>> > > >
>>> > > >> +1 to the approach.
>>> > > >>
>>> > > >> FWIW made a quick update to the zookeeper.spec (
>>> > > >> http://koji.fedoraproject.org/koji/buildinfo?buildID=465529) and
>>> > > updated:
>>> > > >>
>>> > > >> export CC='gcc -std=c11'
>>> > > >> export CXX='g++ -std=c++11'
>>> > > >>
>>> > > >> prior to 'configure', and it failed compilation pretty quickly.
>>> > > >> It may make sense to track integration issues and
>>> > versions...somewhere.
>>> > > >>
>>> > > >> So when --with-cpp11 is enabled, it can hard check on version >=
>>> > > >> fixed_version.
>>> > > >>
>>> > > >> Cheers,
>>> > > >> Tim
>>> > > >>
>>> > > >> ----- Original Message -----
>>> > > >> > From: "Benjamin Mahler" <be...@gmail.com>
>>> > > >> > To: dev@mesos.apache.org
>>> > > >> > Sent: Wednesday, October 23, 2013 4:46:49 PM
>>> > > >> > Subject: Path forward to C++11.
>>> > > >> >
>>> > > >> > As discussed in MESOS-750 <
>>> > > >> https://issues.apache.org/jira/browse/MESOS-750>,
>>> > > >> > we would like to move to C++11.
>>> > > >> >
>>> > > >> > The proposed plan is to do this in phases to allow everyone
>>> time to
>>> > > >> adjust
>>> > > >> > to this change:
>>> > > >> >
>>> > > >> >
>>> > > >> > Phase 1: Send an email to the dev@ list soliciting objections /
>>> > > >> feedback.
>>> > > >> > We're currently here. :)
>>> > > >> >
>>> > > >> > Phase 2: Add an option --with-cpp11 that defaults to false.
>>> > > >> >
>>> > > >> > Phase 3: At this point, developers can and should begin using
>>> > > >> --with-cpp11.
>>> > > >> > In this phase, we'll need to make sure the project and
>>> dependencies
>>> > > can
>>> > > >> > compile with c++11.
>>> > > >> >
>>> > > >> > Phase 4: Default to --with-cpp11 but still leave the option in
>>> order
>>> > > to
>>> > > >> > allow folks to turn this off if needed. At this point, we still
>>> > cannot
>>> > > >> rely
>>> > > >> > on C++11.
>>> > > >> >
>>> > > >> > Phase 5: Remove --with-cpp11 leaving no ability to turn it off.
>>> From
>>> > > >> this
>>> > > >> > point forward, we can begin to use C++11 features
>>> unconditionally.
>>> > > >> >
>>> > > >> >
>>> > > >> > Please reply to this thread with any objections, comments, or
>>> > advice!
>>> > > To
>>> > > >> > get a better sense of how others feel about this (I currently
>>> only
>>> > > know
>>> > > >> > that some of the other core contributors are on board), please
>>> feel
>>> > > >> free to
>>> > > >> > reply with something as simple as a +1 as well.
>>> > > >> >
>>> > > >> > Thanks!
>>> > > >> > Ben
>>> > > >> >
>>> > > >>
>>> > > >> --
>>> > > >> Cheers,
>>> > > >> Tim
>>> > > >>
>>> > > >
>>> > > >
>>> > >
>>> >
>>> >
>>> >
>>> > --
>>> > Dominic Hamon | @mrdo | Twitter
>>> > *There are no bad ideas; only good ideas that go horribly wrong.*
>>> >
>>>
>>
>>
>