From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ihor Radchenko Newsgroups: gmane.emacs.devel Subject: Re: Emacs design and architecture. How about copy-on-write? Date: Mon, 18 Sep 2023 13:55:47 +0000 Message-ID: <871qevk2l8.fsf@localhost> References: <83edizjn0v.fsf@gnu.org> <0518f65b-1dd1-6923-8497-da4d3aeac631@gutov.dev> <87sf7fc7kd.fsf@dataswamp.org> <834jjuk68t.fsf@gnu.org> <87cyyhc7uu.fsf@dataswamp.org> <83ttrsg9nx.fsf@gnu.org> <83h6nrg4eg.fsf@gnu.org> <83v8c7elan.fsf@gnu.org> <87h6nrwqvq.fsf@yahoo.com> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10062"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , Alan Mackenzie , incal@dataswamp.org, emacs-devel@gnu.org To: Po Lu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Sep 18 15:57:42 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qiEkt-0002Px-Jw for ged-emacs-devel@m.gmane-mx.org; Mon, 18 Sep 2023 15:57:39 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qiEi7-00006Z-1q; Mon, 18 Sep 2023 09:54:47 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qiEhz-0008Ok-Pc for emacs-devel@gnu.org; Mon, 18 Sep 2023 09:54:39 -0400 Original-Received: from mout01.posteo.de ([185.67.36.65]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qiEhv-00013K-5o for emacs-devel@gnu.org; Mon, 18 Sep 2023 09:54:39 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 906D524002B for ; Mon, 18 Sep 2023 15:54:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1695045272; bh=wQv0wDCyG3folQcdSHV9bps5UmPEkix4y/t23X0MnOo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:From; b=e4ActYEAnqaYc7q7XzGRS8q/YQfeRFPEFhtoJjMly+UPdaBPxygkBjcPXHlGa9uzA fEiibJWoUcFa/5jFCtKQuXNEvZtvKPEEYLAqJKjC06g4e9om/VHuHMr1A8KPQs8KHt sJqE/PD57Qc6QuXJQBPhdb7wkYlZ718vhz/31yzejQBMGbHCELgKe7FFcP9YiZNV9r NlDrdNFQGHQXzqiTeIembqepNeIABJDko3xUkYlYHZK+41ye/KxB59HZlT9IHJfy6l x/x1Uiau3NYsD/V7b0DBosiwv5SgmyPcg1nsMmCRcHo0CQphLnAFt36LMyZZx/ajy5 xZdB3IDuJg3ig== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4Rq5rR26yqz9rxG; Mon, 18 Sep 2023 15:54:30 +0200 (CEST) In-Reply-To: <87h6nrwqvq.fsf@yahoo.com> Received-SPF: pass client-ip=185.67.36.65; envelope-from=yantar92@posteo.net; helo=mout01.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:310701 Archived-At: Po Lu writes: > I suggest that people interested in a multi-threaded Emacs answer these > two questions instead: > > - Is there a portable (in POSIX) method for reliably stopping a POSIX > thread, with all callee-saved registers and register variables > within leaf functions saved to the stack or some other area in > memory? This question sounds like a part of a specific implementation detail you have in mind. May you share more context? > - How will finalizers, buffer modification hooks, symbol value > watchers and the like be executed in response to garbage collection, > buffer modification, or setting symbols in non-main threads? 1. finalizers AFAIU, you are referring to GC finalizers. But is GC thread-safe? 2. symbol value watchers are triggered by let-bindings among other things. At least for let-binding triggers, it makes sense to keep the thread-local context for value watchers. I see not why other kind of triggers should not keep the modifier thread context either. Of course, one might want to process triggers in a separate thread, but that may be done by explicitly spawning one. 3. modification hooks are always triggered within a single buffer. According to previous discussions, we concluded that it would be difficult to allow multiple threads modify the same buffer, so, similar to watchers, thread context may be important, and the hooks should probably run from within the trigger tread. > Just two cents from someone who actually _HAS_ a multi-processing Emacs > in a quasi-functional state. Is it available anywhere in public repository? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at . Support Org development at , or support my work at