From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: lexbind: how to replace lexical-let approach to hide secrets Date: Wed, 30 Mar 2011 17:12:37 -0400 Message-ID: References: <4D926EA9.5080509@gmail.com> <4D92AD2B.40502@gmail.com> <87lizwd9lt.fsf_-_@lifelogs.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1301519572 29498 80.91.229.12 (30 Mar 2011 21:12:52 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 30 Mar 2011 21:12:52 +0000 (UTC) Cc: emacs-devel@gnu.org To: Ted Zlatanov Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Mar 30 23:12:48 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Q52h4-0008MR-HC for ged-emacs-devel@m.gmane.org; Wed, 30 Mar 2011 23:12:46 +0200 Original-Received: from localhost ([127.0.0.1]:57186 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q52h3-00022C-SB for ged-emacs-devel@m.gmane.org; Wed, 30 Mar 2011 17:12:45 -0400 Original-Received: from [140.186.70.92] (port=56527 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q52gz-000209-5o for emacs-devel@gnu.org; Wed, 30 Mar 2011 17:12:42 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q52gx-0004Oq-Kr for emacs-devel@gnu.org; Wed, 30 Mar 2011 17:12:41 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.183]:55539 helo=ironport2-out.pppoe.ca) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q52gx-0004Om-H6 for emacs-devel@gnu.org; Wed, 30 Mar 2011 17:12:39 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvsEAEeck01MCo6K/2dsb2JhbAClVXiIebYdgxyCTgSWFg X-IronPort-AV: E=Sophos;i="4.63,270,1299474000"; d="scan'208";a="98718635" Original-Received: from 76-10-142-138.dsl.teksavvy.com (HELO pastel.home) ([76.10.142.138]) by ironport2-out.pppoe.ca with ESMTP/TLS/ADH-AES256-SHA; 30 Mar 2011 17:12:37 -0400 Original-Received: by pastel.home (Postfix, from userid 20848) id 6E1815905D; Wed, 30 Mar 2011 17:12:37 -0400 (EDT) In-Reply-To: <87lizwd9lt.fsf_-_@lifelogs.com> (Ted Zlatanov's message of "Wed, 30 Mar 2011 08:24:46 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 206.248.154.183 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:137932 Archived-At: > Slightly related: auth-source.el uses `lexical-let' to define lambda > accessors for secrets (so printing them, for instance, won't show a > password). Will the secrets still be hidden in the lexbind branch? Using lexbind, yes. Using `let', no. > And > is there a smarter way to do it? > Sample code: > (let ((data "my secret")) > (lexical-let ((data data)) (lambda () data))) When lexical-binding is set: (let ((data "my secret")) (lambda () data)) returns something like (closure ((data . "my secret") t) () data). If you wan to hide the value, then use: (let ((data (let ((sym (make-symbol "foo"))) (set sym "secret") sym))) (lambda () (symbol-value data))) which is similar to the what lexical-let ends up doing. Stefan