public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Lawrence Crowl <crowl@google.com>
To: Jakub Jelinek <jakub@redhat.com>
Cc: Xinliang David Li <davidxl@google.com>,
	Richard Guenther <richard.guenther@gmail.com>,
		Bernd Schmidt <bernds@codesourcery.com>,
	Gabriel Dos Reis <gdr@integrable-solutions.net>,
		David Edelsohn <dje.gcc@gmail.com>,
	Diego Novillo <dnovillo@google.com>, gcc <gcc@gcc.gnu.org>
Subject: Re: Switching to C++ by default in 4.8
Date: Wed, 11 Apr 2012 02:24:00 -0000	[thread overview]
Message-ID: <CAGqM8fYoo9=mEjCJeY92y9FGLqoBqHg4KStkyEGUvV18My9YpA@mail.gmail.com> (raw)
In-Reply-To: <20120410163905.GK6148@sunsite.ms.mff.cuni.cz>

On 4/10/12, Jakub Jelinek <jakub@redhat.com> wrote:
> That when stepping through code in the debugger you keep
> enterring/exiting these one liner inlines, most of them really
> should be at least by default considered just as normal statements
> (e.g. glibc heavily uses artificial attribute for those, still
> gdb doesn't hide those by default).

You do want to step into those inline functions, except when you do.
In the short term, we can make the debugger behave as though they did
not exist.  In the longer term, we really want debugging tools that
help C++ programmers.  One way to get there is to use C++ ourselves.

> > The above is just quickly cooked up examples. A carefully
> > designed C++ based API can be self documenting and make the
> > client code very readable. It is hard to believe that there is
> > no room for improvement in GCC.
>
> Do you have examples?  E.g. I haven't touched gold, because,
> while it is a new C++ codebase, looks completely unreadable to
> me, similarly libdw C++ stuff.  A carefully designed C based API
> can be self documenting and make the code very readable as well,
> often more so.

If you just look at any decently sized code base, it'll look pretty
much unreadable.  The question is how quickly can someone who learns
the base vocabulary can produce reasonable modifications.

There are many places where C++ can help substantially.  For example:

() The C++ postfix member function call syntax means that following
a chain of attributes is a linear read of the expression.  With C
function call syntax, you need to read the expression inside out.

() C++ has both overloaded functions and member functions, so you can
use the same verb to talk about several different kinds of objects.
With C function names, we have to invent a new function name for
each type.  Such names are longer and burden both the author and
the reader of the code.

() Standard C++ idioms enable mashing program components with ease.
The C++ standard library is based on mixing and matching algorithms
and data structures, via the common idiom of iterators.

() The overloadable operator new means that memory can be
_implicitly_ allocated in the right place.

() Constructors and destructors reduce the number of places in the
code where you need to do explicit memory management. Without garbage
collection, leaks are less frequent.  With garbage collection, you
have much less active garbage, and can run longer between collection
runs.  Indeed, a conservative collector would be sufficient.

() Constructors and destructors also neatly handle actions that
must occur in pairs.  The classic example is mutex lock and unlock.
Within GCC, timevar operations need to happen in pairs.

() Class hierarchies (even without virtual functions) can directly
represent type relationships, which means that a debugger dump of
a C++ type has little unnecessary information, as opposed to the
present union of structs approach with GCC trees.

() Class hierarchies also mean that programmers can distinguish
in the pointer types that a function needs a decl parameter,
without having to say 'all trees' versus 'a very specific tree'.
The static type checking avoids run-time bugs.

I have written compilers in both C and C++.  I much prefer the
latter.

-- 
Lawrence Crowl

  parent reply	other threads:[~2012-04-11  2:24 UTC|newest]

Thread overview: 182+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-03 17:38 Diego Novillo
2012-04-03 19:39 ` Paweł Sikora
2012-04-03 20:52   ` Ian Lance Taylor
2012-04-03 21:34     ` Paweł Sikora
2012-04-20 20:14       ` Joseph S. Myers
2012-04-04  5:19     ` Basile Starynkevitch
2012-04-04  1:13 ` David Edelsohn
2012-04-04  4:00   ` Ian Lance Taylor
2012-04-04  4:42     ` Miles Bader
2012-04-04  8:32   ` Gabriel Dos Reis
2012-04-04  9:06     ` Richard Guenther
2012-04-04  9:10       ` Gabriel Dos Reis
2012-04-04  9:15       ` Gabriel Dos Reis
2012-04-04  9:59         ` Richard Guenther
2012-04-04 10:02           ` Richard Guenther
2012-04-04 11:20       ` Diego Novillo
2012-04-04 11:38         ` Richard Guenther
2012-04-04 14:12           ` Tom Tromey
2012-04-04 14:45             ` Richard Guenther
2012-04-04 14:48               ` Richard Guenther
2012-04-14  1:35           ` Chiheng Xu
2012-04-14  9:09             ` Robert Dewar
2012-04-14 10:03               ` Chiheng Xu
2012-04-14 11:13                 ` Robert Dewar
2012-04-14 11:41                 ` Jonathan Wakely
2012-04-14 10:39               ` Gabriel Dos Reis
2012-04-14 11:08                 ` Robert Dewar
2012-04-16  9:37                   ` Chiheng Xu
2012-04-16  9:38                     ` Jonathan Wakely
2012-04-17  9:11                     ` Robert Dewar
2012-04-05 12:40         ` Pedro Lamarão
2012-04-05 13:05           ` Richard Guenther
2012-04-05 14:21             ` Diego Novillo
2012-04-05 14:24               ` Richard Guenther
2012-04-05 14:36                 ` Diego Novillo
2012-04-05 20:17                   ` David Edelsohn
2012-04-05 20:36                     ` Gabriel Dos Reis
2012-04-06  0:11                       ` David Edelsohn
2012-04-09 10:37                         ` Richard Guenther
2012-04-09 15:07                           ` David Edelsohn
2012-04-10 22:04               ` Pedro Lamarão
2012-04-10 22:56                 ` Diego Novillo
2012-04-04 11:53       ` Bernd Schmidt
2012-04-04 12:04         ` Richard Guenther
2012-04-04 14:59           ` Diego Novillo
2012-04-04 17:54           ` Lawrence Crowl
2012-04-05  9:18             ` Richard Guenther
2012-04-05 20:07               ` Lawrence Crowl
2012-04-09 10:40                 ` Richard Guenther
2012-04-09 17:56                   ` Lawrence Crowl
2012-04-09 18:22                     ` Jakub Jelinek
2012-04-09 18:52                       ` Lawrence Crowl
2012-04-09 18:54                         ` Jakub Jelinek
2012-04-09 21:15                           ` Lawrence Crowl
2012-04-10 11:09                         ` Richard Guenther
2012-04-11  1:36                           ` Lawrence Crowl
2012-04-11  6:55                             ` Jakub Jelinek
2012-04-13 23:26                               ` Dave Korn
2012-04-11  9:32                             ` Richard Guenther
2012-04-14  3:07                       ` Chiheng Xu
2012-04-14  3:04                   ` Chiheng Xu
2012-04-14 21:25                     ` Lawrence Crowl
2012-04-09 23:34           ` Xinliang David Li
2012-04-10  8:46             ` Jakub Jelinek
2012-04-10 12:26               ` Michael Matz
2012-04-10 15:51                 ` David Edelsohn
2012-04-10 16:05                   ` Gabriel Dos Reis
2012-04-10 16:13                     ` Diego Novillo
2012-04-11  9:17                       ` Richard Guenther
2012-04-11 16:35                         ` Xinliang David Li
2012-04-10 16:12                 ` Xinliang David Li
2012-04-10 16:24                   ` Michael Matz
2012-04-10 17:08                     ` Xinliang David Li
2012-04-10 17:29                     ` Torvald Riegel
2012-04-10 18:00                       ` Eric Botcazou
2012-04-10 19:56                         ` Torvald Riegel
2012-04-10 21:13                           ` Eric Botcazou
2012-04-10 21:29                             ` Torvald Riegel
2012-04-10 23:15                               ` Eric Botcazou
2012-04-11 20:57                                 ` Torvald Riegel
2012-04-11 21:15                                   ` Eric Botcazou
2012-04-11 21:43                                     ` Torvald Riegel
2012-04-13 23:33                                     ` Dave Korn
2012-04-11  9:24                       ` Richard Guenther
2012-04-11 12:58                         ` Torvald Riegel
2012-04-11 13:13                           ` Richard Guenther
2012-04-11 13:23                             ` Gabriel Dos Reis
2012-04-11 14:19                             ` Torvald Riegel
2012-04-11 17:24                             ` Xinliang David Li
2012-04-11 18:17                               ` Andrew Pinski
2012-04-11 20:02                                 ` Xinliang David Li
2012-04-12  5:08                                 ` Ian Lance Taylor
2012-04-12  6:12                                   ` Miles Bader
2012-04-12  6:22                                     ` James Dennett
2012-04-11 18:26                               ` Jonathan Wakely
2012-04-11 18:41                                 ` Pedro Alves
2012-04-11 20:00                                 ` Xinliang David Li
2012-04-11 20:05                                   ` Jonathan Wakely
2012-04-12  5:10                                     ` Ian Lance Taylor
     [not found]                           ` <12130397.ZsTVnyYbKR@pawels>
2012-04-11 13:14                             ` Richard Guenther
2012-04-11 13:24                           ` Bernd Schmidt
2012-04-11 17:31                             ` Xinliang David Li
2012-04-11 18:37                               ` Basile Starynkevitch
2012-04-11 18:52                                 ` Gabriel Dos Reis
2012-04-11 20:14                                 ` Xinliang David Li
2012-04-12 15:51                                 ` Ludovic Courtès
2012-04-13 23:45                             ` Dave Korn
2012-04-11 14:41                           ` Jonathan Wakely
2012-04-11 17:13                           ` Xinliang David Li
2012-04-11 19:30                           ` Tobias Burnus
2012-04-11 20:44                             ` Torvald Riegel
2012-04-13 23:48                             ` Dave Korn
2012-04-13 23:37                           ` Dave Korn
2012-04-10 17:48                     ` DJ Delorie
2012-04-10 19:21                     ` Dave Korn
2012-04-10 16:23               ` Xinliang David Li
2012-04-10 16:39                 ` Jakub Jelinek
2012-04-10 16:43                   ` Gabriel Dos Reis
2012-04-10 16:47                     ` Diego Novillo
2012-04-12 19:40                       ` Tom Tromey
2012-04-12 19:42                         ` Diego Novillo
2012-04-12 19:51                           ` Tom Tromey
2012-04-10 17:37                   ` Torvald Riegel
2012-04-10 21:39                     ` Miles Bader
2012-04-10 22:32                       ` Bernd Schmidt
2012-04-10 23:28                         ` Eric Botcazou
2012-04-10 23:35                           ` Gabriel Dos Reis
2012-04-11  7:49                             ` Eric Botcazou
2012-04-11  7:55                               ` Gabriel Dos Reis
2012-04-11  8:11                                 ` Eric Botcazou
2012-04-11 11:41                                   ` Jeff Law
2012-04-11  7:02                           ` Jakub Jelinek
2012-04-11  7:46                             ` Gabriel Dos Reis
2012-04-11  7:51                               ` Jakub Jelinek
2012-04-11 12:37                               ` Bernd Schmidt
2012-04-11 12:47                                 ` Richard Guenther
2012-04-11 17:10                                   ` Xinliang David Li
2012-04-11 13:20                                 ` Gabriel Dos Reis
2012-04-11 13:29                                   ` Jakub Jelinek
2012-04-11 13:44                                     ` Gabriel Dos Reis
2012-04-11 14:45                                     ` David Edelsohn
2012-04-11 17:41                                       ` Xinliang David Li
2012-04-11 17:08                                 ` Xinliang David Li
2012-04-11  8:07                             ` Eric Botcazou
2012-04-11  9:45                               ` Richard Guenther
2012-04-10 17:54                   ` Xinliang David Li
2012-04-11 12:44                     ` Marek Polacek
2012-04-11 16:49                       ` Xinliang David Li
2012-04-11  2:24                   ` Lawrence Crowl [this message]
2012-04-11  9:43                     ` Richard Guenther
2012-04-11 16:47                       ` Xinliang David Li
2012-04-11 20:48                       ` Paweł Sikora
2012-04-11 22:34                       ` Lawrence Crowl
2012-04-12  9:28                     ` Chiheng Xu
2012-04-12 10:30                       ` Richard Guenther
2012-04-14  1:15                         ` Chiheng Xu
2012-04-14  6:30                           ` Chiheng Xu
2012-04-14  9:08                           ` Robert Dewar
2012-04-14 10:38                             ` Chiheng Xu
2012-04-14 11:06                               ` Robert Dewar
2012-04-10 16:42               ` Paweł Sikora
2012-04-10 19:23                 ` Dave Korn
2012-04-10 20:39                   ` Andrew Pinski
2012-04-11  9:27                   ` Richard Guenther
2012-04-11  1:01               ` Lawrence Crowl
2012-04-14  3:40               ` Chiheng Xu
2012-04-14  3:48               ` Chiheng Xu
2012-04-15 20:11                 ` Chiheng Xu
2012-04-16  7:48                   ` Duncan Sands
2012-04-16  9:23                     ` Chiheng Xu
2012-04-16 18:53                   ` Oleg Endo
2012-04-17 22:03                     ` Chiheng Xu
2012-04-18  0:15                       ` Oleg Endo
2012-04-10 11:14             ` Richard Guenther
2012-04-10 16:33               ` Xinliang David Li
2012-04-14  2:41           ` Chiheng Xu
2012-04-04 11:22   ` Diego Novillo
2012-04-04  7:07 ` Tristan Gingold
2012-04-04 13:13   ` Ian Lance Taylor
2012-04-04 13:32     ` Tristan Gingold
2012-04-04 14:37       ` Gabriel Dos Reis
2012-04-04 14:52         ` Tristan Gingold

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGqM8fYoo9=mEjCJeY92y9FGLqoBqHg4KStkyEGUvV18My9YpA@mail.gmail.com' \
    --to=crowl@google.com \
    --cc=bernds@codesourcery.com \
    --cc=davidxl@google.com \
    --cc=dje.gcc@gmail.com \
    --cc=dnovillo@google.com \
    --cc=gcc@gcc.gnu.org \
    --cc=gdr@integrable-solutions.net \
    --cc=jakub@redhat.com \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).