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: Shrinking the C core Date: Sun, 27 Aug 2023 08:53:56 +0000 Message-ID: <875y50g923.fsf@localhost> References: <20230809094655.793FC18A4654@snark.thyrsus.com> <87edk3gbh3.fsf@dataswamp.org> <87jztvnuyb.fsf@localhost> <875y5bdutt.fsf@dataswamp.org> <87y1i6e1uh.fsf@localhost> <874jkub40o.fsf@dataswamp.org> <87jztqdw2l.fsf@localhost> <87msym9i4r.fsf@dataswamp.org> <877cpp914t.fsf@localhost> <83fs4dwwdo.fsf@gnu.org> <874jkt90a5.fsf@localhost> <87y1i57jqi.fsf@localhost> <87pm3h7h8k.fsf@localhost> <87h6ot7cf3.fsf@localhost> <87h6ol3zi0.fsf@dataswamp.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="24928"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Emanuel Berg Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Aug 27 10:54:20 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 1qaBXH-0006FO-Rm for ged-emacs-devel@m.gmane-mx.org; Sun, 27 Aug 2023 10:54:19 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qaBWX-00032Z-Sb; Sun, 27 Aug 2023 04:53:33 -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 1qaBWW-00032N-1Z for emacs-devel@gnu.org; Sun, 27 Aug 2023 04:53:32 -0400 Original-Received: from mout02.posteo.de ([185.67.36.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qaBWS-0007M6-R2 for emacs-devel@gnu.org; Sun, 27 Aug 2023 04:53:31 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 134A9240101 for ; Sun, 27 Aug 2023 10:53:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1693126406; bh=lZbaxPIEqzycrbkXUpj+3GMLv5efM2g9VCkBioGVvAU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:From; b=b1OXaG4gXwUvpSarIRvLR7Lc/A2/VT581u8O1lPc3q+xXe2J6wQPINUEw8WvXuf1s aTAOt06TU/TyggNHujOKtDa2cS1sSsTBZwrkEmHPpqNM7pHcCcECzlYz65AbGPhkcp EFWszqCi04SZDuaIQbULw47lNzzRr7Gg+yrNs9cCGuJ4mtHyOpIlbtRo27gUvyvkng +k4TIbmWRy3lucr0YWcher7hzLuFAUknPjydVKQGXuGlyEa/ARWE/Z4kFnfaX4nHby AwIVSMO0tMJJNYYGeyp0s+P3R7Zv3HdOLzU7s9br4L9cjBGMJq8pGYCZukwDJadLRF 7pzawLKtIiGyg== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4RYSC90jFhz9rxB; Sun, 27 Aug 2023 10:53:24 +0200 (CEST) In-Reply-To: <87h6ol3zi0.fsf@dataswamp.org> Received-SPF: pass client-ip=185.67.36.66; envelope-from=yantar92@posteo.net; helo=mout02.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=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-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:309316 Archived-At: Emanuel Berg writes: > Ihor Radchenko wrote: > >> AFAIK, users cannot specify type info manually, but types >> are tracked when transforming Elisp byte code into >> LIMP representation. > > What is LIMP? AFAIU, native compilation code transforms Elisp into intermediate representation called LIMPLE. I recommend reading https://zenodo.org/record/3736363 where the native compilation process is described in details. Because my own understanding is limited and I may use terms not accurately. >> The only problem (AFAIU) is that GCC JIT cannot reach inside >> subr level, so all these information does not benefit Emacs >> functions implemented in C. > > But surely that code is fast enough? It is fast, but it could be faster if native compilation could cut off some code branches inside the C code. > Well, I guess optimally one would want to optimize everything > including Emacs' C. > > Or do you mean it obstructs the optimization of our Elisp > as well? Let me demonstrate what I mean by example. Consider a simple Elisp like (let ((foo '(a b c))) (length foo)) `length' is defined in C like: EMACS_INT val; if (STRINGP (sequence)) val = SCHARS (sequence); .... else if (CONSP (sequence)) val = list_length (sequence); .... else wrong_type_argument (Qsequencep, sequence); return make_fixnum (val); In theory, if we had full information, we could just optimize the initial Elisp to make_fixnum (list_length('(a b c))) or even to just 3 as '(a b c) value is known at compile time. However, despite knowing that the value of foo is a list constant at compile time, native compilation code has no access to the implementation details of `length' - it is a black box for native compiler. So, we cannot perform the above optimization. The workaround that is currently used is using special compile-time expander for select C functions (like for `+' - `define_add1_sub1') However, as we discussed earlier, this leads to multiple implementations of the same function and makes maintenance more difficult. So, only some very important C functions can be expanded like this. For now, AFAIU, only `+' and `-' have native compiler expansion defined. Other expansions are yet to be implemented. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at . Support Org development at , or support my work at