From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg via Users list for the GNU Emacs text editor Newsgroups: gmane.emacs.help Subject: Re: Lexical vs. dynamic: small examples? Date: Sat, 14 Aug 2021 05:56:09 +0200 Message-ID: <87h7fs4r3a.fsf@zoho.eu> References: Reply-To: Emanuel Berg Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21682"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:YuECN/Iitx5Nh4eJ/c04qxT+CUM= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sat Aug 14 05:56:44 2021 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 1mEkmq-0005S2-Ph for geh-help-gnu-emacs@m.gmane-mx.org; Sat, 14 Aug 2021 05:56:44 +0200 Original-Received: from localhost ([::1]:39756 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mEkmp-0003Wj-BU for geh-help-gnu-emacs@m.gmane-mx.org; Fri, 13 Aug 2021 23:56:43 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:52744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mEkmW-0003WN-Ec for help-gnu-emacs@gnu.org; Fri, 13 Aug 2021 23:56:24 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:53614) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mEkmU-0003hN-LW for help-gnu-emacs@gnu.org; Fri, 13 Aug 2021 23:56:24 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1mEkmS-000526-HY for help-gnu-emacs@gnu.org; Sat, 14 Aug 2021 05:56:20 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 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" Xref: news.gmane.io gmane.emacs.help:132528 Archived-At: Eduardo Ochs wrote: > is quite nice - especially because of its last part, that > inspects two different getter-setter pairs, shows that their > lexical environments are the cadrs of their closures, and > shows that `geta' and `seta' share the same lexical > environment and that `getb' and `setb' share another lexical > environment... > > My current knowledge of lexical binding stops there, though. > Any comments (or help) would be very welcome... OK, IIUC with lexical (AKA static) binding the variable's value is determined by the code and the scope, so you can always find out what value it is by looking at that and move within that and only that delimited area. Move outside of that the variable bindings don't mean anything. Move from A to B, and you wanna know what goes on in B, it doesn't matter what happened in A and you look for the answer in BB (B and only B). Have a look: (let ((a 1)) (do-something a) ; 1 is here (do-something-else) ) ; but if a is referenced here, it isn't 1 ; not the same a! This is more useful and clear to the regular user and perhaps the advanced one as well and most people should think this natural from experience but also from what makes sense looking at that code :) This style seems to make for more independent, well-defined, more reusable and less vulnerable units of computation... With dynamic binding however the variable's value is rather read from the top of a stack data structure, everyone who sets the value then pushes it onto the top of the stack - and when it is unset that value is popped - but even so if it is thereafter referenced, it is still defined, one just looks for the plate below. This style is more like one mastermind keeping track of everything thru telepathy... -- underground experts united https://dataswamp.org/~incal