From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Newsgroups: gmane.emacs.help Subject: Re: Closures - do you understand them well? Date: Fri, 23 Dec 2022 07:27:38 +0100 Message-ID: References: <87h6y5pt8k.fsf@web.de> <87bkodpqnk.fsf@web.de> <87k030tlfh.fsf@web.de> <87ilike1l8.fsf@gnu.org> <87cz8suv92.fsf@dataswamp.org> <87v8m4ytnq.fsf@dataswamp.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="5HnH9aPUwUIyPg0l" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="33640"; mail-complaints-to="usenet@ciao.gmane.io" To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Fri Dec 23 07:28:31 2022 Return-path: Envelope-to: geh-help-gnu-emacs@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 1p8bXi-0008XV-It for geh-help-gnu-emacs@m.gmane-mx.org; Fri, 23 Dec 2022 07:28:30 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p8bX2-0003z4-4m; Fri, 23 Dec 2022 01:27:48 -0500 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 1p8bWy-0003yw-7w for help-gnu-emacs@gnu.org; Fri, 23 Dec 2022 01:27:45 -0500 Original-Received: from mail.tuxteam.de ([5.199.139.25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p8bWw-0000xV-8w for help-gnu-emacs@gnu.org; Fri, 23 Dec 2022 01:27:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=From:In-Reply-To:Content-Type:MIME-Version:References:Message-ID: Subject:To:Date:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=77fk7qDjnQURz5/WGS2opgb70DIyI7m/KYBPDm3fQgQ=; b=urSZo5SO4iOoH4myH3Qry1jIi3 I7yEC7e5W4/7kymk7HLfmrjhvdrlZHB7NQ4jRtMfweYMvQWakLPTtFOip5LnITzw7UkFxvs3lYytE Vgooi6fR6FJKEGAWezZ6y1WmuW650VukSzHjtszdlRsuxjkc1J7x8zWfJrf0hbrjcYBuc0qk3ZV0b hHP7jeeXL9e6gr5vbtnAMjtWNm1ynxql001gF1cV6Fne2zAMPcLbY1i9y1bJxnpR6FCMp95HzOqlx hAqKTJpZe8sWupauDfz2s2xupjYISpDc3WcnmLakquOK9a+WIbP3dWiUb5SJJGtRpc5a5A6j2UG4p XJ1txs+w==; Original-Received: from tomas by mail.tuxteam.de with local (Exim 4.94.2) (envelope-from ) id 1p8bWs-0008U6-8h for help-gnu-emacs@gnu.org; Fri, 23 Dec 2022 07:27:38 +0100 Content-Disposition: inline In-Reply-To: <87v8m4ytnq.fsf@dataswamp.org> Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.help:141910 Archived-At: --5HnH9aPUwUIyPg0l Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Dec 22, 2022 at 05:00:25AM +0100, Emanuel Berg wrote: > tomas wrote: >=20 > > Just at macro expansion (aka compile) time >=20 > Side question, how many 'times' are there and what, > at least conceptually, happens in each? Figure or ascii > diagram, anyone? It's turtles [1] all the way down! Since you have eval, you are empowered to compile at run time and thus have a compile time in there. Still, there are (at least) two phases (at least whenever you have anything more than "just" a naive interpreter), one where your "source" is being analysed to find opportunities ("this variable is always bound to 3 here [2] (or to the identity fun, or...) so we can roll that constant into the compile product"), and the run time, where that product is "run". > > Welcome to Lisp's multiple personality :-) >=20 > Explain :-) :-( Other languages (e.g. C) have clearly distinct sub-languages to do things at compile time (C, again, has CPP, which is clearly distinct from C proper). In Lisp, you can use Lisp at compile time (the language you use to transform your source is Lisp), but at the same time, your environment is completely different at those two phases. Some go as far as to say that they are different languages. Typically there are devices to control that (in Emacs Lisp `eval-when-compile' and `eval-and-compile', I'll let more knowledgeable folks chime in and complete that list). Cheers [1] https://en.wikipedia.org/wiki/It%27s_turtles_all_the_way_down [2] That's why lexical is easier for optimising compilers --=20 t --5HnH9aPUwUIyPg0l Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iF0EABECAB0WIQRp53liolZD6iXhAoIFyCz1etHaRgUCY6VKUwAKCRAFyCz1etHa RtU9AJ0WfoRImBjaeLq8an15HbJ1Aa0ugwCfZTWixdtf9buPaYk/ywDMTPm7sbY= =NDBw -----END PGP SIGNATURE----- --5HnH9aPUwUIyPg0l--