From: Kevin Buettner <kevinb@cygnus.com>
To: Andrew Cagney <ac131313@cygnus.com>
Cc: gdb@sources.redhat.com
Subject: Re: Register group proposal
Date: Thu, 22 Feb 2001 11:02:00 -0000 [thread overview]
Message-ID: <1010222190206.ZM31735@ocotillo.lan> (raw)
In-Reply-To: <3A9547ED.E7CFE51C@cygnus.com>
On Feb 22, 12:10pm, Andrew Cagney wrote:
> > I've noticed, and I've spent time scratching my head over why structs are
> > used in various places.
>
> A struct is a poor persons opaque object.
But there are other ways to implement opaque objects and using typedef
gives you the freedom to later change your mind about the
implementation details without (also) having to change all of your
declarations.
E.g, regarding the pid/tid/lwp problem, the patch on the table uses
struct ptid * as the opaque object. As we've discussed in the past,
this has the problem of leaving dangling references in various places
if you attempt to wipe out the current set of ptids.
This problem may be solved via several different means. The object
in question could be implemented via a struct instead of a pointer
to a struct. Unfortunately, opaqueness is lost when you use this
approach. (But this does have the advantage of simplicity.)
Another approach to the problem (which does maintain opacity) is to
represent the ptid as an int which which is an index or key into some
other set of data structures that are maintained behind the scenes.
This representation avoids the dangling reference problem because the
accessors may validate the ptid (which, remember is a key) and do
something appropriate (e.g, generate an internal error or simply
return a canonical value) when the key is no longer valid.
Anyway, the advantage of using typedef is that we can change the
implementation at will. For example, we could start off with
struct ptid;
typedef struct ptid *ptid;
And later on we could change our minds and do the following:
typedef int ptid; /* ptid is an opaque handle which represents
the various identifiers which may be used
to represent an execution context. */
I agree that the use of typedef does cause you to have to be more careful
with your includes, but I think we're giving up a very powerful facility
by banning typedef.
next prev parent reply other threads:[~2001-02-22 11:02 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-20 20:56 Nick Duffek
2001-02-21 6:44 ` Fernando Nasser
2001-02-21 7:10 ` Nick Duffek
2001-02-21 7:36 ` Fernando Nasser
2001-02-21 7:58 ` Keith Seitz
2001-02-21 8:50 ` Andrew Cagney
2001-02-21 11:43 ` Andrew Cagney
2001-02-25 15:36 ` Nick Duffek
2001-02-21 11:43 ` Andrew Cagney
2001-02-21 12:28 ` Andrew Cagney
2001-02-21 12:18 ` Andrew Cagney
2001-02-22 0:59 ` Eli Zaretskii
[not found] ` <200102221237.f1MCbtX02766@rtl.cygnus.com>
2001-02-22 8:46 ` Andrew Cagney
2001-02-22 8:56 ` Keith Seitz
2001-02-22 9:20 ` Andrew Cagney
2001-02-22 5:17 ` Nick Duffek
2001-02-22 6:36 ` Fernando Nasser
2001-02-22 8:23 ` Andrew Cagney
2001-02-22 7:58 ` Andrew Cagney
2001-02-22 8:37 ` Nick Duffek
2001-02-22 9:12 ` Andrew Cagney
2001-02-22 10:15 ` Nick Duffek
2001-02-22 10:25 ` Andrew Cagney
2001-02-22 11:40 ` Eli Zaretskii
2001-02-22 11:02 ` Kevin Buettner [this message]
2001-02-22 12:08 ` Andrew Cagney
2001-02-22 8:16 ` Andrew Cagney
2001-02-21 3:00 Stephane Carrez
2001-02-21 7:00 ` Nick Duffek
2001-02-21 9:34 ` Andrew Cagney
2001-02-22 9:19 Michael Elizabeth Chastain
2001-02-23 2:52 Bernard Dautrevaux
2001-02-24 15:43 ` Nick Duffek
2001-02-26 18:21 ` Andrew Cagney
2001-02-27 10:30 ` Jim Kleck
2001-02-27 11:24 ` Per Bothner
2001-02-27 13:44 ` Jim Kleck
2001-02-27 15:17 ` Andrew Cagney
2001-02-26 5:29 Bernard Dautrevaux
2001-02-26 9:28 ` Christopher Faylor
2001-02-26 10:56 ` Andrew Cagney
2001-02-26 11:28 ` Christopher Faylor
2001-02-26 17:02 ` Andrew Cagney
2001-02-27 8:53 ` Christopher Faylor
2001-02-27 9:57 ` Andrew Cagney
2001-02-28 1:59 Bernard Dautrevaux
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=1010222190206.ZM31735@ocotillo.lan \
--to=kevinb@cygnus.com \
--cc=ac131313@cygnus.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