help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Declaring a local dynamic variable?


From: Barry Margolin
Subject: Re: Declaring a local dynamic variable?
Date: Wed, 25 Sep 2013 20:06:45 -0400
User-agent: MT-NewsWatcher/3.5.3b3 (Intel Mac OS X)

In article <mailman.2873.1380135245.10748.help-gnu-emacs@gnu.org>,
 Stefan Monnier <monnier@iro.umontreal.ca> 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 ***


reply via email to

[Prev in Thread] Current Thread [Next in Thread]