[Top][All Lists]

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

Re: Lexical binding: why?

From: Alan Mackenzie
Subject: Re: Lexical binding: why?
Date: Tue, 28 May 2019 13:44:51 +0000
User-agent: Mutt/1.10.1 (2018-07-13)

Hello, Stefan.

On Tue, May 28, 2019 at 08:26:16 -0400, Stefan Monnier wrote:
> > What is the purpose of converting Lisp files to use lexical binding?

> The lexical-binding version of Elisp offers closures and avoidance of
> corner-case name clashes with higher-order functions.
> For this reason, we added it and we're very unlikely to remove it.

Perish the thought!  :-)

> In contrast the non-lexical-binding version of Elisp is now
> redundant/obsolete because it does not offer any feature not already
> available in the lexical-binding mode.  So we only keep it for backward
> compatibility and will likely remove it in some distant future.

> > I always thought the idea was to speed the SW up.

> Not really, no.  It does offer a better potential for optimization, but
> nobody has made any effort to take advantage of it so far.

> > I thus see no speedup from the use of lexical binding.

> That corresponds to my experience as well.  When I installed the
> lexical-binding code, my main concern was to not impact existing code,
> so the fact that the new lexical-binding mode was "about as fast" was
> kind of a happy accident.

> > Have I, perhaps, made some mistake somewhere?  Does anybody else see
> > significant speed increases through the use of lexical binding?

> IIRC some operation in the js2 code was significantly slowed down (in
> Emacs-24) by lexical-binding and then (less significantly but still
> significantly) sped up when the new condition-case byte-codes were
> introduced in 24.4 (and used by default since Emacs-25), so there are
> some cases, but by and large I wouldn't expect any major change.

OK, thanks for the illucidation.

Just in passing, the Elisp manual doesn't seem to be as helpful as it
might be, here.  It doesn't positively recommend using lexical binding
in new programs, for example.

Just in passing2, it seems to be difficult to enable lexical binding
conditionally.  The best that I can come up with is something like:

-*- eval: (setq lexical-binding (> emacs-major-version 25)) -*-

, but that has the irritating consequence of querying the user with "Are
you sure?" for each such file that gets loaded, even though
lexical-binding is a "safe" variable.

>         Stefan

Alan Mackenzie (Nuremberg, Germany).

reply via email to

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