From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Drew Adams Newsgroups: gmane.emacs.help Subject: RE: Is `eval' allowed to modify its argument? Date: Fri, 13 Nov 2020 15:14:47 -0800 (PST) Message-ID: References: <87ft5el1xr.fsf@web.de> <87a6vl5wbi.fsf@web.de> <875z693x1z.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10428"; mail-complaints-to="usenet@ciao.gmane.io" To: Stefan Monnier , help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sat Nov 14 00:15:45 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 1kdiIC-0002cW-Vr for geh-help-gnu-emacs@m.gmane-mx.org; Sat, 14 Nov 2020 00:15:44 +0100 Original-Received: from localhost ([::1]:59178 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdiIC-0001ik-0U for geh-help-gnu-emacs@m.gmane-mx.org; Fri, 13 Nov 2020 18:15:44 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:50496) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdiHU-0001iY-LZ for help-gnu-emacs@gnu.org; Fri, 13 Nov 2020 18:15:00 -0500 Original-Received: from aserp2120.oracle.com ([141.146.126.78]:45304) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdiHS-000247-CL for help-gnu-emacs@gnu.org; Fri, 13 Nov 2020 18:15:00 -0500 Original-Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0ADNA4Ri051155; Fri, 13 Nov 2020 23:14:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=WXzRAwo8zXrBnj156RckKrvjbYKgQzfAZfy1YdfnVFg=; b=H1dsnTLV3H0SZ+XJtAUO+VTIdu+wqQhS26vrM0QvU8xAsPcklkXlf5dnGsl9kb74Lrpg xd2DNcHyBcmn1SxyhctP+mTTEioRI5eSRCC/AMJWFoMnl2VtBa1FtsNCoG9aX6eGb0JL 9hvJLnmrtz5tQ699NVYfAdQ+DjM0YAAD/gtYLGR8VV4uQf3dbKPx6PtYRM97/qq1gLlH GerWcpziAYfM8S1erLowBsKtBlfqLEcSOcUO8eqA6kYo59qI886zeVQyMDDCMIi1QLyZ Kw+yf54dIWba/HEvWlWJnCvxe2UWAUxCd74Sincj4J2EVF+CzO8VRwfAfu0eHX7WWFrT Og== Original-Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 34nkhmcm9n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 13 Nov 2020 23:14:51 +0000 Original-Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0ADNBQPE115172; Fri, 13 Nov 2020 23:14:51 GMT Original-Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserp3030.oracle.com with ESMTP id 34p55tw1nu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 13 Nov 2020 23:14:50 +0000 Original-Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 0ADNEnIR007426; Fri, 13 Nov 2020 23:14:49 GMT In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5071.0 (x86)] X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9804 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 spamscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 malwarescore=0 bulkscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2011130148 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9804 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 priorityscore=1501 mlxscore=0 suspectscore=0 mlxlogscore=999 lowpriorityscore=0 spamscore=0 malwarescore=0 adultscore=0 clxscore=1015 bulkscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2011130148 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/13 18:14:52 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham 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:125262 Archived-At: > 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). >=20 > 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`). >=20 > 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. +1. I was going to say about the same thing. Safest is local to a function or other context (e.g. `let' lexical binding). But there are use cases for modifying a part of a global structure. In that case, as in all cases, it's generally more likely that you'll step on your own toes than that someone else will step on them. One part of you or your code will forget or not realize that something you use is susceptible to your code modifying it ... gotcha! IOW, modifying only stuff that _you_ create doesn't guard against your own worst enemy - yourself at another time or in a different context. And the effect isn't always easy to detect immediately or the cause easy to localize. Really modifying data (i.e., "destructively") is a different world - not for the faint of heart. ;-)