unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Third <alan@idiocy.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: Nick Helm <nick@tenpoint.co.nz>,
	georgedp@orbitalimpact.com, monnier@iro.umontreal.ca,
	emacs-devel@gnu.org
Subject: Re: Should this package be included into the NS port?
Date: Wed, 23 May 2018 22:21:29 +0100	[thread overview]
Message-ID: <20180523212129.GB36578@breton.holly.idiocy.org> (raw)
In-Reply-To: <83k1rucs15.fsf@gnu.org>

On Wed, May 23, 2018 at 06:26:14PM +0300, Eli Zaretskii wrote:
> > From: Nick Helm <nick@tenpoint.co.nz>
> > Date: Wed, 23 May 2018 17:11:35 +1200
> > 
> > > In an ideal world (and I believe the Mac port has gone this way) we
> > > would put the NSApp run loop in one thread, and Emacs lisp in another
> > > and let them communicate with each other asynchronously. This wouldn’t
> > > solve everything, but it would make some of our problems easier.
> 
> FWIW, that's what the w32 port does.
> 
> > > We can’t easily do that, though, as the inter‐thread communication
> > > systems provided in Objective‐C are either a pain to implement with
> > > complex types like Lisp_Object, or aren’t compatible with GCC and/or
> > > GNUstep (Grand Central Dispatch).
> 
> Why do you need to have the communications between the threads be in
> terms of Lisp objects?  In the w32 port, they communicate in C
> objects, and the communications pipe is the read_socket_hook.  So in a
> nutshell, the GUI event thread sends input to the Lisp interpreter as
> if it was the other end of a socket through which window-system
> events, including keyboard, mouse, and everything else, are coming.

The NS port is similar, it executes the NS run loop within
ns_read_socket, and it sends events to the Lisp interpreter.

The main problem I have is things coming in the opposite direction. I
don’t know if W32 is the same, but we can only run GUI related code in
the main thread. If we separate the Lisp thread and the NS run loop
thread, then code called from Lisp can’t directly interact with the NS
GUI code, it has to be dispatched to the NS run loop thread.

If we do this we’ll have to use performSelectorOnMainThread, which
calls a method or function on the main thread, but only allows you to
pass a single parameter. I believe it’s possible to serialise multiple
arguments into a single one, but I’ve no idea if that’s practical.

I think this is possible, but will probably require a fair amount of
work.

It’s also possible I’m over‐complicating this. I feel rather out of my
depth.

-- 
Alan Third



  parent reply	other threads:[~2018-05-23 21:21 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-15  5:19 Should this package be included into the NS port? George Plymale II
2018-05-15 18:25 ` Stefan Monnier
2018-05-15 18:36   ` Alan Third
2018-05-16  2:48     ` George Plymale II
2018-05-18 19:36       ` Alan Third
2018-05-18 21:21         ` George Plymale II
2018-05-19  4:57           ` Nick Helm
2018-05-19 15:49             ` George Plymale II
2018-05-23  5:22               ` Nick Helm
2018-05-23 19:29                 ` George Plymale II
2018-05-19  9:50           ` Alan Third
2018-05-19 16:06             ` George Plymale II
2018-05-19 18:33             ` Stefan Monnier
2018-05-22  1:42               ` George Plymale II
2018-05-22  1:48                 ` Van L
2018-05-22 19:04                   ` Alan Third
2018-05-23  2:30                     ` Off Topic (was: Should this package be included into the NS port?) Van L
2018-05-23 20:43                       ` Alan Third
2018-05-24  1:27                         ` emacs-26.1-rc1: ./configure (was: Off Topic) Van L
2018-05-24  8:55                           ` emacs-26.1-rc1: ./configure Robert Pluim
2018-05-24 10:51                             ` Van L
2018-05-24 11:51                               ` Robert Pluim
2018-05-24 11:57                                 ` Van L
2018-05-24 23:47                               ` Van L
2018-05-22 19:15                 ` Should this package be included into the NS port? Alan Third
2018-05-22 20:09                   ` George Plymale II
2018-05-19  4:42         ` Nick Helm
2018-05-19 10:33           ` Alan Third
2018-05-19 11:51             ` Philipp Stephani
2018-05-19 16:52             ` George Plymale II
2018-05-23  4:55             ` Nick Helm
2018-05-23  5:11             ` Nick Helm
2018-05-23 15:26               ` Eli Zaretskii
2018-05-23 16:37                 ` Stefan Monnier
2018-05-23 17:23                   ` Eli Zaretskii
2018-05-23 21:21                 ` Alan Third [this message]
2018-05-24 16:37                   ` Eli Zaretskii
2018-05-24 17:46                     ` Philipp Stephani
2018-05-24 17:51                       ` Philipp Stephani
2018-05-24 18:14                       ` Eli Zaretskii
2018-05-16  2:44   ` George Plymale II
2018-05-17 22:13 ` George Plymale II
2018-05-18 18:50   ` Alan Third
2018-05-18 20:40     ` George Plymale II
2018-05-19  8:31     ` Michael Albinus
2018-05-19  4:29 ` Nick Helm
2018-05-19 15:38   ` George Plymale II
2018-05-29 21:29 ` George Plymale II
2018-05-29 21:42   ` Alan Third
2018-05-29 23:40     ` George Plymale II
2018-05-31 20:40       ` Alan Third
2018-06-01  1:58         ` Stefan Monnier
2018-06-02 18:31           ` George Plymale II
2018-06-02 19:39             ` Stefan Monnier
2018-06-02 20:11               ` Alan Third
2018-06-03  2:25                 ` Stefan Monnier
2018-06-02 18:26         ` George Plymale II
2018-06-02 16:45       ` Ryan Thompson
2018-06-02 17:22         ` Stefan Monnier
2018-06-02 18:56         ` George Plymale II

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=20180523212129.GB36578@breton.holly.idiocy.org \
    --to=alan@idiocy.org \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=georgedp@orbitalimpact.com \
    --cc=monnier@iro.umontreal.ca \
    --cc=nick@tenpoint.co.nz \
    /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).