From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Can we go GTK-only? Date: Mon, 31 Oct 2016 17:56:00 +0200 Message-ID: <83a8dkpl67.fsf@gnu.org> References: <24db2975-17ca-ad01-20c8-df12071fa89a@dancol.org> <4615E73A-19E2-4B79-9889-D3FA686DDDE6@raeburn.org> <11E61536-1345-4B81-999D-2E17F8B14C62@dancol.org> Reply-To: Eli Zaretskii NNTP-Posting-Host: blaine.gmane.org X-Trace: blaine.gmane.org 1477931413 7761 195.159.176.226 (31 Oct 2016 16:30:13 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 31 Oct 2016 16:30:13 +0000 (UTC) Cc: raeburn@raeburn.org, monnier@iro.umontreal.ca, emacs-devel@gnu.org To: Daniel Colascione Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Oct 31 17:30:09 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c1FTI-0000kO-62 for ged-emacs-devel@m.gmane.org; Mon, 31 Oct 2016 17:30:04 +0100 Original-Received: from localhost ([::1]:36836 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c1FTK-0002E1-Mv for ged-emacs-devel@m.gmane.org; Mon, 31 Oct 2016 12:30:06 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59246) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c1EwB-00045S-TX for emacs-devel@gnu.org; Mon, 31 Oct 2016 11:55:52 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c1Ew8-0001iF-1E for emacs-devel@gnu.org; Mon, 31 Oct 2016 11:55:51 -0400 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:49472) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c1Ew7-0001iB-U6; Mon, 31 Oct 2016 11:55:47 -0400 Original-Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:3133 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1c1Ew7-0001aQ-1r; Mon, 31 Oct 2016 11:55:47 -0400 In-reply-to: <11E61536-1345-4B81-999D-2E17F8B14C62@dancol.org> (message from Daniel Colascione on Sun, 30 Oct 2016 15:49:02 -0700) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:209022 Archived-At: > From: Daniel Colascione > Date: Sun, 30 Oct 2016 15:49:02 -0700 > Cc: emacs-devel@gnu.org > > Agreed. That's basically how IntelliJ works too. We can do even better too: > there's no reason these parts need to run in the same process it even the same > machine. I think we should be careful when comparing Emacs with systems that have a different basic design. In Emacs, almost everything is driven by changes in buffer text and the data structures that accompany buffer text, and the Lisp interpreter is inherent in many display-related features. For example, this: > But this scheme won't really eliminate the coupling between redisplay and lisp > though, since the former calls into the latter. The redisplay thread has to > block waiting on lisp anyway. is a major issue that those other systems might not have. > Anyway, I strongly encourage you to look at the React Native rendering model. > It's the most elegant way I've seen of constructing GUIs in general. Where's that model described in enough technical detail to be able to compare it with what we do in Emacs? > The key insight there is that we shouldn't have redisplay *lock* the display > matrix and render it. The lisp universe should send a *copy* of the matrix set, > then go about its business. This way, redisplay can go display that copy and > everything is decoupled. You turn the system into an Erlang like message > passing environment. There's probably some confusion or misunderstanding here: the Lisp code in Emacs has no access to the glyph matrices, so it does not (and cannot) "send the display matrix" to the display engine. Thus, the fact that the display engine can lock the glyph matrices is due to its being their sole writer and reader. The communication between the Lisp universe and the display engine is solely via the buffer text and the auxiliary data structures (text properties, overlays, etc.).