From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Barry Margolin Newsgroups: gmane.emacs.help Subject: Re: Declaring a local dynamic variable? Date: Wed, 25 Sep 2013 20:06:45 -0400 Organization: A noiseless patient Spider Message-ID: References: NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1380154219 29118 80.91.229.3 (26 Sep 2013 00:10:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 26 Sep 2013 00:10:19 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Sep 26 02:10:23 2013 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VOz9y-0004fp-79 for geh-help-gnu-emacs@m.gmane.org; Thu, 26 Sep 2013 02:10:22 +0200 Original-Received: from localhost ([::1]:55447 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VOz9x-0005UW-HT for geh-help-gnu-emacs@m.gmane.org; Wed, 25 Sep 2013 20:10:21 -0400 Original-Path: usenet.stanford.edu!news.kjsl.com!feeder.erje.net!eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!barmar.motzarella.org!.POSTED!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 45 Injection-Info: barmar.motzarella.org; posting-host="2be9e9f5dd9af768b8861af71b85fc28"; logging-data="13815"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+CnqYAbwPNKyLUUCcLyUb6" User-Agent: MT-NewsWatcher/3.5.3b3 (Intel Mac OS X) Cancel-Lock: sha1:Z4JFWqUZpwseTg5WI7blxwgbrSY= Original-Xref: usenet.stanford.edu gnu.emacs.help:201322 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 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.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:93591 Archived-At: In article , Stefan Monnier wrote: > >> > So in essence Emacs doesn't really have local dynamic variables? > >> Dynamic scoping is inherently global, whether in Elisp or in any other > >> language. > > > Not in Common Lisp. > > > (defun d1 () > > (let ((var 1)) > > (declare (special var)) > > (l1))) > > > (defun l1 () > > (let ((var 2)) > > (print var) > > (d2))) > > > (defun d2 () > > (declare (special var)) > > (print var)) > > > D1 and D2 use the dynamic variable VAR, L1 uses the lexical variable VAR. > > Same in Elisp. But if d1 and d2 are in two separate packages that know > nothing about each other but who happen to call each other through some > potentially twisted sequence of calls, they will still interfere, > because there's only (globally) one dynamic variable by that name. Which, of course, is why this is a horrible programming style. I wasn't recommending this, just showing that a dynamic variable isn't totally global -- you can have scopes where the same variable name is used lexically. But it's a little safer than defvars -- the chance that unrelated packages will happen to have local special variables with the same name, and also call between these functions, is extremely remote, and certainly less likely than using a variable that happens to match a defvar. -- Barry Margolin, barmar@alum.mit.edu Arlington, MA *** PLEASE post questions in newsgroups, not directly to me ***