unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: Lexical binding: why?
Date: Tue, 28 May 2019 13:44:51 +0000	[thread overview]
Message-ID: <20190528134451.GB5296@ACM> (raw)
In-Reply-To: <jwvblzmojyg.fsf-monnier+emacs@gnu.org>

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).



  parent reply	other threads:[~2019-05-28 13:44 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-28 10:08 Lexical binding: why? Alan Mackenzie
2019-05-28 12:01 ` Tadeus Prastowo
2019-05-28 12:26 ` Stefan Monnier
2019-05-28 13:02   ` Dmitry Gutov
2019-05-28 13:25     ` Stefan Monnier
2019-05-28 13:46       ` Dmitry Gutov
2019-05-28 13:44   ` Alan Mackenzie [this message]
2019-05-28 17:21     ` Stefan Monnier
2019-05-28 17:41       ` Alan Mackenzie
2019-05-28 17:58         ` Stefan Monnier
2019-05-28 15:19 ` John Wiegley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190528134451.GB5296@ACM \
    --to=acm@muc.de \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).