From: Jim Blandy <jimb@redhat.com>
To: david carlton <carlton@math.stanford.edu>
Cc: gdb@sources.redhat.com
Subject: suggestion for dictionary representation
Date: Sun, 22 Sep 2002 19:59:00 -0000 [thread overview]
Message-ID: <200209230244.g8N2ieo21741@zenia.red-bean.com> (raw)
It seems to me that the `skip list' data structure simultaneously
meets a lot of the criteria that we're currently meeting by having
multiple representations. Skip lists:
- provide (probabalistic) log n access time
- are low overhead ("They can easily be configured to require an
average of 1 1/3 pointers per element (or even less).")
- are easy to build incrementally, and stay "balanced" automatically
- are obstack-friendly, since they don't involve realloc (as hash
tables do)
- are an ordered structure, which would support completion nicely (and,
by the way, make the `_Z' test for the C++ V3 ABI faster too)
- have a trivial iterator (walking the finest level of links)
- are pretty easy to understand
http://www.cs.umd.edu/~pugh points to a paper describing and analyzing
them.
Using skip lists, there'd be no need to distinguish `expandable' from
non-expandable blocks. This one structure would scale to handle both
local blocks and the global environment (depending on how we handle
lazy symbol reading --- I'd like a more generic and descriptive term
than "partial symbol tables").
The only remaining special case would be function blocks, in which
parameter symbols must to appear in the order they appear in the
source. I think it's pretty ugly to abuse the name array this way; it
introduces special cases in dumb places. This kludge could be removed
by changing the `function' member of `struct block' to a pointer to
something like this:
struct function_info {
struct symbol *sym;
int num_params;
struct symbol **params;
};
This would require extra space only for function blocks; non-function
blocks would remain the same size. And this info would only be
consulted when we actually wanted to iterate over the parameters.
This would clean up a bunch of loops in GDB that currently have to
iterate over all the symbols in a function's block and do a switch on
each symbol's address class to find the arguments. (And would this
also allow us to remove the arg/other distinction in enum
address_class? Dunno.)
But if we were to remove function blocks as a special case, there
would only need to be a single structure for representing levels of
the namespace.
(Daniel Berlin pointed me at skip lists a long time ago --- thanks!)
next reply other threads:[~2002-09-23 2:59 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-09-22 19:59 Jim Blandy [this message]
2002-09-22 20:11 ` Daniel Jacobowitz
2002-09-23 10:38 ` David Carlton
2002-09-23 17:34 ` Daniel Berlin
2002-09-23 18:39 ` Daniel Jacobowitz
2002-09-23 21:28 ` Daniel Berlin
2002-09-23 21:38 ` Eli Zaretskii
2002-09-23 21:44 ` Daniel Berlin
2002-09-23 21:47 ` Eli Zaretskii
2002-09-23 21:54 ` Daniel Berlin
2002-09-24 9:33 ` David Carlton
2002-09-24 10:42 ` Daniel Berlin
2002-09-24 10:53 ` David Carlton
2002-09-24 20:01 ` Jim Blandy
2002-09-24 20:50 ` Daniel Berlin
2002-09-23 18:28 ` Daniel Jacobowitz
2002-09-24 3:51 ` Paul N. Hilfinger
2002-09-24 19:52 ` Jim Blandy
2002-09-24 20:37 ` Elena Zannoni
2002-09-24 20:53 ` Daniel Berlin
2002-09-23 23:50 Jim Blandy
2002-09-24 6:19 ` Daniel Berlin
2002-09-24 7:06 ` Daniel Jacobowitz
2002-09-24 21:01 ` Jim Blandy
2002-09-25 5:54 ` Daniel Jacobowitz
2002-09-27 11:23 ` Jim Blandy
2002-09-27 11:28 ` Daniel Jacobowitz
2002-09-24 9:49 ` David Carlton
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=200209230244.g8N2ieo21741@zenia.red-bean.com \
--to=jimb@redhat.com \
--cc=carlton@math.stanford.edu \
--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