On Wed, Apr 4, 2012 at 11:15 AM, Gabriel Dos Reis
<g...@integrable-solutions.net> wrote:
> On Wed, Apr 4, 2012 at 4:06 AM, Richard Guenther
> <richard.guent...@gmail.com> wrote:
>> On Wed, Apr 4, 2012 at 10:32 AM, Gabriel Dos Reis
>> <g...@integrable-solutions.net> wrote:
>>> On Tue, Apr 3, 2012 at 8:13 PM, David Edelsohn <dje....@gmail.com> wrote:
>>>> On Tue, Apr 3, 2012 at 1:37 PM, Diego Novillo <dnovi...@google.com> wrote:
>>>>>
>>>>> We would like to start the process to make GCC 4.8 build in C++ mode by
>>>>> default.
>>>>>
>>>>> The mechanics of the change are simple enough.  I volunteer to test 
>>>>> changing
>>>>> the default on all primary targets (assuming I can get them from the GCC
>>>>> build farm).
>>>>
>>>> I appreciate the motivation, but this may cause major problems on
>>>> non-GNU/Linux platforms.  Testing on all primary targets is not
>>>> enough.
>>>>
>>>> Do you expect GCC to be able to bootstrap starting from a vendor C++
>>>> compiler or will this require G++?
>>>
>>> I would expect that we use C++03, and any C++ compiler.
>>
>> Yes.  Thus, for stage1 we should force -std=c++03 -pedantic if we
>> build with GCC to
>> avoid creep in of GNU features.
>
> Fully agreed.
>
>> Btw, I think we should only start forcing C++ when 1) there is a
>> branch/patch out
>> that shows benefit from using C++.  I previously mentioned that I'd like to 
>> see
>> 2) a patch that _properly_ wraps a C++ class for consumption by our garbage
>> collector (thus, not a hack that works for a specific case but infrastructure
>> that we think will work for _all_ cases, including libstdc++ container use).
>
> I was actually thinking starting with abstractions that do not interact 
> directly
> with the memory manager, because I would like us to get our feet wet
> before doing the full plunge.  Such a work would be confined to a part of
> the compiler (say the C++ front-end).  Any particular reason you would
> like to start
> with the garbage collector which touches just about anything?

Because the garbage collector is the thing that will block reasonable use
of C++ if we cannot get it working.  And because of the fear that if we
don't show how to do it _right_ first then people will start inventing a dozent
different ways of making it work for a special case.

Note that I don't think it will touch everything.  I remember we discussed how
to do it and basically settled on something like

template <class T>
struct gc_mark {
  static void mark (T *) {}
}

and specializations that actually do something meaningful.

which we can provide specializations for all existing types walked by
gengtype trivially.  This would provide a way to support GCing objects
whose types are not "supported" by gengtype - gengtype would simply
emit gc_mark<T>::mark () calls which are trivially optimized away
if there is nothing to mark.

That said - somebody would need to prototype that, and VEC is a good
candidate I think because it's used both with GC and non-GC memory.

Richard.

> -- Gaby

Reply via email to