From: Roland Orre <orre@nada.kth.se>
Cc: Joris van der Hoeven <TeXmacs@math.u-psud.fr>
Subject: Re: Efficiency and flexibility of hash-tables
Date: 10 Feb 2003 16:00:42 +0100 [thread overview]
Message-ID: <1044889242.1033.310.camel@localhost> (raw)
In-Reply-To: <rmiu1fcnrhj.fsf@fnord.ir.bbn.com>
On Mon, 2003-02-10 at 15:24, Greg Troxel wrote:
> Maybe one could re-use the GLib code, they have resizing hash tables.
>
Wouldn't glib's implementation cause gc problems?
Today there are three different types of hash tables: vectors, weak hash
tables and double weak hash tables. The only real difference between
them is how their content is handled by gc, "tag wise" they are close.
My idea (which I haven't revealed yet) about resizing hash tables may be
considered a little "dirty" but when thinking about it I don't really
see a problem with it.
My idea was to modify the routines
scm_c_make_hash_table in hashtab.c,
scm_make_weak_key_hash_table and scm_make_weak_value_hash_table in
weaks.c so they allocate three extra items in the mallocated block
but hides this to the gc by setting the actual vector length to the
ordinary one. These extra items will contain the actual size in
number of items stored in the table and current upper and lower
thresholds for resizing the table.
Then modify the routines:
scm_hash_fn_create_handle_x and scm_hash_fn_remove_x in hashtab.c
to do resizing when needed, using a table of prime numbers for next
and previous size.
The advantage with this solution is that it's minimalistic, i.e. all
routines working with hash tables will behave exactly the same. Only
the routines changing the number of items in the table will be affected.
The reason why I don't see a problem with this solution is that the
free() routine uses information which is independent from guile's view
about the size of the allocated memory block.
The only disadvantage I see is the risk that someone are not using
the routine "make-hash-table" in their code. If they use "normal"
vectors as hash tables it may cause segmentation fault, but this is
not a serious one as I see it.
Comments?
Best regards
Roland Orre
> This prompted a few questions:
>
> Would it be reasonable for guile to depend on glib?
> I wouldn't mind, but I suspect others would view this as a problem.
>
> If not, would a 'guile-glib' package that has interfaces to the glib
> functions be appropriate. The new guile-gobject might support this
> already.
>
> Didn't Jay Glascoe have auto-resizing hash tables implemented before?
>
> Using glib's implementation (in glib, not copying the code) really
> seems preferable, either natively in guile or via (possibly enhanced)
> guile-gobject.
>
> Greg Troxel <gdt@ir.bbn.com>
_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-user
next prev parent reply other threads:[~2003-02-10 15:00 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-08 11:00 Efficiency and flexibility of hash-tables Joris van der Hoeven
2003-02-08 13:57 ` Roland Orre
2003-02-08 14:14 ` Joris van der Hoeven
2003-02-08 14:55 ` Roland Orre
2003-02-08 15:14 ` Joris van der Hoeven
2003-02-08 15:31 ` Mikael Djurfeldt
2003-02-11 11:14 ` Joris van der Hoeven
2003-02-11 11:28 ` Joris van der Hoeven
2003-02-11 12:50 ` Mikael Djurfeldt
2003-02-08 15:44 ` Roland Orre
2003-02-10 9:55 ` Andreas Rottmann
2003-02-10 14:24 ` Greg Troxel
2003-02-10 15:00 ` Roland Orre [this message]
2003-02-10 16:52 ` Mikael Djurfeldt
2003-02-10 17:09 ` Roland Orre
2003-02-10 17:11 ` Mikael Djurfeldt
2003-02-11 13:59 ` Resizing hash tables in Guile Mikael Djurfeldt
2003-02-11 17:34 ` Roland Orre
2003-02-12 11:41 ` Marius Vollmer
2003-02-12 16:10 ` Marius Vollmer
2003-02-12 17:53 ` Mikael Djurfeldt
2003-02-12 20:17 ` Roland Orre
2003-02-13 9:35 ` Mikael Djurfeldt
2003-02-13 13:55 ` Harvey J. Stein
2003-02-13 14:24 ` Joris van der Hoeven
2003-02-13 18:30 ` Harvey J. Stein
2003-02-13 20:02 ` Paul Jarc
2003-02-13 9:52 ` Joris van der Hoeven
2003-02-12 20:55 ` Rob Browning
2003-02-13 10:43 ` Mikael Djurfeldt
2003-02-12 20:47 ` Efficiency and flexibility of hash-tables Paul Jarc
2003-02-12 21:58 ` Roland Orre
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
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1044889242.1033.310.camel@localhost \
--to=orre@nada.kth.se \
--cc=TeXmacs@math.u-psud.fr \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).