From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: Lexical binding: why? Date: Tue, 28 May 2019 13:44:51 +0000 Message-ID: <20190528134451.GB5296@ACM> References: <20190528100850.GA5296@ACM> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="182544"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mutt/1.10.1 (2018-07-13) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue May 28 15:48:28 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hVcSp-000lJl-W7 for ged-emacs-devel@m.gmane.org; Tue, 28 May 2019 15:48:28 +0200 Original-Received: from localhost ([127.0.0.1]:35289 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hVcRO-00089b-KK for ged-emacs-devel@m.gmane.org; Tue, 28 May 2019 09:46:58 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:38575) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hVcPW-0007PE-2R for emacs-devel@gnu.org; Tue, 28 May 2019 09:45:03 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hVcPV-0003PE-1w for emacs-devel@gnu.org; Tue, 28 May 2019 09:45:02 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:58974 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1hVcPU-0003LW-Or for emacs-devel@gnu.org; Tue, 28 May 2019 09:45:01 -0400 Original-Received: (qmail 52609 invoked by uid 3782); 28 May 2019 13:44:52 -0000 Original-Received: from acm.muc.de (p4FE15C8D.dip0.t-ipconnect.de [79.225.92.141]) by colin.muc.de (tmda-ofmipd) with ESMTP; Tue, 28 May 2019 15:44:51 +0200 Original-Received: (qmail 6516 invoked by uid 1000); 28 May 2019 13:44:51 -0000 Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) X-Primary-Address: acm@muc.de X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 193.149.48.1 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:237100 Archived-At: 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).