This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Switching to C++ by default in 4.8


On Tue, 2012-04-10 at 18:24 +0200, Michael Matz wrote:
> Hi,
> 
> On Tue, 10 Apr 2012, Xinliang David Li wrote:
> 
> > >> >             exp->as_component_ref().get_field() ..
> 
> > > Actually it's not questionable.  The above stuff is _horrible_.
> > 
> > Specifics please.  It is _horrible_ because you are more used to the 
> > existing way and the new style does not match your taste or they are 
> > very hard to understand and use?
> 
> Your style (I wouldn't call it The New Style) is visually distracting, and 
> therefore harder to understand and use, longer to write and full of 
> syntactic noise without any whitespace.  Quite frankly, how anyone could 
> ever say that
> 
>   exp->as_component_ref().get_field()
> 
> is easier to read/write/use than
> 
>   GET_FIELD_DECL (exp)
> 
> (say when we #define GET_FIELD_DECL(x) TREE_OPERAND(x,1)), with or without 
> all-caps, is completely beyond me.  I pretty much hope that we never see 
> the ugliness of the first way in GCCs code base.  Even in C++ it's 
> possible to write non-spaghetti code.

I don't see how this is spaghetti code.  It it slightly longer, but
that's just the case in this specific example.

Think about programmers new to GCC for a second, and about code
completion tools.  It seems to me that with such a tool it's much easier
to navigate from exp to the field, than having to scan through a much
larger number of accessor functions / macros (GET_*).  The former
example starts at the source (exp) and yields/"builds" the result; the
latter names some function and then says applies it to the source.  Why
is the former so much worse?  To me, the former's structure is easier to
see, and if I would have to put the spaghetti tag on something, then the
latter.

Also, how do you envision code completion to work with the latter?  Type
exp first, and then have it show which functions take arguments
compatible with exp, and then replace it?  If a programmer doesn't
remember all of the GCC APIs, code completion tools are very convenient.

Torvald


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]