Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Vladimir Prus <vladimir@codesourcery.com>
To: gdb@sources.redhat.com
Subject: Re: Move GDB to C++ ?
Date: Wed, 30 Jul 2008 07:18:00 -0000	[thread overview]
Message-ID: <g6p3ub$16i$1@ger.gmane.org> (raw)
In-Reply-To: <488F5CAA.8050902@gnu.org>

Andrew Cagney wrote:

> Vladimir Prus wrote:
>> Andrew Cagney wrote:
>>
>>   
>>> Instead of changing GDB to C++ and hoping the change will magically
>>> transform GDB's code base into a clean ideal design; should we instead
>>> be focused on trying to address what I suspect is the underlying
>>> motivation here - a desire to clean up and re-structure GDB's code base
>>> so that it more clearly corresponds to a more modern Object Oriented design?
>>>     
>>
>> I think that trying to use better design without support of a language for which
>> such design is a native one, would be considerably harder. GNOME is a perfect
>> example -- in attempt to use OOP in C, they have this GObject thing which is an
>> approximation of real classes, only harder to use. Ah, and there's even separate
>> tool, called GOP, that takes class definition in some meta-language and produces
>> .h and .c file. So, there's fairly complicate non-standard solution for
>> an already-solved problem.
>>   
> 
> The question I'm asking here is are we focusing on C++ as a solution,
> and mistakenly trying to rely on its features as a solution, when we
> should instead be first focusing on the design, what ever the
> implementation language?
> 
>> Let's use one example in GDB -- values. Presently, struct value has a
>> field lval_type, and in a number of places, a switch over lval_type is
>> made. This switch-over-type is a typical red-flag in OOP programs; in case
>> of GDB this makes it hard to understand what is exact behaviour of
>> lval_register, for example. CodeSourcery's implementation of register browing
>> required extending struct value, so that fetching a value goes via special
>> remote protocol packet. This ended up been not exactly nice. If struct value
>> was a base class with a defined interface, and each kind of value (rvalue, lvalue,
>> register, etc) were a derived class, then the internal logic of GDB would be
>> more clear, and adding new kinds of values would be much simpler.
>>   
> 
> For instance, an alternative value relationship we've seen proposed:
> 
>      value
>          has-a type
>          has-a location
> 
>      location
>          has-a 1:N piece
> 
>     piece
>         is-a memory piece
>         is-a register piece
>         is-a constant piece
> 
> (credit to tthomas for this refined design) which removes gdb's
> limitation of a value having a single [register] location.  This is a
> design alternative, not an implementation alternative.  Once we've
> concurred on the design we can implement it using language-of-the-day.
> 
> If, in attempting to make these changes we find that the C
> implementation truly cumbersome then we've a compelling story for
> language change.    This is assuming that the intent here is find ways
> to allow greater architectural reform in GDB (and a language change is
> just an aid to that goal).  You seem to at least be agreeing with this?

The intent, at least for me, is to be more productive hacking on GDB. One
approach to that goal is replacing emulation of classes and exceptions with
native language constructs. Another approach is to change internal architecture.
And when changing internal architecture, it's desirable to have the help of 
implementation language.

We already have existing architecture that works, and the implementation is
truly cumbersome in my opinion. So why spend even more time first
redesigning bits of GDB, then implementing new design in C, and then decide
that, oh, yes, this is truly truly cumbersome.

- Volodya



  parent reply	other threads:[~2008-07-30  7:07 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 [this message]
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
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='g6p3ub$16i$1@ger.gmane.org' \
    --to=vladimir@codesourcery.com \
    --cc=gdb@sources.redhat.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