From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.help Subject: Re: Is `eval' allowed to modify its argument? Date: Fri, 13 Nov 2020 18:01:48 -0500 Message-ID: References: <87ft5el1xr.fsf@web.de> <87a6vl5wbi.fsf@web.de> <875z693x1z.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39731"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:gallmu34rwm/hK23qYpVLXyZRdY= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sat Nov 14 00:03:43 2020 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kdi6Z-000AEK-0e for geh-help-gnu-emacs@m.gmane-mx.org; Sat, 14 Nov 2020 00:03:43 +0100 Original-Received: from localhost ([::1]:54246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdi6Y-0006yn-3K for geh-help-gnu-emacs@m.gmane-mx.org; Fri, 13 Nov 2020 18:03:42 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48104) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdi4u-0006yB-Gk for help-gnu-emacs@gnu.org; Fri, 13 Nov 2020 18:02:00 -0500 Original-Received: from static.214.254.202.116.clients.your-server.de ([116.202.254.214]:53582 helo=ciao.gmane.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdi4s-0000h6-Vo for help-gnu-emacs@gnu.org; Fri, 13 Nov 2020 18:02:00 -0500 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1kdi4o-0008CS-2v for help-gnu-emacs@gnu.org; Sat, 14 Nov 2020 00:01:54 +0100 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/13 18:01:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 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-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:125261 Archived-At: >> > So do we consider that a bug in `thunk-let*'? >> Yes. Most likely a misuse of `nreverse` or something like that. > Exactly that, yes. AFAIR I used `nreverse' on purpose: back then I had > thought it would not matter. Destructive operations on lists, like `nreverse` or `sort` should (as a general rule) only ever be used on lists you yourself just constructed (so you can be (almost) 100% sure you hold the one and only reference to the list and nobody else will be able to witness the destructiveness). Using it on something you received as an argument is basically always a bug, unless it's clearly documented (as is done, for example, in the doc of `nreverse`). Stefan PS: The "almost" above is because in Elisp you can't really be sure of anything, thanks to things like advice. That's why users of advice are warned that it's up to them to deal with any problem that may result of poor interaction between their code and the rest.