From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Pascal J. Bourguignon" Newsgroups: gmane.emacs.help Subject: Re: Real-life examples of lexical binding in Emacs Lisp Date: Sat, 30 May 2015 14:59:50 +0200 Organization: Informatimago Message-ID: <87d21i6x15.fsf@kuiper.lan.informatimago.com> References: <87bnh3eqiv.fsf@mbork.pl> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1432990827 16291 80.91.229.3 (30 May 2015 13:00:27 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 30 May 2015 13:00:27 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Sat May 30 15:00:22 2015 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 1YygNA-0004S7-7Z for geh-help-gnu-emacs@m.gmane.org; Sat, 30 May 2015 15:00:20 +0200 Original-Received: from localhost ([::1]:39419 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YygN9-00046o-HL for geh-help-gnu-emacs@m.gmane.org; Sat, 30 May 2015 09:00:19 -0400 Original-Path: usenet.stanford.edu!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 42 Original-X-Trace: individual.net Vj3PYMTacTg/QoBcmeRIIgrolaxHuWn5+Zrn45mnc/UUSGGNbM Cancel-Lock: sha1:YjAyYzQyZGMyZTdjZWM4YTQzYzY5N2UyZjFmYmI2NzI3OGM3ZTY0MA== sha1:jTtOK7wu0vBgjdKLzcYHqPXnoGg= Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9 033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR mV+hO/VvFAAAAABJRU5ErkJggg== X-Accept-Language: fr, es, en User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Original-Xref: usenet.stanford.edu gnu.emacs.help:212397 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:104681 Archived-At: Tassilo Horn writes: > The emacs paper has a section explaining why emacs used dynamic binding > from the start: http://www.gnu.org/software/emacs/emacs-paper.html#SEC17 > > However, to me the two example use-cases only motivate why you want to > be able to use dynamic scoping for special variables (defvar), not > really for local variables (let) or function parameters, although the > first Edit Picture example explicitly speaks of binding command > arguments but I don't understand it. Indeed, in general, you want lexical binding for local variables. However, I would argue that for global variables, lexical binding would be useful too, even by default. In Common Lisp, we can implement global lexical variables, using eg. symbol macros, but in emacs lisp, we're missing operators for the global lexical case: dynamic lexical global defvar - local let(1) let(2) (1) when lexical-binding is nil or the variable has been defvar'ed. (2) when lexical-binding is t and the variable has not been defvar'ed. > But there are good use-cases for dynamic variables also in "normal" > programs. One example is to be able to bind some *error-handler* > dynamically in order to customize how to cope with errors that happen > far below the call stack. Definitely. https://groups.google.com/forum/#!original/comp.lang.lisp/oC5gDvn42pM/IudCXzCtxowJ -- __Pascal Bourguignon__ http://www.informatimago.com/ “The factory of the future will have only two employees, a man and a dog. The man will be there to feed the dog. The dog will be there to keep the man from touching the equipment.” -- Carl Bass CEO Autodesk