emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC] Adding threads to Eshell


From: Jim Porter
Subject: Re: [RFC] Adding threads to Eshell
Date: Fri, 16 Dec 2022 12:11:05 -0800

On 12/16/2022 6:05 AM, Stefan Monnier wrote:
However, before I go too far, I wanted to check with other, more
knowledgeable people: are Emacs threads available on all platforms?

I'll let others answer this part.  IIUC the answer is not "yes", but
like you I hope the cases where they're not supported can be simply
swept under the rug.

I'm not sure it's worth the added complexity (yet?), but maybe it would be useful to have some generic way of executing code asynchronously (probably using CPS-transformations). Then you could pass this code to a thread if those are available, or if not, just run in the main thread when Emacs is idle.

A second issue I noticed is that Emacs threads have their own,
completely separate set of lexical bindings.

Do you really mean *lexical* bindings?
If yes, then I don't understand what you mean (I don't understand how
they could be non-completely separate).

I suppose I mean *local* bindings, really. The manual says, "The new thread is created with no local variable bindings in effect." That's something that I think would be nice to change in this case, so that a user could do something like:

  (let ((some-defvar t))
    (eshell-command "echo $some-defvar"))

Internally, 'eshell-command' would convert "echo $some-defvar" to some Lisp form, then call 'make-thread' and eval that form in the thread.

For dynamically scoped vars, you'd have to do it more explicitly.
Lisp Machine Lisp had an operation they called `closure` for that
purpose (they didn't have static scoping at all).
See https://hanshuebner.github.io/lmman/fd-clo.xml

That sounds like what I want. Thanks for the code snippet.

The only bit I'm still unsure about is if there's a good (and performant) way to ask, "What are all the local bindings of dynamic variables?" Then, I could use that to feed those bindings to the thread and this would work. (I'm still not sure whether this is the right thing to do in the first place, but I want to see what it's like. It would also make more of the regression tests pass, which would make it easier to keep developing this.)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]