[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Merging scratch/no-purespace to remove unexec and purespace
From: |
Gerd Möllmann |
Subject: |
Re: Merging scratch/no-purespace to remove unexec and purespace |
Date: |
Fri, 20 Dec 2024 21:57:13 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Pip Cet <pipcet@protonmail.com> writes:
> Gerd Möllmann <gerd.moellmann@gmail.com> writes:
>
>> Pip Cet via "Emacs development discussions." <emacs-devel@gnu.org>
>> writes:
>>
>>> "Stefan Monnier" <monnier@iro.umontreal.ca> writes:
>>>
>>>>>> OTOH and IMHO, it would be preferable if that symbol could not crash
>>>>>> Emacs. Can we come up with a good way to fix that, while preserving the
>>>>>> check that Andrea wants to keep?
>>>>>
>>>>> That sounds like a good thing to focus on, yes. We need to have a value
>>>>> in a vector that we Fread that is distinguishable from all other values.
>>>>
>>>> How 'bout an uninterned symbol `#:foo`?
>>>
>>> I think those are legal for native-compiled subrs to use (there's a
>>> comment about it, at least), so that wouldn't do us any good, would it?
>>>
>>> Pip
>>
>> Uninterned symbols are unique, i.e. (eq '#:a '#:a) => nil.
>> Wouldn't that help?
>
> I don't see how, sorry. Nativecomp produces a string in the .eln file
> that is passed to make_string(), then to Fread(). The string can
> include source code for uninterned symbols, but there's no way for us to
> tell whether a #:lambda-fixup in there was put in by us or by the user.
>
> What we could do is expand read so this:
>
> (let* ((cookie (cons nil nil))
> (read-table (list (cons "cookie" cookie)))
> (result (read "#s(cookie cookie)")))
> (eq result cookie))
>
> to return t. Then we'd have an expressive syntax for this kind of
> thing (obviously, "cookie" should be something useful in the #s(...)
> syntax.
>
> A slightly different option is to do this:
>
> (let* ((cookie (cons nil nil))
> (read-circle (list (cons 1 cookie)))
> (result (read "#1#")))
> (eq result cookie))
>
> in effect allowing us to use prime the read-circle table with
> externally-provided objects.
>
I was thinking of using something like
(read-from-string "[#1=#:a #1# #1#]")
=> ([a a a] . 16)
in which case the first element of the result vector is the uninterned
symbol that, only in this read result, would serve as a marker. The
marker would be different with each read.
Don't know if that's good, though. Just what I think Stefan's idea was.
- Re: Merging scratch/no-purespace to remove unexec and purespace, (continued)
- Re: Merging scratch/no-purespace to remove unexec and purespace, Stefan Kangas, 2024/12/19
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/19
- Re: Merging scratch/no-purespace to remove unexec and purespace, Stefan Monnier, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Gerd Möllmann, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Andrea Corallo, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/21
- Re: Merging scratch/no-purespace to remove unexec and purespace, Gerd Möllmann, 2024/12/21
- Re: Merging scratch/no-purespace to remove unexec and purespace, Andrea Corallo, 2024/12/21
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/21
- Re: Merging scratch/no-purespace to remove unexec and purespace,
Gerd Möllmann <=
- Re: Merging scratch/no-purespace to remove unexec and purespace, Pip Cet, 2024/12/20
- Re: Merging scratch/no-purespace to remove unexec and purespace, Stefan Kangas, 2024/12/17
Re: Merging scratch/no-purespace to remove unexec and purespace, Helmut Eller, 2024/12/17
Re: Merging scratch/no-purespace to remove unexec and purespace, Helmut Eller, 2024/12/18
Re: Merging scratch/no-purespace to remove unexec and purespace, Helmut Eller, 2024/12/21
Re: Merging scratch/no-purespace to remove unexec and purespace, Gerd Möllmann, 2024/12/21