From: Andrew Cagney <cagney@gnu.org>
To: Ian Lance Taylor <ian@wasabisystems.com>
Cc: gdb@sources.redhat.com
Subject: Re: GDB is the GNU project's native debugger
Date: Tue, 30 Nov 2004 16:26:00 -0000 [thread overview]
Message-ID: <41AB9D83.90607@gnu.org> (raw)
In-Reply-To: <m3ekirm7wl.fsf@gossamer.airs.com>
>>It's a complex problem and as such has middle ground and negotiation
>>dependant on the scale of the work:
>>
>>- Corinna recently changed an architecture interface and, since it was
>>straight forward, did the 'busywork'.
>>
>>- The frame code, on the other hand, was anything but straight
>>forward, it instead started with a single architecture and then
>>expanded as back end maintainers did their (much appreciated) stuff.
>>In the end though, a long list of architectures were simply deleted
>>(should I have instead done the 'busywork' of frameifying the ns32k?).
>>
>>Perhaps you can expand on your point by explaining where you would
>>strike up the balance for making an invasive change such as
>>asynchronous native (proc, ptrace) support. GDB has many many
>>non-async embedded targets, but only two natives. Should we predicate
>>the work on the modification of all the embedded inferiors? Or should
>>we accept that the work is so key to GDB's future as a native that we
>>can tolerate a few short term problems?
>
>
> I think that in general you expanded on my point better than I could.
> As you say, it's a complex problem. You are proposing a simple
> principle, and my concern is that once such a thing is adopted it will
> be used to enforce simplistic solutions to complex problems. As I
> said before, the principle itself seems unobjectionable in many
> contexts. My concern is that it will be applied in cases where it is
> too simple.
> Or, to put it another way: why do we need an overly simple statement
> about what we agree is a complex issue?
My post has context. I've recently encountered situtations where
developers were insisting that I test my changes on ULTRIX; or that I
seek approval when making trivial and pre-announced changes.
As such we all need a reality check. Remind ourselves what the overall
objective here is; and against what baseline we should each measure our
requests.
> On your specific issue, I think that async native support would
> require either a flag day or supporting two separate interfaces for
> some time. A flag day is only acceptable if all major architectures
> can be converted simultaneously. Off the cuff I would say that
> supporting two separate interfaces would have to last for at least a
> year. Yes, this is hard. Yes, it leads to more duplicated work. A
> clean and elegant program is a goal, but it is not the only goal.
I waited a year, and nothing happened.
I think it is first important to recognize that the pressure placed on
GDB is different to that encountered by other members of the toolchain -
binutils and gcc. GCC, for instance, has a simple pipeline
architecture: FRONTEND <tree> MIDDLEEND ... <tree> BACKEND. Individual
FRONT, MIDDLE and BACK ends can largely be developed in isolation, and
plugged in and out at will. Only when the <tree> is changed, as
occurred when moving from RTL to SSA, to things get scary and slow
careful engineering processes (as again applied to SSA) are required.
Contrast that to GDB, where underlying the architecture is a relatively
complex web of objects (there's an O-O model fighting to get out of the
C code :-). When developing such a model a key process has to be
refactoring the code - modifying the object model (changing
relationships and interfaces) so that the next change can be
accommodated - and a key attribute of refactoring is that each has a
short cycle: taking days, and not years to complete.
If we look over GDB's [short list of not so] recent core changes, we
find that for the true inovations such as:
- multi-arch started '98, not finished
- frames started dec? '02, finished nov '04
- event-loop started '98, finished jun? '04
- regcache started dec? '02, not finished
the innovator did (I pushed through 3/4 of the above) implement backward
compatibility so that out-of-date systems were given an opportunity to
update and consequently waited-a-year or more. When we examine how each
of these changes panned out, though - the extra year makes no
difference. Only when compatibility code starts to be removed (or I
stand my ground and require an update as an predicate to another
contributions) that we see activity to revive out of out-of-date systems
(and then only for a limited set).
You make the assertion:
> A clean and elegant program is a goal, but it is not the only goal.
We're not talking here about clean or elegant code. Rather we're
discussing GDB's backlog of refactorings (struct value, struct location,
struct symbol, ...); each made of many smaller changes; each
establishing another part of a robust OO model; each dependant on
earlier work; each ensuring a more maintainable code base; and most
importantly each a prereq to adding advanced features to gdb.
Such refactorings need to be performed in time periods that amount to
weeks, and not the months or years we currently see.
Is such a rate of change possible if we're required to constantly
schedule flag days, or wait for a year?
Andrew
next prev parent reply other threads:[~2004-11-29 22:08 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-16 17:14 Andrew Cagney
2004-11-16 17:26 ` Paul Breed
2004-11-16 17:35 ` Kris Warkentin
2004-11-16 20:09 ` Mark Kettenis
2004-11-16 17:50 ` Ian Lance Taylor
2004-11-16 21:48 ` Eli Zaretskii
2004-11-17 1:24 ` Andrew Cagney
2004-11-17 1:53 ` Ian Lance Taylor
2004-11-17 22:59 ` Andrew Cagney
2004-11-19 5:05 ` Ian Lance Taylor
2004-11-19 7:19 ` Kip Macy
2004-11-30 16:26 ` Andrew Cagney [this message]
2004-12-07 14:46 ` Ian Lance Taylor
2004-11-16 18:11 ` Dave Korn
2004-11-16 18:33 ` Ian Lance Taylor
2004-11-16 18:43 ` Dave Korn
2004-11-16 18:47 ` Ian Lance Taylor
2004-11-16 19:59 ` Mark Kettenis
2004-11-17 0:31 ` Steven Johnson
2004-11-16 19:30 Paul Schlie
2004-11-16 19:51 Paul Schlie
2004-11-16 21:11 ` Paul Breed
2004-11-16 23:58 ` Elena Zannoni
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=41AB9D83.90607@gnu.org \
--to=cagney@gnu.org \
--cc=gdb@sources.redhat.com \
--cc=ian@wasabisystems.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