From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Andrea Corallo Newsgroups: gmane.emacs.devel Subject: Re: Suppressing native compilation (short and long term) Date: Thu, 29 Sep 2022 14:32:07 +0000 Message-ID: References: <87ill8paw7.fsf@trouble.defaultvalue.org> <834jwrig5s.fsf@gnu.org> <83wn9ngvr6.fsf@gnu.org> <83r0zuhgfl.fsf@gnu.org> <834jwqh7uu.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10835"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) Cc: rlb@defaultvalue.org, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Sep 29 18:56:52 2022 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 1odwqC-0002gn-EZ for ged-emacs-devel@m.gmane-mx.org; Thu, 29 Sep 2022 18:56:52 +0200 Original-Received: from localhost ([::1]:54584 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1odwqB-0007GH-HX for ged-emacs-devel@m.gmane-mx.org; Thu, 29 Sep 2022 12:56:51 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40810) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oduaN-0002Bk-5O for emacs-devel@gnu.org; Thu, 29 Sep 2022 10:32:23 -0400 Original-Received: from mx.sdf.org ([205.166.94.24]:65040) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oduaJ-0005tl-Di; Thu, 29 Sep 2022 10:32:22 -0400 Original-Received: from ma.sdf.org (ma.sdf.org [205.166.94.33]) by mx.sdf.org (8.15.2/8.14.5) with ESMTPS id 28TEW7rU019160 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO); Thu, 29 Sep 2022 14:32:09 GMT In-Reply-To: <834jwqh7uu.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 29 Sep 2022 12:01:45 +0300") Received-SPF: pass client-ip=205.166.94.24; envelope-from=akrl@sdf.org; helo=mx.sdf.org X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham 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" Xref: news.gmane.io gmane.emacs.devel:296469 Archived-At: Eli Zaretskii writes: >> From: Andrea Corallo >> Cc: rlb@defaultvalue.org, emacs-devel@gnu.org >> Date: Thu, 29 Sep 2022 08:18:08 +0000 >> >> >> >> Yes `native-comp-deferred-compilation' AFAIK does exactly this already, >> >> >> `native-comp-available-p' is to check if the native compiler is >> >> >> available (not necessarily the deferred/async mechanism). >> >> > >> >> > But then it should disable the trampolines as well, see startup.el. >> >> >> >> Not in my opinion, trampolines are not deferred async compilation. >> >> >> >> Also as mentioned ATM is not possible to disable trampolines and have a >> >> fully working native comp Emacs (if we assume primitives can be >> >> redefined). >> > >> > I'm confused. I alluded to this part of startup.el: >> > >> > (when (featurep 'native-compile) >> > (unless (native-comp-available-p) >> > ;; Disable deferred async compilation and trampoline synthesis >> > ;; in this session. This is necessary if libgccjit is not >> > ;; available on MS-Windows, but Emacs was built with >> > ;; native-compilation support. >> > (setq native-comp-deferred-compilation nil >> > comp-enable-subr-trampolines nil)) >> > >> > The last part disables trampolines, AFAIU. So what am I missing here? >> >> Hi Eli, >> >> yes it does, what do you find confusing about this? >> >> This is how I see things, we have two compilation mechanisms: >> >> 1- Syncronous native compilation. This can be triggered: >> 1.1- By the user (calling `native-compile'). >> 1.2- By Emacs in the need of generating a trampoline. >> >> 2- Async/deferred/jit (or how we wanna call it), this is triggered >> automatically when loafing a .elc with no corresponding .eln. >> >> We have two customize to control the two automatic mechanisms: >> `comp-enable-subr-trampolines' gates 1.2, >> `native-comp-deferred-compilation' gates 2. >> >> Indeed `native-comp-available-p' gates all native compilations. > > So I was asking whether when the user wants to disable native > compilations, we should disable both 2 and 1.2. We already do that > when Emacs detects at startup that it doesn't have access to > libgccjit, so why not do the same when the user wants to disable > native compilations for whatever reasons? Ah I see. We could allow for disabling completely native compilation, but that's something different from what those two customizes are for. That said I think that given the very low cost of building trampolines, and the deep impact that their absence would have in the Emacs machinery, we should acctually discourage the user to do so unless some very specific reason is present (I can't think of any ATM). Andrea