From: Pip Cet <pipcet@protonmail.com>
To: "Gerd Möllmann" <gerd.moellmann@gmail.com>
Cc: Eli Zaretskii <eliz@gnu.org>,
Helmut Eller <eller.helmut@gmail.com>,
Emacs Devel <emacs-devel@gnu.org>
Subject: Re: MPS: weak hash tables
Date: Tue, 02 Jul 2024 06:23:45 +0000 [thread overview]
Message-ID: <OktYqkHd_b7AXwEtc0mvHvPrccA9Tj0YLfA1ZqzP9INwnkRNiX5Mtr1RAnTb2lpmQxpQoja2VbgyxfNuNswvuSIZCu-htZNNHKZCelrgD7Q=@protonmail.com> (raw)
In-Reply-To: <m2cynwgxbf.fsf@pro2.fritz.box>
On Tuesday, July 2nd, 2024 at 05:47, Gerd Möllmann <gerd.moellmann@gmail.com> wrote:
> Pip Cet pipcet@protonmail.com writes:
>
> > Also, any opinions on :weakness 'key-or-value? Can we just not support it and use strong hash tables instead?
>
>
> So, after some more reading, I think I have an opinion. Let me read what
> it is :-)
>
> The design supports 1 vector of weak references, and 1 vector of
> strong references. So either keys or values can be weak but not both.
Why not? I may be missing something obvious, but the scan method is allowed to modify the scanned object, right? We're doing that in the weak-key case anyway.
So what I'm currently doing is creating a single vector containing all keys, then all values, for key-and-value hash tables. If the key gets splatted, the value gets splatted right away and everything works as it should. If the value gets splatted, we've already decided to keep alive the key, but that's okay as it's only a weak reference.
> Let's say that W(O) returns true when object O is references from weak
> references only. AFAICT, the implementation of W in MPS requires
> allocation with rank weak to get weak references.
That's my understanding too.
> key/value pairs are then removed from a hash table when
>
> Weakness Predicate
> ----------------------------------------
> key W(key)
> value W(value)
> key-and-value W(key) and W(value),
> key-or-value W(key) or W(value).
Hmm. I think I have key-and-value and key-or-value reversed, then...
> I'd say that neither key-and-value nor key-and-value can be
> implemented because both require 2 weak parts for implementing W.
Sorry, I still don't understand why.
> In Emacs itself, I see from git grep that :weakness key, value, and t
> are being used, where t means key-and-value. Haven't checked for which
> use cases t is used, though.
What surprised me is that there are plenty of hash tables that are both weak and use equal as a predicate. That doesn't make much sense to me...
> Anyway, we're better off than before :-).
On 64-bit systems. 32-bit systems are still broken, I'm afraid, and while my patch fixes the crash I've seen on i386 Debian, Eli's crash looked very different and may not be fixed by it.
Also, there's the whole caution thing about weak objects containing only unaligned words or words pointing directly to a base object, which is only relevant on Unix/i386, IIRC. (MPS emulates instructions to simulate fine-grained barriers, which is a really cool idea; I'd still like an option to turn it off though...). That would mean we have to replace Lisp_Objects and use the ptr member of our union (and that's the reason I'm using fixnums rather than plain integers for the hash).
Anyway, thanks a lot, so far. Sorry I'm being dense about the key-and-value thing.
Pip
next prev parent reply other threads:[~2024-07-02 6:23 UTC|newest]
Thread overview: 196+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-01 20:47 MPS: weak hash tables Gerd Möllmann
2024-07-01 21:16 ` Pip Cet
2024-07-01 23:10 ` Pip Cet
2024-07-02 4:19 ` Gerd Möllmann
2024-07-02 5:47 ` Gerd Möllmann
2024-07-02 6:23 ` Pip Cet [this message]
2024-07-02 6:55 ` Gerd Möllmann
2024-07-02 9:15 ` Pip Cet
2024-07-02 9:37 ` Gerd Möllmann
2024-07-02 10:11 ` Gerd Möllmann
2024-07-02 11:36 ` Gerd Möllmann
2024-07-02 13:15 ` Eli Zaretskii
2024-07-02 13:16 ` Gerd Möllmann
2024-07-02 13:42 ` Eli Zaretskii
2024-07-02 15:03 ` Pip Cet
2024-07-02 15:17 ` Helmut Eller
2024-07-02 15:35 ` Eli Zaretskii
2024-07-02 16:34 ` Pip Cet
2024-07-02 18:20 ` Eli Zaretskii
2024-07-02 20:16 ` Pip Cet
2024-07-03 6:30 ` Gerd Möllmann
2024-07-03 11:23 ` Eli Zaretskii
2024-07-03 11:28 ` Gerd Möllmann
2024-07-02 13:02 ` Eli Zaretskii
2024-07-02 12:45 ` Eli Zaretskii
2024-07-02 11:23 ` Helmut Eller
2024-07-03 6:11 ` Gerd Möllmann
2024-07-03 6:33 ` Pip Cet
2024-07-03 7:04 ` Gerd Möllmann
2024-07-03 7:24 ` Helmut Eller
2024-07-03 7:25 ` Pip Cet
2024-07-03 7:38 ` Gerd Möllmann
2024-07-03 8:26 ` Gerd Möllmann
2024-07-03 9:31 ` Pip Cet
2024-07-03 10:22 ` Gerd Möllmann
2024-07-03 10:41 ` Pip Cet
2024-07-03 11:17 ` Gerd Möllmann
2024-07-03 20:20 ` Pip Cet
2024-07-04 7:17 ` Gerd Möllmann
2024-07-04 15:24 ` Pip Cet
2024-07-04 16:53 ` Gerd Möllmann
2024-07-04 20:05 ` Pip Cet
2024-07-05 3:50 ` Gerd Möllmann
2024-07-05 12:08 ` Pip Cet
2024-07-05 12:54 ` Gerd Möllmann
2024-07-05 13:27 ` Eli Zaretskii
2024-07-05 20:35 ` Pip Cet
2024-07-06 6:10 ` Eli Zaretskii
2024-07-06 6:31 ` Pip Cet
2024-07-06 7:00 ` Eli Zaretskii
2024-07-06 7:40 ` Gerd Möllmann
2024-07-06 9:13 ` Pip Cet
2024-07-06 10:59 ` Eli Zaretskii
2024-07-05 18:14 ` Helmut Eller
2024-07-05 19:25 ` Pip Cet
2024-07-06 3:39 ` Gerd Möllmann
2024-07-06 5:58 ` Pip Cet
2024-07-06 6:20 ` Gerd Möllmann
2024-07-06 6:29 ` Pip Cet
2024-07-06 6:51 ` Gerd Möllmann
2024-07-06 6:46 ` Eli Zaretskii
2024-07-06 9:23 ` Pip Cet
2024-07-06 11:03 ` Eli Zaretskii
2024-07-06 3:38 ` Gerd Möllmann
2024-07-06 9:47 ` Helmut Eller
2024-07-06 10:38 ` Gerd Möllmann
2024-07-06 11:13 ` Eli Zaretskii
2024-07-06 13:50 ` Helmut Eller
2024-07-06 13:59 ` Eli Zaretskii
2024-07-06 14:38 ` Gerd Möllmann
2024-07-06 16:20 ` Helmut Eller
2024-07-06 16:33 ` Eli Zaretskii
2024-07-06 16:48 ` Helmut Eller
2024-07-06 17:21 ` Eli Zaretskii
2024-07-06 17:59 ` Helmut Eller
2024-07-06 18:14 ` Gerd Möllmann
2024-07-06 18:56 ` Eli Zaretskii
2024-07-06 11:37 ` Pip Cet
2024-07-06 11:40 ` Gerd Möllmann
2024-07-06 11:57 ` Gerd Möllmann
2024-07-06 12:03 ` Eli Zaretskii
2024-07-06 12:16 ` Gerd Möllmann
2024-07-06 12:23 ` Pip Cet
2024-07-06 12:39 ` Gerd Möllmann
2024-07-06 12:30 ` Eli Zaretskii
2024-07-06 12:43 ` Gerd Möllmann
2024-07-06 13:53 ` Eli Zaretskii
2024-07-06 12:36 ` Gerd Möllmann
2024-07-06 14:00 ` Helmut Eller
2024-07-06 14:08 ` Gerd Möllmann
2024-07-06 14:24 ` Gerd Möllmann
2024-07-06 14:44 ` Helmut Eller
2024-07-06 14:52 ` Gerd Möllmann
2024-07-06 15:49 ` Pip Cet
2024-07-06 16:31 ` Gerd Möllmann
2024-07-06 16:56 ` Pip Cet
2024-07-06 17:28 ` Gerd Möllmann
2024-07-06 17:31 ` Gerd Möllmann
2024-07-06 18:30 ` Pip Cet
2024-07-06 20:00 ` Gerd Möllmann
2024-07-06 20:09 ` Ihor Radchenko
2024-07-07 3:55 ` Gerd Möllmann
2024-07-07 4:27 ` Gerd Möllmann
2024-07-07 4:30 ` Gerd Möllmann
2024-07-07 6:38 ` Pip Cet
2024-07-07 7:31 ` Gerd Möllmann
2024-07-07 7:44 ` Helmut Eller
2024-07-07 8:10 ` Gerd Möllmann
2024-07-07 8:24 ` Gerd Möllmann
2024-07-07 8:47 ` Pip Cet
2024-07-07 9:24 ` Gerd Möllmann
2024-07-07 9:26 ` Gerd Möllmann
2024-07-07 10:47 ` Eli Zaretskii
2024-07-07 11:19 ` Gerd Möllmann
2024-07-07 14:09 ` Eli Zaretskii
2024-07-07 14:15 ` Gerd Möllmann
2024-07-07 14:42 ` Eli Zaretskii
2024-07-07 14:52 ` Gerd Möllmann
2024-07-07 15:34 ` Eli Zaretskii
2024-07-07 15:36 ` Gerd Möllmann
2024-07-07 16:00 ` Eli Zaretskii
2024-07-07 17:08 ` Gerd Möllmann
2024-07-07 17:49 ` Eli Zaretskii
2024-07-07 18:15 ` Gerd Möllmann
2024-07-07 18:22 ` Eli Zaretskii
2024-07-07 18:29 ` Gerd Möllmann
2024-07-07 14:16 ` Gerd Möllmann
2024-07-07 14:18 ` Gerd Möllmann
2024-07-07 10:57 ` Pip Cet
2024-07-07 11:35 ` Gerd Möllmann
2024-07-07 11:48 ` Gerd Möllmann
2024-07-07 14:07 ` Gerd Möllmann
2024-07-07 14:21 ` Pip Cet
2024-07-07 14:27 ` Gerd Möllmann
2024-07-07 15:22 ` Helmut Eller
2024-07-07 15:40 ` Gerd Möllmann
2024-07-07 15:52 ` Helmut Eller
2024-07-07 15:56 ` Gerd Möllmann
2024-07-07 15:57 ` Pip Cet
2024-07-07 16:26 ` Helmut Eller
2024-07-07 17:03 ` Gerd Möllmann
2024-07-07 18:40 ` Gerd Möllmann
2024-07-07 18:53 ` Helmut Eller
2024-07-07 19:00 ` Gerd Möllmann
2024-07-07 19:31 ` Pip Cet
2024-07-07 19:36 ` Gerd Möllmann
2024-07-08 9:11 ` MPS: commit limit Gerd Möllmann
2024-07-10 6:46 ` Helmut Eller
2024-07-10 7:08 ` Gerd Möllmann
2024-07-16 15:16 ` Helmut Eller
2024-07-16 15:27 ` Eli Zaretskii
2024-07-16 15:43 ` Helmut Eller
2024-07-16 15:54 ` Eli Zaretskii
2024-07-16 16:29 ` Helmut Eller
2024-07-16 16:39 ` Gerd Möllmann
2024-07-16 16:43 ` Pip Cet
2024-07-16 16:56 ` Gerd Möllmann
2024-07-16 15:32 ` Eli Zaretskii
2024-07-16 16:27 ` Helmut Eller
2024-07-16 18:49 ` Pip Cet
2024-07-17 6:15 ` Helmut Eller
2024-07-16 16:32 ` Pip Cet
2024-07-16 16:48 ` Helmut Eller
2024-07-08 5:11 ` MPS: weak hash tables Pip Cet
2024-07-08 5:17 ` Gerd Möllmann
2024-07-08 5:37 ` Pip Cet
2024-07-08 5:43 ` Gerd Möllmann
2024-07-07 8:49 ` Gerd Möllmann
2024-07-08 9:16 ` Andrea Corallo
2024-07-08 9:24 ` Gerd Möllmann
2024-07-08 9:54 ` Andrea Corallo
2024-07-08 10:10 ` Gerd Möllmann
2024-07-08 11:57 ` MPS: out-of-memory Eli Zaretskii
2024-07-08 13:46 ` Gerd Möllmann
2024-07-08 16:45 ` Pip Cet
2024-07-08 18:26 ` Gerd Möllmann
2024-07-08 19:44 ` Pip Cet
2024-07-09 3:58 ` Gerd Möllmann
2024-07-08 18:27 ` Helmut Eller
2024-07-08 18:31 ` Gerd Möllmann
2024-07-08 19:14 ` Eli Zaretskii
2024-07-08 19:35 ` Gerd Möllmann
2024-07-08 19:08 ` Eli Zaretskii
2024-07-08 19:31 ` Pip Cet
2024-07-04 15:22 ` MPS: weak hash tables Helmut Eller
2024-07-04 15:33 ` Pip Cet
2024-07-04 16:46 ` Gerd Möllmann
2024-07-04 16:43 ` Gerd Möllmann
2024-07-02 13:50 ` Mattias Engdegård
2024-07-02 6:57 ` Gerd Möllmann
2024-07-02 7:15 ` Gerd Möllmann
2024-07-02 8:46 ` Ihor Radchenko
2024-07-02 8:59 ` Gerd Möllmann
2024-07-02 9:33 ` Ihor Radchenko
2024-07-02 9:35 ` Pip Cet
2024-07-02 11:03 ` Ihor Radchenko
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/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='OktYqkHd_b7AXwEtc0mvHvPrccA9Tj0YLfA1ZqzP9INwnkRNiX5Mtr1RAnTb2lpmQxpQoja2VbgyxfNuNswvuSIZCu-htZNNHKZCelrgD7Q=@protonmail.com' \
--to=pipcet@protonmail.com \
--cc=eliz@gnu.org \
--cc=eller.helmut@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=gerd.moellmann@gmail.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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).