Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Michael Eager <eager@eagercon.com>
To: Stan Shebs <stanshebs@earthlink.net>
Cc: gdb@sourceware.org
Subject: Re: Move GDB to C++ ?
Date: Sun, 20 Jul 2008 14:36:00 -0000	[thread overview]
Message-ID: <48823195.6000802@eagercon.com> (raw)
In-Reply-To: <487658F7.1090508@earthlink.net>

Stan Shebs wrote:
> As many know, there is a project afoot to investigate the recoding of 
> GCC from C into C++. I believe the C++ idea was briefly touched on for 
> GDB at the summit, although I don't remember much discussion. Anyway, 
> this would be a good time to start thinking about it, and if people are 
> generally in favor of the idea, we can start small by tweaking the 
> sources to be C++-friendly, avoiding keywords and so forth; GCC has a 
> new warning flag -Wcxx-compat that can help.
> 
> For my part, I think we should do it. GDB has quite a bit of object-like 
> structure internally, and while in the past it was taking a bit of a 
> chance to rely on the availability and reliability of C++ compilers, 
> those concerns are now generally outdated; I'm not sure any of the 
> potential problem hosts are even supported any longer.

I'll offer my two cents worth.

Last year, I suggested porting portions of GDB to C++.  This had
been previously discussed, but was basically shouted down for a variety
of reasons.  I'm glad to see it being discussed again.

Some long time ago, I converted Sun Microsystem's DBX initially to
the C-compatible subset of C++, then extended it with classes and a few
other C++ features in areas where the feature matched the logic, such as
handling symbol tables or object file structures.  No templates, no
STL, retained previous exception handling; essentially, the conversion
was to "C with Classes".  This led to a significant improvement in
maintainability and reduced bug count.

Many parts of GDB (I think of gdbarch) appear to be coded to implement
objects, classes, and members, exactly if it had been generated from
C++ objects.  It seems to me that these would convert to "C with Classes"
easily, with improvement in both performance and clarity.

Despite having served on the C++ Standards Committee some time ago,
and having taught many C++ classes, I am not very fond of C++ for many
of the reasons that others have mentioned.  Templates and the template
libraries can generate error messages which range the entire spectrum
from obscure to incomprehensible.  Debugging support for several features
is spotty.  The remedy for the latter is to improve GDB support for these
features.  For the former, avoid features which are problematic.

The problems that I see in converting GDB to C++ are that it is huge
(600K+ lines) and not really modular.  The source tree is very
shallow, with architecture-dependent and -independent code mixed in
with core gdb functionality, user interface, host support and other
stuff (some of which may not be functional, like gdblib).  This makes
any wholesale conversion of GDB somewhat daunting.

Here is the approach I would take to converting GDB to C++:
   1)  Build existing GDB with C++ and correct any C/C++ incompatibilities.
   2)  Identify functional modules (e.g., cli, target support, gdbarch)
   3)  For each functional module:
      3a)  Create subdirectory for functional module
      3b)  Build library for functional module and link with GDB
      3c)  Convert from C-style to C++-style interface (if necessary)
      3d)  Document module functionality

It seems to me that this could be done incrementally with limited
impact on existing development.  I also think that this could have
many other beneficial effects on GDB, including making it easier
to understand and modify, making it less brittle, and perhaps even
working toward a fully functional gdblib.  I think that making GDB
more modular is the key -- this allows conversion to C++ to be done
in smaller bites, rather than wholesale.




-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077


  parent reply	other threads:[~2008-07-19 18:25 UTC|newest]

Thread overview: 128+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-10 18:46 Stan Shebs
2008-07-10 19:01 ` Mark Kettenis
2008-07-10 20:01   ` Stan Shebs
2008-07-10 20:04     ` Paul Koning
2008-07-10 20:40       ` Andrew Cagney
2008-07-10 21:31         ` Stan Shebs
2008-07-10 22:30           ` Nick Roberts
2008-07-10 23:49             ` Stan Shebs
2008-07-11  6:14           ` Vladimir Prus
2008-07-11 12:40           ` Andrew Cagney
2008-07-11 12:23         ` Robert Dewar
2008-07-11 16:03       ` Dave Korn
2008-07-10 21:54     ` Mark Kettenis
2008-07-11  6:26       ` Joel Brobecker
2008-07-11  8:55         ` Vladimir Prus
2008-07-11  9:23           ` Andreas Schwab
2008-07-11  9:32             ` Vladimir Prus
2008-07-11 14:27           ` Andrew Cagney
2008-07-11 14:34             ` Daniel Jacobowitz
2008-07-11 14:54             ` Paul Koning
2008-07-11 15:30             ` Pedro Alves
2008-07-11 16:09         ` Dave Korn
2008-07-11 16:26           ` Daniel Jacobowitz
2008-07-12  5:41             ` Robert Dewar
2008-07-29 17:29   ` Andrew Cagney
2008-07-29 18:08     ` Vladimir Prus
2008-07-29 18:09       ` Thiago Jung Bauermann
2008-07-29 19:05       ` Andrew Cagney
2008-07-29 19:06         ` Thiago Jung Bauermann
2008-07-29 19:35           ` Thiago Jung Bauermann
2008-07-30  7:18         ` Vladimir Prus
2008-07-30 12:11         ` André Pönitz
2008-07-30 12:35           ` Mark Kettenis
2008-07-30 15:39             ` André Pönitz
2008-07-30 17:52             ` Eli Zaretskii
2008-07-30 17:47           ` Eli Zaretskii
2008-07-29 19:32       ` Eli Zaretskii
2008-07-29 19:45         ` Stan Shebs
2008-07-30 18:18           ` Eli Zaretskii
2008-07-30 19:05             ` Stan Shebs
2008-07-30 19:15               ` Eli Zaretskii
2008-07-30 19:42                 ` Stan Shebs
2008-07-31 15:37                   ` Andrew Cagney
2008-07-30 19:30               ` Andrew Cagney
2008-07-30 19:56               ` Mark Kettenis
2008-07-31  9:03                 ` André Pönitz
2008-07-31  9:33                   ` Alpár Jüttner
2008-07-31 10:07                   ` Alpár Jüttner
2008-07-30  5:24         ` Tom Tromey
2008-07-30 18:30           ` Eli Zaretskii
2008-07-30 20:29             ` David Carlton
2008-07-30 20:30               ` Eli Zaretskii
2008-07-30 20:38               ` Eli Zaretskii
2008-07-31  4:52               ` Michael Veksler
2008-07-31 20:03             ` Ian Lance Taylor
2008-07-30  9:25         ` Vladimir Prus
2008-07-30 11:55           ` Salvatore Lionetti
2008-07-30 18:45           ` Eli Zaretskii
2008-07-30 19:19             ` Stan Shebs
2008-07-29 23:59     ` Mark Kettenis
2008-07-10 19:35 ` Jan Kratochvil
2008-07-10 22:41 ` Tom Tromey
2008-07-11  9:57   ` Andrew STUBBS
2008-07-11 11:44     ` Daniel Jacobowitz
2008-07-11 12:43       ` Pierre Muller
2008-07-11 13:14     ` Andrew Cagney
2008-07-13 23:18   ` Tom Tromey
2008-07-14  0:15     ` Nick Roberts
2008-07-14  8:49       ` Vladimir Prus
2008-07-14 13:21         ` Robert Dewar
2008-07-14 15:54           ` Vladimir Prus
2008-07-14 15:58             ` Robert Dewar
2008-07-14 16:03             ` Robert Dewar
2008-07-14 16:23               ` Vladimir Prus
2008-07-14 16:39                 ` Robert Dewar
2008-07-14 17:53                   ` Vladimir Prus
2008-07-16 19:06                     ` Thiago Jung Bauermann
2008-07-14 17:54                 ` Mark Kettenis
2008-07-14 16:12             ` Daniel Jacobowitz
2008-07-14 16:15               ` Robert Dewar
2008-07-14 16:18               ` Robert Dewar
2008-07-14 16:21                 ` Bob Rossi
2008-07-14 16:31               ` Vladimir Prus
2008-07-14 19:00   ` Tom Tromey
2008-07-12  3:30 ` Michael Snyder
2008-07-14 14:54   ` Andrew Cagney
2008-07-20 14:36 ` Michael Eager [this message]
2008-07-31  8:40 ` Vladimir Prus
2008-07-31 14:37   ` Alpár Jüttner
2008-07-31 22:30     ` GDB to C++ issue: deletion Paul Hilfinger
2008-07-31 22:40       ` Daniel Jacobowitz
2008-07-31 22:58         ` Paul Hilfinger
2008-07-31 23:25           ` Daniel Jacobowitz
2008-08-01  5:38       ` Ian Lance Taylor
2008-08-01  8:52       ` André Pönitz
2008-08-01  9:53         ` Eli Zaretskii
2008-08-01 12:57           ` Daniel Jacobowitz
2008-08-01 14:57             ` Paul Koning
2008-08-01 15:31               ` Eli Zaretskii
2008-08-01 13:51           ` André Pönitz
     [not found]           ` <20080801125124.GA13594@caradoc.them.org>
     [not found]             ` <uzlnwn9jq.fsf@gnu.org>
2008-08-01 13:59               ` Daniel Jacobowitz
2008-08-01 15:17                 ` Eli Zaretskii
2008-08-01 15:29                   ` Daniel Jacobowitz
2008-08-01 15:38                     ` Eli Zaretskii
2008-08-12 14:40                       ` Problem with can_use_hw_breakpoint Jeremy Bennett
2008-08-12 14:51                         ` Eli Zaretskii
2008-08-12 14:56                           ` Jeremy Bennett
2008-07-31 20:00   ` Move GDB to C++ ? Eli Zaretskii
2008-08-01 13:13     ` Daniel Jacobowitz
2008-08-01 13:47       ` Eli Zaretskii
2008-08-01 14:04         ` André Pönitz
2008-08-01 15:20           ` Eli Zaretskii
2008-08-04  9:34             ` André Pönitz
2008-08-01 14:21         ` Daniel Jacobowitz
2008-08-01 15:23           ` Eli Zaretskii
2008-08-01 16:14         ` Vladimir Prus
2008-08-01 19:20           ` Eli Zaretskii
2008-08-02  5:55             ` Vladimir Prus
2008-08-02  8:07               ` Eli Zaretskii
2008-08-02  9:22                 ` Vladimir Prus
2008-08-02  9:47                   ` Eli Zaretskii
2008-08-02 10:00                     ` Vladimir Prus
2008-08-02 10:16                       ` Eli Zaretskii
2008-08-01 13:55       ` Mark Kettenis
2008-08-01 14:11         ` André Pönitz
2008-08-01 15:02         ` Stan Shebs
2008-08-01 15:05         ` Vladimir Prus
2008-08-01 15:17           ` Daniel Jacobowitz

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=48823195.6000802@eagercon.com \
    --to=eager@eagercon.com \
    --cc=gdb@sourceware.org \
    --cc=stanshebs@earthlink.net \
    /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